サービスメッシュとは? ネットワークのロジックをコードから切り離す
サービスメッシュとは、service-to-service の通信、retry、暗号化、observability をアプリケーションコードの外側で処理するインフラ層です。
マイクロサービス群が拡大するにつれ、各サービスは同じネットワーク上の関心事、retry、timeout、mutual TLS、トラフィックのルーティング、メトリクスを再実装することになります。サービスメッシュはそのロジックをコードから取り出し、各サービスの隣に1つずつ配置され中央で制御される sidecar proxy のネットワークに移します。コードは単純な呼び出しを行い、残りはメッシュが処理します。
sidecar がネットワークの仕事をする
各サービスインスタンスの隣で proxy が動き、その inbound と outbound のトラフィックを傍受します。これらの sidecar は control plane によって調整され、サービスに気づかせることなく retry、timeout、暗号化、ルーティングルールを適用します。
コードから何をオフロードするか
- retry、timeout、circuit breaking。
- サービス間の mutual TLS。
- canary と blue-green のロールアウトのためのトラフィックシェーピング。
- すべての呼び出しに対する統一されたメトリクス、ログ、trace。
なぜ大規模で魅力的なのか
メッシュがなければ、各チームが各言語で回復性とセキュリティを異なる形で実装します。メッシュはこれらの関心事を1か所に標準化するため、挙動が一貫し、ポリシー変更のために何十ものコードベースに触れる必要がなくなります。
CI/CD 上の利点
メッシュはトラフィックを段階的にシフトできるため、canary と progressive deploy をアプリケーションコードではなく設定変更にできます。パイプラインがそれらのロールアウトルールを駆動し、新しいバージョンへトラフィックを増やしていき、メトリクスが悪化すれば自動で rollback します。
それが増やす複雑さ
メッシュは運用・デバッグ・最新維持すべきインフラが増えることを意味します。sidecar はレイテンシとリソース使用を増やし、設定を誤ったメッシュは全トラフィックを壊しかねません。大規模ではその価値を発揮しますが、少数のサービスにはオーバーヘッドです。
sidecar が存在する状態でのテスト
メッシュの挙動、mTLS、retry、ルーティングは、sidecar が動いて初めて現れます。現実的な CI テストはメッシュを立ち上げてポリシーとルーティングを実行するため、素のサービスをテストするより重く、ウォームな runner の恩恵を受けます。
重要なポイント
- サービスメッシュは、ネットワーク・回復性・セキュリティを sidecar proxy に移す。
- 多数のサービスにまたがって retry、mTLS、トラフィックのルーティングを標準化する。
- config 駆動の canary deploy を可能にするが、実運用上の複雑さを確実に増やす。