最初にイマココ
- 自社開発のWebサービスで
- 10年くらい常にビジネスの要望を柔軟に・素早く取り入れて
- 「最初から完璧でずっと変わらない」のではなくて「常に良い状態に改善し続けていける」
- そういうサービスを作れたらいいなぁって思ってる。
ので、DDD、Microservices、Spring Cloudらへんを試しておきたい。という感じ。
最初に言っておきたかったのは、DDDやMicroservicesやSpring Cloudに関して「すごいいいよ!」って薦めるレベルにまだ僕はいなくて「いいかどうかをプライベートで触ってみて確かめたい」ってくらいの位置ですってことね。
今月上旬に教えてもらった記事をまだ読んでる
データのRead側はなんとなく分かるんだけど。Microservicesだと、Write側は、一貫性と戦わなきゃいけないのかなーって気がする。 #kanjava
— Mitsuyuki.Shiiba (@bufferings) June 12, 2016
つ https://t.co/F9IgVdlD4i https://t.co/vdVniOOm7m
— Toshiaki Maki (@making) June 12, 2016
ざっくりまとめると
結果整合性
マイクロサービスの場合には結果整合性を考えることが大切になってくるよね。
イベントソーシング
その結果整合性の実現方法として、DBのトランザクションログみたいな考え方の、イベントソーシングっていうやり方がある。
IDDDにも書いてたね。
いまぐぐったら、ますださんのん分かりやすかった: state ソーシング、 event ソーシング 【スタイルの選択肢】 | システム設計日記
Spring Cloud
Spring Cloudを使ってそのデモアプリを作ったよ。マイクロサービスアーキテクチャで、イベントソーシングを使ったデモアプリ。
Reactor
さらに、ロジックにはReactorを使ってる。
という僕にとって盛りだくさんなもの。あと、起動にはDocker Composeを使ってるっぽいね。
全体像
詳しい図は、記事を参照すると良いんだけど。大きく3つのグループに分かれてて。こんな風になってる:
- 1) Front
- Online Store Web
- 2) Spring Cloud Backing Services
- Config Service
- Discovery Service
- Edge Service
- User Service
- 3) Backend Microservices
- Catalog Service
- Account Service
- Inventory Service
- Cart Service
- Order Service
そっかー。User Serviceは2階層目に入るんだーとか、色々興味深い。
ほんで、イマココ
基盤
ConfigとDiscovery(Eureka)は以前に勉強してたので何となく大丈夫。
Edge(Zuul)も以前勉強したはずなんだけど、全く忘れてるので明日の朝思い出そう。あわよくば、User Serviceの認証の部分まで分かればいいなー。内部的にHystrixを使ってるっぽいから、そこも思い出さなきゃかもだけど。
そこまでがSpring CloudでMicroservicesを構築するときの基盤みたいなものかな。
ビジネスロジック
その後は、Backend Microserviceを読んで、Event Sourcingをどんな風に実装してるのかを見たい。こっちは、ビジネスロジックって感じだね。今回はここに一番興味がある。
やらないこと
Reactorに関しては、今回はあんまり深く考えない。こんな書き方でリアクティブなのを簡潔に書けるんだなーってくらいに留めといて、また後日ちゃんと勉強する。
という、頭の整理を、ブログを使ってしてみた。よし。明日はZuulとかRibbonとからへんを思い出せばいいんだな。おやす。