サービスメッシュ【service mesh】
サービスメッシュとは?

大規模なアプリケーションを開発する際、「マイクロサービス」と呼ばれる小さな機能単位に分割して構築する手法が用いられることがある。この構造では、数十から数百のサービスが互いに通信しながら協調して動く。サービスの数が増えるほど、通信の信頼性確保、障害の検知、セキュリティの維持といった課題が積み重なる。
従来は各サービスの内部にこれらの処理を個別に実装していたが、システムが大規模になると設定のばらつきや開発者の負担増が避けられなくなった。この課題に対し、サービスメッシュはサービス間の通信に関する機能をアプリケーション本体から切り離し、インフラ層に独立して持たせる。
具体的には、各サービスの隣に「サイドカープロキシ」と呼ばれる小さなプログラムを配置し、すべての通信をそのプロキシ経由で行う。これにより、通信の暗号化、負荷分散、タイムアウトやリトライの制御、トラフィックの分割といった処理を、個々のサービスを改修することなく統一的に適用できる。
各プロキシの動作は、「コントロールプレーン」と呼ばれる中央の管理機構から配布される設定によって制御される。運用者はアプリケーションに手を加えることなく、通信の振る舞いを動的に調整できる。また、各プロキシが通信の遅延やエラー率などの指標を収集するため、分散したサービスの状態をリアルタイムで把握し、障害箇所を迅速に特定することも可能になる。
代表的な実装としては「Istio」や「Linkerd」があり、コンテナ管理基盤である「Kubernetes」と組み合わせて使われることが多い。クラウドネイティブな環境でサービス数が増大するほど、通信管理の複雑さも増すため、サービスメッシュの導入による運用負担の軽減と可観測性(オブザーバビリティ)の向上は大きな意味を持つ。