本文へスキップ
← 記事一覧に戻る

マイクロサービスについて

マイクロサービスとは

マイクロサービス(Microservices)は、大きなアプリケーションを「小さく、独立した機能単位」に分割して開発・運用するアーキテクチャ(設計手法)のことです。対比される概念として、すべての機能が1つのプログラムにまとまっている「モノリス(Monolithic)」があります。

モノリスとマイクロサービスの違い

特徴 モノリス (Monolith) マイクロサービス (Microservices)
構造 全機能が1つの巨大な塊 機能ごとに独立したサービス
開発 全体でのビルド・デプロイが必要 サービス単位で個別にデプロイ可能
スケーラビリティ 全体を拡張するしかない 負荷が高いサービスだけを拡張できる
技術スタック 1つの言語・フレームワークに固定 サービスごとに最適な言語を選択できる

マイクロサービスの主なメリット

  • 変更に強い(敏捷性): 1つの機能を修正しても、他のサービスに影響を与えにくいため、リリースサイクルを高速化できます。
  • 障害の隔離: あるサービスでエラーが起きても、システム全体がダウンするのを防ぎやすくなります(例:決済機能が止まっても、商品閲覧はできる)。
  • チームの自律性: チームごとに担当サービスを分けることで、大規模開発でもコミュニケーションコストを抑えられます。

導入にあたっての課題(デメリット)

非常に強力な手法ですが、難易度も高いです。

  • 運用の複雑化: 管理するサーバーやコンテナの数が増え、監視やログ管理が難しくなります。
  • データの一貫性: サービスごとにデータベースを持つのが基本なため、複数のサービスにまたがるデータの整合性を保つのが大変です。
  • 通信のオーバーヘッド: サービス間をネットワーク(APIなど)経由で呼び出すため、通信遅延が発生する可能性があります。

エンジニアとしての視点

ソフトウェアエンジニアとして関わる場合、以下のような技術スタックと密接に関係します。

  • コンテナ技術: Docker を使ってサービスをパッケージ化し、Kubernetes で管理するのが一般的です。
  • 通信プロトコル: REST API だけでなく、高速な gRPC や、非同期通信のためのメッセージキュー(RabbitMQ, Kafkaなど)が使われます。
  • クラウドサービス: AWSを利用する場合、ECS や EKS、あるいはサーバーレスな Lambda を組み合わせて構築することが多いです。