システムアプローチ2017年に初めてサービスメッシュという言葉を聞いたとき、一体何がそんなにすごいのかと不思議に思ったのを覚えています。クラウドアプリケーションをマイクロサービスのグラフとして構築するのは当たり前のことになり、通信事業者は仮想ネットワーク機能を連鎖させる新たな方法を懸命に開発していました。サービスグラフ、サービスチェーン、サービスメッシュ…複雑なシステムを小さなコンポーネントの集合から構成する方法について、一体いくつの表現が必要なのでしょうか?
馴染みのあるパターンに気づいて初めて、サービスメッシュとはレイヤー7のSDNに過ぎないということを理解しました。SDNが釘を打ち続けるハンマーの役割を果たすと、おそらくそうなるのでしょうが、私はその視点に価値があると信じるようになりました。
下の図は、2つのシナリオの類似点を示しています。どちらのシナリオにも、中央集中型のコントローラーが含まれ、分散された一連のコネクター(片方は物理/仮想スイッチ、もう片方はサイドカーコンテナ)に指示を発行します。これは、上位からのポリシーインテントと下位から報告される監視データの組み合わせに基づいています。主な違いは、左側のSDNコントローラーがL2/3接続を制御し、右側のサービスメッシュがL7接続を制御していることです。
このような比較は、ある時点で破綻することがよくありますが、私にとっては、2つのケースの違いを特定することで、この分野における可能性を理解するのにも役立ちました。つまり、これら2つのケースはスペクトルの両端と見なすことができ、それぞれが「コネクタ」要素のパフォーマンスと表現可能性のどちらを重視するかという設計上の選択において異なる選択を行っていると言えます。
サイドカーは任意のコードを実行できるため、考えられるあらゆるサービス接続ポリシーを実装できます。しかし、サイドカーの最大の欠点は、すべてのトラフィックを中間コンテナにバウンスさせることで、パフォーマンスに重大な影響が生じることです。物理L2/L3スイッチはテラビット/秒単位の転送速度を実現しますが、サポートできる機能は限定的/固定的です(例:粗粒度のACL)。
P4プログラマブル転送パイプラインは、サイドカー機能の一部をスイッチングファブリックにオフロードする機会を提供しますが、両方の長所を兼ね備えた設計ポイントを見つけるのに最適なのは、仮想スイッチとSmartNICです。また、サイドカーの機能は、通常、実際のRPCメッセージを認識できる程度に関連サービスに近い必要があることにも注意してください。そのため、ホスト間の暗号化トラフィックのみを認識するネットワークデバイスは除外される傾向があります。
これらすべてを踏まえて、今注目を集めているトピック、すなわちeBPF(拡張Berkeley Packet Filter)とXDP(eXpress Data Path)を組み合わせてサービスメッシュを最適化するというテーマに至りました。これらを組み合わせることで、OSカーネル(仮想スイッチの一部として)またはSmartNIC上で、汎用的なMatch-Actionルールをプログラムすることが可能になります。
eBPF/XDPがOpenFlow/P4に着想を得たフロールールの代替実装と見なせるのは偶然ではありません。エンドツーエンドの接続性をプログラミング(および制御)するための抽象化としてのMatch-Actionルールには、根本的な何かが存在します。この共通点を認識することで、相違点も理解しやすくなります。eBPF/XDPは(ほぼ)汎用的なコードを可能にしますが、OpenFlowはMatch-Actionの固定セットを定義し、P4はそれを表現するための限定的な言語です。これは、スイッチベースの転送パイプラインのように、アクションが固定サイクルバジェット内で実行されなければならない場合に不可欠です。また、データプレーンの形式検証も可能になります。これは、研究コミュニティが追求している有望な機会です。
SDNとサービスメッシュの関連性に気づいたのは私だけではなかったようです。こちらは2年前のBruceのバージョンですが、VMwareのサービスメッシュ製品は同社の他のSDN製品と明らかに類似点があります。私の経験では、一見異なる実装成果物に共通点を認識し、統一的な抽象化を定義することには大きな価値があります。
抽象化の統一は、より優れたシステムを構築するための基盤となります。集中型ポリシーエンジン(例:SDNコントローラーの役割)の威力を認識することは、そのような抽象化の一つです(これについては、最近のセキュリティに関する投稿でも触れました)。また、転送動作を指定する手段としてのMatch-Actionルールの基本的な性質(例:OpenFlowの役割)も、抽象化の一つです。
Envoyサイドカー、eBPF/XDPカーネルモジュール、そしてP4プログラミングパイプラインは、エンドツーエンドのサービス接続を構築するためのプログラマブルフォワーディングエンジンの実装選択肢として3つ考えられるという認識は、より一層の注目に値する興味深い機会です。成功するプラットフォームは、過去に有用性が実証された抽象化に基づいて構築されます。そして、それがシステムズアプローチの重要な信条です。®