現代のソリューションは、大量のデータを即時に送信できるほど進化しており、これが組織の中核をなす理由となっている。アプリは、社内外の連携やコミュニケーションを支援する。
アプリ間の通信を担う通信アーキテクチャは、三つの要素から構成される。そのひとつがデータ(転送)プレーンであり、今回はこの要素に焦点を当てる。
データ転送を行う全システムの一部であるデータプレーンは、受信またはユーザー発信のトラフィックを扱い、どの処理を実行するかを決定する。コントロール&マネジメントプレーンと共に、各種コミュニケーションアプリが採用する通信アーキテクチャを構成している。
ルーティングにおいては、接続が有効な状態の間、クライアント間のデータ転送を担う。HTTPなどのプロトコルを利用して遠隔の通信を管理し、関連するトラフィックはルータを通過する。
簡単に言えば、データプレーンはルータがデータパケットの行き先を確認するための表と考えることができる。
通常、その表にはデータパケットの経路情報が記されるが、破棄命令が含まれることもある。ルータがそのような表に遭遇すると、『到達不能』のエラーコードを返す。
実装
従来のネットワーキング方式を採用するアプリでは、データプレーンの実装はファームウェア上に行われ、コントロール&マネジメントプレーンはソフトウェアコンポーネント内に存在する。しかし、SDNネットワーキングモデルを採用するアプリでは異なる実装がなされる。
簡単に言えば、データプレーンはデータトラフィックを運ぶ役割を果たす。例えば、ユーザーがFacebookのアプリにアクセスを要求した場合、データプレーンがその通信を目的地まで運ぶ。
データプレーンはトラフィックのデータパケットを受け取り、ルータを通じて転送する。ルーティングの判断はコントロールパネルで実施され、データプレーンがトラフィックをルータへ渡す際に適用される。
一般的な役割は次の通りである:
これらの機能で収集された情報は、以下のような処理に利用される:
プロセス
データプレーンは、コントロールプレーンに存在するルーティングロジックの助けを借り、転送およびルーティングテーブルの情報を取り出す。得られた情報をもとに、データパケットの送信先と送信方法を決定する。例えば、通信を完結させるためにネットワークインターフェースへ転送する場合がある。
関連しているか? はい.
データプレーンは、コントロールプレーンのルーティング決定に従って動作する。両者は、アプリに通信機能を組み込む上で欠かせない存在である。
しかし、同じものか? いいえ.
両者には大きな違いがある。以下に、コントロールプレーンとデータプレーンの主要な違いを示す。
データプレーンについての理解は既にあるとする。ここでは、データパケットの経路を決定するすべての処理を含むコントロールプレーンについて解説する。これは、ネットワークトポロジーの骨組みを構築するルータアーキテクチャの一部に関わる。
その役割は、ルーティングプロトコルへの積極的な参加や、ルーティングテーブル、ルーティングルール、転送原則、ネットワークトポロジーなど、効果的なデータプレーン機能に必要な要素を設計することにある。
また、このロジックは、性能が低いあるいは不要なデータパケットを検出し、その処理の終了時期を決定することができる。ルータの実装シナリオにより、コントロールプレーンが参照する転送情報基盤は異なるが、データプレーンは常にその情報に基づいて行動を計画する。
コントロールプレーンは、データプレーンの設定や停止を管理するソフトウェア部分である。まるで、料理の手順書が必要なスパイスや調理時間を指示するように、標準化された方法で機能する。
また、コントロールプレーンを『頭脳』、データプレーンを『身体』と例えることができる。頭脳が状況に応じて行動を決め、身体に指示を出すように、コントロールプレーンがルータの処理を決定し、データプレーンがそれを実行する。
コントロールプレーンは意思決定を行い、データプレーンはその実行役として機能する。コントロールプレーンがルーティングを担い、データプレーンはスイッチングを担当する。
ルータはこれら二つのプレーンに対して異なる動作を行う。例えば、コントロールプレーン向けのパケットを生成する一方、データプレーン向けのパケットは生成せず、単に通過を許可する。
データプレーンは、コントロールプレーンで収集された情報を用いて、指示通りにデータパケットの運搬および転送を行う。
長年にわたり、開発者やIT専門家はこれら二つの概念を明確に分離しようとしてきた。Unixはその好例であり、基本操作の『開く』『閉じる』はコントロールプレーン向け、データの読み書きはデータプレーン向けに行われる。
データプレーンは、高速な処理とシンプルな運用を実現するために最適化されている。
一方、コントロールプレーンは設定の容易さと複雑な状況への継続的な対応を目指しており、その結果、データプレーンの処理が迅速に行われるとともに、効果的なポリシー対応が可能となる。
コントロールプレーンは完全に独立しており、外部の影響を受けず動作する。これに対し、データプレーンは主にコントロールプレーンに依存し、自ら判断してデータパケットの送信方法を決定することはなく、コントロールプレーンの指示に従う。
両者は処理に用いる技術スタックが異なる。例えば、コントロールプレーンはSTP(スパニングツリープロトコル)、RIP(ルーティング情報プロトコル)、ARP(アドレス解決プロトコル)に依存し、データプレーンはIPヘッダーのチェックサムやTTLを扱う。
Kubernetesでは、コントロールプレーンは標準化されたクラスタ判断を行うコンポーネント群であり、データプレーンはワーカーノードの集合である。これには対応するコンテナやpodも含まれる。
Service Meshでは、コントロールプレーンがポリシーの適用と設定を担い、データプレーンはその設定情報を伝達するサイドカープロキシで構成される。
お急ぎですか? 表をご覧ください。
コントロールプレーン | データプレーン | |
---|---|---|
基本的な定義 | データパケットが進む経路を決定するためのあらゆる処理、タスク、ワークフローの総体である。 | 送信元から受信先へデータパケットを運ぶためのワークフロー、プロセス、処理の総体である。 |
担当する役割 | 主にデータプレーン用のIPルーティングテーブルの維持管理や、データパケット転送方法の決定を担う。 | データプレーンの主な役割は、IPパケットを転送し、正しい受信先に届けることである。 |
実装 | アプリのアーキテクチャに応じ、ファームウェアまたはソフトウェアで実装される。 | データプレーンは常にファームウェア上で実装される。 |
ルータの役割 | コントロールプレーン向けのデータパケットを生成する。 | データプレーンのパケットが通過するのを許可する。 |
状態 | 完全に独立 | コントロールプレーンのロジックとデータに完全に依存 |
計算処理での役割 | データプレーンの設定や停止を決める。 | 計算処理において、データ要求を処理する。 |
ネットワークでの役割 | ネットワークトポロジーの構築を担う。 | 受信トラフィックの処理を決定し、コントロールプレーンのロジックに基づいて転送先や宛先を判断する。 |
含まれるプロセス | STP、ARP、DHCP、RIP | IPヘッダーのチェックサムとTTL |
働き方 | 頭脳のような意思決定者 | 身体のような実行者 |
実行する動作 | ルーティング | スイッチング |
クラウドネイティブアプリ向けには、Kubernetesが非常に好まれる選択肢のひとつである。KubernetesのAPIは開発者向けに増え続け、その効果的な管理が求められている。
クラウドネイティブアプリの管理においては、データプレーン、コントロールプレーン、マネジメントプレーンの存在が、アプリの将来を左右する。
Kubernetesのデータプレーンは、従来のものと異なり、単にデータパケットの行き先を決めるだけでなく、アプリの円滑な動作に必要なすべての要素を管理する。
例えば、レイテンシ、ユーザーエクスペリエンス、SLA、ポリシー、顧客行動のトリガーといった主要なパフォーマンス指標を含む。データプレーンの応答性が高いほど、アプリの動作はより良好になる。
Kubernetesにおけるデータプレーンは、構成面で従来のデータプレーンと異なる。一般的なデータプレーンがデータパケットで構成されるのに対し、Kubernetesではワーカーノードが主体となる。なお、ワーカーノードは単独では存在せず、ワーカ―コンテナ、pod、kubeletも含まれる。
ここでは、コンテナとpodがkubeletエージェントを用いてデータを送信する。kubeletエージェントは状態や条件をデータベースと共有し、コンテナエンジニアがその管理を担う。
各モードのpod管理には異なる仕様があり、コンテナエンジニアごとに制約が異なる。Kubernetesが設計された主な目的はオンプレミスアプリの管理であったため、podスケーリングが基本機能として提供された。しかし、クラウドネイティブへの採用が進む中で、自動podスケーリングは実現していなかった。
この問題を解決するため、Kubernetesは適合するクラスタ登録済みノードにpodを配置するようになった。この手法は、ノードの健全性を保証し、podの実行が可能になることを期待されたが、同時にクラスタ全体の非効率性を招いた。
Kubernetesのデータプレーンは、ワークロード、スケールされたpod、インフラコンポーネントで構成され、ほとんどの計算処理を担当する。無駄の削減を図るなら、Kubernetesを利用する組織はデータプレーンに注目すべきである。
kubeletはすべてのモードに含まれ、コントロールプレーンまたはAPIサーバからの設定指示を受け入れる。従来のKubernetesクラスタではデータプレーンにetcdが使用されるが、現代のクラスタではMariaDB、MySQL、SQLiteに置き換えられている。
コントロールプレーンとデータプレーンの配置パターンは予測しにくく、一部のクラスタでは同一場所に配置され、また別のクラスタでは異なる場所に実装される。
クラスタが高度なフォールトトレランスを必要とする場合、最低2台のコントロールプレーンノードと3台のデータプレーンノードが必須である。
しかし、使用するコントロールプレーンノードの数に応じ、データプレーンノードは5台または7台となることもある.
クラウドネイティブアプリへの移行が進む中、パフォーマンス向上、迅速な伝送、エンドツーエンドの管理が最重要課題となっている。通信アーキテクチャの要素であるデータプレーンは、データパケット伝送において重要な役割を果たす。本記事で多くの点を学んだ。振り返ってみよう。
これらの内容を通して、データプレーンの概要、その重要性、そしてコントロールプレーンとの違いについて理解が深まったことと思う。データプレーンを正しく把握できれば、残る二つのプレーンで、通信機能に優れたモダンなアプリの開発も円滑に進むだろう。
最新情報を購読