ishikawa_pro's memorandum

若手webエンジニアの備忘録です.

Swift Node.js Docker AWS etc...色々やります。

『マイクロサービスパターン』を読んだ

こんにちは。
今日は、マイクロサービスパターンという本を読んだので感想的なメモです。
ちょっと前まで、技術書を電子書籍で読むチャレンジをしてましたが、どうも電子書籍だと続かないので、最近は諦めて物理本を買って読んでます。

買ってから知りましたが、この本の翻訳版らしいです。

Microservices Patterns: With examples in Java

Microservices Patterns: With examples in Java

読んだモチベーション

僕は1年くらい前から、10以上のマイクロサービスで運用されているサービスの開発に関わっています。
既存のマイクロサービスに機能を追加したり、新しいマイクロサービスを開発していて、あんまりマイクロサービスの実装パターンや設計方法について知らないなと最近思い、もっと色々なデザインパターンを学びたいなと思って、今回この本を読んでみました。

感想

自分の関心がある部分以外は結構端折って読んだので、かいつまんで感想書きます。

マイクロサービス間の通信方法について

3章でマイクロサービス間の通信方法について、同期的な通信と非同期メッセージングの2通りの方法について解説されてました。
普段の業務では、一部で非同期メッセージングを利用してますが、ほぼRESTを使った同期通信を使ってるので、非同期メッセージングの使いどころなどは勉強になりました。

マイクロサービスアーキテクチャでのトランザクション管理

4章でマイクロサービスアーキテクチャでのトランザクション管理について、サーガという非同期メッセージングとローカルトランザクションを使ってデータ整合性を維持するパターンを踏まえて解説されてました。
サーガ自体を知らなかったので勉強になりました。ただ、イベント駆動で非同期的にやり取りするパターンだけで全てのユースケースは網羅できないと思うので、同期的な通信でのトランザクション管理のパターンも知りたかったです。
この本全体で、マイクロサービスでトランザクション管理といえばサーガという感じでサーガ全推しな感じでした。
他のパターンも気になって調べてみましたが、tcc(try/confirm/cancel) というパターンもありました。 engineering.mercari.com 内容を読んでみると、業務で使ってるやりかたがtcc(choreographyっぽい)だと気づきました笑

クエリー実装について

7章でマイクロサービスアーキテクチャでのクエリー実装について解説されてました。
単純に複数サービスからデータを取得して合体させるAPI compositionパターンと、それでは表現できない複雑なクエリーの場合は、専用のテーブルと場合によってはそれ用のサービスを用意して効率よくクエリーを実装しましょうというCQRSパターンについて解説されてました。
普段は、ほぼAPI compositionで頑張ってたので、CQRSについては、勉強になりました。

まとめ

マイクロサービスアーキテクチャでの色々な実装パターンや設計などを知りたかったので、この本はとても丁度良い本でした。
普段の業務で使ってる技術スタックに置き換えて、さらに深堀って勉強していきたいです。
他にもモノリスからマイクロサービスへの移行をするための設計方法やインフラ回りなどについても解説してあるので、そっちの方に興味がある方にもおすすめだと思います。

おわりに

次に読む本は、データ指向アプリケーションデザインにしました。

分厚くて読むの大変なので、あえてここで読むことを宣言します笑
結構苦手分野っぽいですが、知りたいことがいっぱい書いてありそうだったので頑張って読みます。