サービスメッシュとは、アプリの異なる部分やサービス間で発生する大量のネットワークベース通信を促進・処理するために設計された、専用かつ設定可能で低遅延のインフラストラクチャ層です。サービスアーキテクチャによって生じる問題や課題を解決する製品を総称する用語であり、セキュリティ、アプリケーションテレメトリー、ネットワークトラフィック制御に関する課題などが含まれます。
サービスメッシュは、各アプリケーションサービスや特定のタスク管理プロセスに対応付けられたネットワークプロキシで構成されます。これらのプロキシはまとめてデータプレーンと呼ばれ、異なるサービス間の呼び出しを傍受して処理する役割を担います。一方、管理プロセスはコントロールプレーンとも呼ばれ、サービスメッシュの頭脳としてプロキシの動作を調整します。コントロールプレーンは、運用・保守担当者がネットワーク全体を操作・監視するためのアプリケーション・プログラミング・インターフェース(API)も提供します。
異なるアプリケーションサービス間の通信やデータ共有を管理する他のシステムとは異なり、サービスメッシュはアプリに直接組み込まれます。アプリのサービスがどのように相互作用しているか、またその状態が良好かどうかを記録できるため、通信を最適化しやすくなります。通信が最適化されれば、アプリの成長に伴うダウンタイムも回避しやすくなります。
サービスメッシュが提供する一般的な機能には、ロードバランシング、サービスディスカバリー、障害復旧、暗号化などがあります。サービス間通信を安全かつ高速で信頼性の高いものにできます。
サービスメッシュはどのように機能するのか?
サービスメッシュは、アプリケーションのランタイム環境に新たな機能を追加するものではありません。そもそもアプリには、リクエストをポイントAからポイントBへ届ける方法を指定するルールが常に必要でした。サービスメッシュはその代わりに、サービス間通信を制御するロジックを各サービスから切り離し、インフラストラクチャ層として抽象化します。そのため、サービスメッシュはネットワークプロキシの集合としてアプリケーションに組み込まれます。
サービスメッシュでは、インフラストラクチャ層のプロキシを介してサービス間でリクエストがルーティングされます。このため、サービスメッシュを構成する個々のプロキシは各サービスと並行して動作し、サービス内部には組み込まれません。これがサイドカーと呼ばれる理由です。
関連記事: ネットワーク上でマイクロサービスを活用する
サービスメッシュのメリット
サービスメッシュは、サービス間通信の管理に伴う問題に対処します。具体的には、次のとおりです。
- マイクロサービス開発とコンテナ開発のいずれにおいても、サービス間通信を簡素化します。
- 通信エラーはサービスのインフラストラクチャ層で発生するため、原因を診断しやすくなります。
- アプリケーションの開発だけでなく、テストやデプロイも迅速化できます。
- 認証、認可、暗号化などのセキュリティ機能をサポートします。
- サイドカーとも呼ばれる、コンテナクラスターの隣に配置されたプロキシインスタンスは、ネットワークサービスの管理に効果を発揮します。
サービスメッシュの主な機能には、次のようなものがあります。
- セキュリティ。サービスメッシュは通信を自動的に暗号化し、認可や認証などのセキュリティポリシーをネットワークからアプリ、さらにすべてのマイクロサービスへ配布できます。コントロールプレーンとサイドカープロキシを介してこうしたセキュリティポリシーを一元的に処理することで、分散アプリケーション間およびアプリケーション内部で複雑化する接続の増加にも対応しやすくなります。
- 可観測性。サービスメッシュのフレームワークは、各サービスの健全性や動作に関する情報を提供します。コントロールプレーンは、コンポーネント間の相互作用からテレメトリーデータを収集・集約し、レイテンシーやトラフィック、アクセスログ、分散トレーシングなどの情報からサービスの健全性を評価します。
- 信頼性。サイドカープロキシを介して通信を管理することで、特定のポリシー、設定、リクエストの効率性と信頼性が向上します。フォールトインジェクションやロードバランシングも、その具体的な機能に含まれます。
サービスメッシュの課題と欠点
サービスメッシュにも、固有の課題やデメリットがあります。主なものは次のとおりです。
- ランタイムのインスタンス数が増加します。
- 他のシステムとの統合、ルーティング方式、変換マッピング、サービスには対応しません。
- すべてのサービス呼び出しはまずプロキシを経由する必要があり、処理が1段階増えます。
- ネットワーク管理の複雑さは一元化・抽象化されるため、誰かがそれをワークフローに統合する必要があります。
サービスメッシュがなければ、開発者はアプリの各マイクロサービスに、サービス間通信を制御・管理するロジックをコーディングしなければなりません。その結果、開発者はビジネス目標や全体像に集中しにくくなります。また、このサービス間通信を制御するロジックがアプリの各部分に隠れてしまうため、通信障害やエラーの原因特定と修正もはるかに難しくなります。