تخيل أنك تعمل لدى ناشر أخبار كبير يدعى 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