🧩 Service Mesh
✅ このスタイルの概要
サービス間通信の「ネットワークまわりの責務」をアプリから切り離し、
Sidecar プロキシ+コントロールプレーンで一元管理する構造スタイル。
✅ 解決しようとした問題
マイクロサービスが増えると、各サービスは通信に関して次のような責務を抱えがちになる:
- リトライ・タイムアウト・サーキットブレーカー
- ロギング・トレーシング
- mTLS による暗号化・認証
- サービスディスカバリ・ロードバランシング
これらをアプリケーションごとのライブラリ実装に任せると:
- 言語/フレームワークごとに実装がバラバラ
- ポリシー変更が全サービスのデプロイを伴う
Service Mesh はこれに対して:
「通信制御は Sidecar プロキシに任せ、
アプリはビジネスロジックに集中する」
という構造で応えます。
✅ 基本思想・ルール
● Data Plane(Sidecar プロキシ)
- 各サービスインスタンスのそばにプロキシ(Sidecar)を配置
- すべてのサービス間通信はこのプロキシを経由
- リトライ・タイムアウト・暗号化などをここで実施
● Control Plane
- ポリシー・ルーティング・証明書管理などを一元管理
- Data Plane に設定を配布
アプリケーションコードは:
- 通常の HTTP/gRPC 呼び出しを行うだけ
- ネットワーク制御の詳細は Mesh 側に任せる
✅ 得意なアプリケーション
- マイクロサービス数が多い大規模システム
- セキュリティポリシー(mTLS など)を一元的に適用したい環境
- 可観測性(メトリクス・トレース・ログ)を統一したい組織
❌ 不向きなケース
- サービス数が少ない小規模システム
- インフラ/Ops の体制がなく、Mesh の運用コストを払えない場合
Service Mesh を導入すると:
- 学習コスト(Istio など)の高さ
- デバッグポイントの増加
といったデメリットもあるため、規模と運用力に見合うかが重要である。
✅ 歴史(系譜・親スタイル)
- マイクロサービス / Kubernetes の普及とともに登場
- Sidecar パターンをベースに、Envoy / Istio / Linkerd などが実装として広まる
- API Gateway と並び、マイクロサービスの「ネットワークレイヤの標準構成要素」として認識されるようになった
✅ 関連スタイル
- API Gateway / BFF:外部への入り口。Service Mesh は主に内部トラフィックを扱う
- REST / gRPC:Mesh 上で運ばれるプロトコル
- Zero Trust / セキュリティアーキテクチャ:mTLS や認可ポリシーの適用ポイントとして
✅ 代表的なフレームワーク
Service Mesh はインフラレイヤのプロダクトとして実装されることが多い。
-
Istio
Envoy をデータプレーンとする代表的な Service Mesh。機能が豊富で Kubernetes 環境で広く使われる。 -
Linkerd
シンプルさと軽量さを重視した Service Mesh。メトリクスや mTLS を簡単に導入できる。 -
Consul Connect
HashiCorp Consul によるサービスディスカバリ+ Mesh の統合ソリューション。 -
AWS App Mesh / GCP Anthos Service Mesh
クラウドプロバイダが提供するマネージドな Mesh 基盤。 -
Envoy
多くの Service Mesh 実装でデータプレーンとして採用される高性能プロキシ。
✅ このスタイルを支えるデザインパターン
Service Mesh 自体はインフラ構造だが、設計の観点では以下のパターンと強く結びつく。
-
Proxy
Sidecar 自体がプロキシとして、トラフィックの制御・監視・暗号化を行う。 -
Facade
Mesh が提供する統一された API(ポリシー・ルーティング設定)を通じて、複雑なネットワーク制御を隠蔽する。 -
Mediator
コントロールプレーンが各データプレーン(Sidecar)との調停役として振る舞う。 -
Observer
メトリクス・トレース・ログといった観測情報を集約する仕組みに現れる。 -
Chain of Responsibility
リクエストが複数のフィルタ/ルール(認証 → ルーティング → リトライなど)を通過して処理される構造。
✅ まとめ
Service Mesh は、
- 通信制御
- セキュリティ
- 可観測性
といったネットワーク周りの関心事を、
アプリケーションから切り離して扱うための構造スタイルである。
マイクロサービスの規模が一定以上になったとき、
「ネットワークレイヤをアプリから分離するか?」 という選択肢として検討する価値がある。