Представьте, что вы работаете в крупном новостном издательстве Fairflax Media , вдохновленном цветком льна (конечно, не путать с Fairfax Media).
Вам поставили задачу разбить огромную монолитную систему на микросервисы и перенести все в Kuberentes. Вы предпочитаете проектирование, ориентированное на предметную область, и считаете, что каждая база данных должна принадлежать только одному приложению. Но со временем вы замечаете, что многим сервисам нужны общие данные. Вам необходимо убедиться, что данные согласованы во всех службах и производительность запросов приемлема.
master
содержит исходное состояние — тесно связанные сервисы.event-sourcing
должна содержать реализацию Event Sourcing + CQRS, содержащую асинхронные сервисы, которые независимы и легко тестируются.Этот проект предназначен для всех, кто хочет перейти на асинхронную микросервисную архитектуру с использованием Golang.
Перейти 1.9 или новее
$GOPATH
установлен
dep
для управления зависимостями
В Mac OSX с помощью brew
...
$ brew install dep
$ brew upgrade dep
На других платформах вы можете использовать скрипт install.sh:
$ curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
Добавьте, что PATH содержит $GOPATH/bin.
$ go help gopath
$ export PATH=$PATH:$GOPATH/bin
$ go get -u github.com/pavelnikolov/eventsourcing-go/demo-articles
$ go get -u github.com/pavelnikolov/eventsourcing-go/demo-graph
$ go get -u github.com/pavelnikolov/eventsourcing-go/demo-sitemap
$ go get -u github.com/pavelnikolov/eventsourcing-go/demo-rss
Или:
$ go get -u github.com/pavelnikolov/eventsourcing-go/...
Или:
$ mkdir -p $GOPATH/github.com/pavelnikolov
$ cd $GOPATH/github.com/pavelnikolov
$ git clone github.com/pavelnikolov/eventsourcing-go
Затем установите зависимости:
$ dep ensure
Запустите в четырех разных окнах терминала:
go install ./cmd/demo-articles && demo-articles
go install ./cmd/demo-graph && demo-graph
go install ./cmd/demo-rss && demo-rss
go install ./cmd/demo-sitemap && demo-sitemap
Перейдите к приложениям в браузере:
Установите компилятор protobuf
Установите плагин protoc Go.
$ go get -u github.com/golang/protobuf/protoc-gen-go
Перестройте сгенерированный код Go.
$ go generate github.com/pavelnikolov/eventsourcing-go/...
Или запустите команду protoc
(с плагином grpc)
$ protoc -I publishing/ publishing/publishing.proto --go_out=plugins=grpc:publishing