マイクロサービスについて
マイクロサービスとは
マイクロサービス(Microservices)は、大きなアプリケーションを「小さく、独立した機能単位」に分割して開発・運用するアーキテクチャ(設計手法)のことです。対比される概念として、すべての機能が1つのプログラムにまとまっている「モノリス(Monolithic)」があります。
モノリスとマイクロサービスの違い
| 特徴 | モノリス (Monolith) | マイクロサービス (Microservices) |
|---|---|---|
| 構造 | 全機能が1つの巨大な塊 | 機能ごとに独立したサービス |
| 開発 | 全体でのビルド・デプロイが必要 | サービス単位で個別にデプロイ可能 |
| スケーラビリティ | 全体を拡張するしかない | 負荷が高いサービスだけを拡張できる |
| 技術スタック | 1つの言語・フレームワークに固定 | サービスごとに最適な言語を選択できる |
マイクロサービスの主なメリット
- 変更に強い(敏捷性): 1つの機能を修正しても、他のサービスに影響を与えにくいため、リリースサイクルを高速化できます。
- 障害の隔離: あるサービスでエラーが起きても、システム全体がダウンするのを防ぎやすくなります(例:決済機能が止まっても、商品閲覧はできる)。
- チームの自律性: チームごとに担当サービスを分けることで、大規模開発でもコミュニケーションコストを抑えられます。
導入にあたっての課題(デメリット)
非常に強力な手法ですが、難易度も高いです。
- 運用の複雑化: 管理するサーバーやコンテナの数が増え、監視やログ管理が難しくなります。
- データの一貫性: サービスごとにデータベースを持つのが基本なため、複数のサービスにまたがるデータの整合性を保つのが大変です。
- 通信のオーバーヘッド: サービス間をネットワーク(APIなど)経由で呼び出すため、通信遅延が発生する可能性があります。
エンジニアとしての視点
ソフトウェアエンジニアとして関わる場合、以下のような技術スタックと密接に関係します。
- コンテナ技術: Docker を使ってサービスをパッケージ化し、Kubernetes で管理するのが一般的です。
- 通信プロトコル: REST API だけでなく、高速な gRPC や、非同期通信のためのメッセージキュー(RabbitMQ, Kafkaなど)が使われます。
- クラウドサービス: AWSを利用する場合、ECS や EKS、あるいはサーバーレスな Lambda を組み合わせて構築することが多いです。