マイクロサービスに関するメモ
マイクロサービスの勉強中。「モノリスからマイクロサービスへ」の2章までのメモ。
マイクロサービスとは
マイクロサービスとは、ビジネスドメインに基づいてモデル化された、独立してデプロイ可能なサービス。
「ビジネスドメインに基づいてモデル化された」というところも大事らしく、今までは、システムがいわゆる3層構造(フロント、バックエンド、データベース)の分け方をしていたのを、ビジネスが受注生産品の販売であれば、「受注」「生産」「販売」「製品管理」「発送」など、ビジネス自体に基づいて分けられることになるらしい。 当然、組織もビジネスに合わせて分けることになり、DBなども複数持つことになるらしい。DevOpsとかの文脈も含むみたい。
利点
- 各チームが仕事をコントロールしやすくする(仕事の範囲を明確に線引きできる)
- 管理範囲が横断的でなくなるため、仕事をコントロールしやすくなる。(三層構造だと、各チームの仕事が他のチームに影響を及ぼしやすい)
- 市場投入までの時間の削減
- 小さくデプロイできるため。
- 負荷に対するスケーリング
- 小さいサービスが複数あるため、サービスに応じてスケーリングできる。
- 堅牢性の改善
- 各サービスが独立しているため、トラブル時の影響範囲を狭められる。
- 同時に作業可能な開発者の数の増加
- サービスを分けることで、並行作業を容易になる。
- 新しい技術を受け入れ
- サービスを分けることで、サービスにあった技術を選択できる。
マイクロサービスがうまく機能しないと想定される場合
- ビジネスドメインがはっきりしていないとき
- マイクロサービスは、ビジネスドメインでわけるため。
- スタートアップなど、マイクロサービスの利点よりも他に優先するべきものが多い場合
- スタートアップはそもそもビジネスがうまくいくかわからんので、ビジネスを試すことを優先すべき
- 顧客の環境にインストールして管理するソフトウェアなど。
- Kubernatesをいれろというわけにいかない。
- 最もな理由を持たない場合
- なんとなくマイクロサービスにしようっていうのはやめようねってはなし。おおそうだけど。
感想
なんというか、利点はわかるけど、導入は難しそうだなってのも思う。本で書かれている通り、一部の機能だけ切り出してやってみるとかがいいんだろうな。例えば、コードを書く人が6人くらいいれば、4人と2人に分けてサービス持つとかするといいかも。逆に、そもそも2人しかコードを書く人いなかったら、仕事増えるだけな気もする。