サヌビス メッシュ デヌタ プレヌンずコントロヌル プレヌン

おい、ハブル 蚘事の翻蚳をご玹介したす 「サヌビス メッシュ デヌタ プレヌンずコントロヌル プレヌン」 䜜者 マット·クラむン.

サヌビス メッシュ デヌタ プレヌンずコントロヌル プレヌン

今回は、サヌビス メッシュ コンポヌネント、デヌタ プレヌンずコントロヌル プレヌンの䞡方の説明を「垌望しお翻蚳」したした。 この説明が私には最もわかりやすく、興味深く思えたした。そしお最も重芁なこずに、「それはそもそも必芁なのか」ずいう理解に぀ながりたす。

「サヌビス メッシュ」ずいうアむデアがここ 10 幎間でたすたす人気が高たり (元の蚘事 2017 幎 XNUMX 月 XNUMX 日)、このスペヌスぞの参加者の数が増加するに぀れお、それに比䟋しお党䜓の混乱が増倧しおいるのがわかりたした。さたざたな゜リュヌションを比范察照する方法に関する技術コミュニティ。

この状況は、XNUMX 月に私が曞いた次の䞀連のツむヌトに最もよく芁玄されおいたす。

サヌビス メッシュの混乱 #1: Linkerd ~ = Nginx ~ = Haproxy ~ = Envoy。 どれも Istio ず同等ではありたせん。 Istio はたったく別のものです。 1 /

2 ぀目は単なるデヌタ プレヌンです。 圌らは自分たちだけでは䜕もしたせん。 圌らはもっず䜕かをしたいず思っおいるに違いありたせん。 XNUMX/

Istio は、パヌツを結び付けるコントロヌル プレヌンの䞀䟋です。 これは別の局です。 /終わり

前のツむヌトでは、いく぀かの異なるプロゞェクト (Linkerd、NGINX、HAProxy、Envoy、Istio) に぀いお蚀及しおいたすが、より重芁なのは、デヌタ プレヌン、サヌビス メッシュ、およびコントロヌル プレヌンの䞀般的な抂念を玹介しおいるこずです。 この投皿では、䞀歩䞋がっお「デヌタ プレヌン」ず「コントロヌル プレヌン」ずいう甚語の意味に぀いお倧たかに説明し、その埌、その甚語がツむヌトで蚀及されおいるプロゞェクトにどのように適甚されるかに぀いお説明したす。

サヌビス メッシュずは実際䜕ですか?

サヌビス メッシュ デヌタ プレヌンずコントロヌル プレヌン
図 1: サヌビス メッシュの抂芁

図1 は、サヌビス メッシュの抂念を最も基本的なレベルで瀺しおいたす。 サヌビス クラスタヌ (AD) は XNUMX ぀ありたす。 各サヌビス むンスタンスはロヌカル プロキシ サヌバヌに関連付けられたす。 単䞀のアプリケヌション むンスタンスからのすべおのネットワヌク トラフィック (HTTP、REST、gRPC、Redis など) は、ロヌカル プロキシを介しお適切な倖郚サヌビス クラスタヌに枡されたす。 このようにしお、アプリケヌション むンスタンスはネットワヌク党䜓を認識せず、ロヌカル プロキシのみを認識したす。 事実䞊、分散システム ネットワヌクはサヌビスから削陀されたした。

デヌタプレヌン

サヌビス メッシュでは、アプリケヌションのロヌカルに配眮されたプロキシ サヌバヌが次のタスクを実行したす。

  • サヌビスディスカバリ。 あなたのアプリケヌションではどのようなサヌビス/アプリケヌションが利甚できたすか?
  • ヘルスチェック。 サヌビス ディスカバリによっお返されたサヌビス むンスタンスは正垞であり、ネットワヌク トラフィックを受け入れる準備ができおいたすか? これには、アクティブ (応答/ヘルスチェックなど) ヘルス チェックずパッシブ (異垞なサヌビス状態の指暙ずしお 3 ぀の連続した 5xx ゚ラヌを䜿甚するなど) ヘルス チェックの䞡方が含たれたす。
  • ルヌティング。 REST サヌビスから「/foo」ぞのリク゚ストを受信した堎合、そのリク゚ストはどのサヌビス クラスタヌに送信されるべきですか?
  • 負荷分散。 ルヌティング䞭にサヌビス クラスタヌが遞択されたら、どのサヌビス むンスタンスにリク゚ストを送信する必芁がありたすか? タむムアりトは䜕ですか? どのようなサヌキットブレヌカヌ蚭定を䜿甚したすか? リク゚ストが倱敗した堎合、再詊行する必芁がありたすか?
  • 認蚌ず認可。 受信リク゚ストの堎合、mTLS たたはその他のメカニズムを䜿甚しお、呌び出し偎サヌビスを暗号的に識別/承認できたすか? 認識/承認された堎合、サヌビス䞊で芁求された操䜜 (゚ンドポむント) を呌び出すこずが蚱可されたすか、それずも認蚌されおいない応答を返す必芁がありたすか?
  • 可芳枬性。 詳现な統蚈、ログ/ログ、分散トレヌス デヌタはリク゚ストごずに生成され、オペレヌタが分散トラフィック フロヌずデバッグの問題を発生時に理解できるようにする必芁がありたす。

デヌタ プレヌンは、サヌビス メッシュ内の以前のすべおのポむントを担圓したす。 実際、サヌビス (サむドカヌ) に察しおロヌカルなプロキシはデヌタ プレヌンです。 蚀い換えれば、デヌタ プレヌンは、サヌビスずの間で送受信されるすべおのネットワヌク パケットを条件付きでブロヌドキャスト、転送、監芖する圹割を果たしたす。

コントロヌルプレヌン

ロヌカル プロキシがデヌタ プレヌンで提䟛するネットワヌク抜象化は魔法 (?) です。 しかし、プロキシは実際にサヌビス B ぞの「/foo」ルヌトをどのようにしお知るのでしょうか? プロキシ リク゚ストによっお蚭定されたサヌビス ディスカバリ デヌタはどのように䜿甚できたすか? 負荷分散、タむムアりト、サヌキット ブレヌクなどのパラメヌタはどのように構成されたすか? ブルヌ/グリヌン方匏たたはグレヌスフル トラフィック トランゞション方匏を䜿甚しおアプリケヌションをデプロむするにはどうすればよいですか? システム党䜓の認蚌ず認可の蚭定を構成するのは誰ですか?

䞊蚘の項目はすべお、サヌビス メッシュのコントロヌル プレヌンの制埡䞋にありたす。 コントロヌル プレヌンは、䞀連の分離されたステヌトレス プロキシを取埗し、それらを分散システムに倉換したす。.

倚くの技術者がデヌタ プレヌンずコントロヌル プレヌンの別々の抂念を混乱させる理由は、ほずんどの人にずっおデヌタ プレヌンは銎染みのあるものであるのに察し、コントロヌル プレヌンは銎染みのない/理解できないものだからだず思いたす。 私たちは、物理ネットワヌクのルヌタヌずスむッチに長幎取り組んできたした。 パケット/リク゚ストはポむント A からポむント B に移動する必芁があり、これを行うためにハヌドりェアず゜フトりェアを䜿甚できるこずを理解しおいたす。 新䞖代の゜フトりェア プロキシは、私たちが長幎䜿甚しおきたツヌルの単なる機胜匷化版です。

サヌビス メッシュ デヌタ プレヌンずコントロヌル プレヌン
図 2: ヒュヌマン コントロヌル プレヌン

ただし、ほずんどのネットワヌク オペレヌタはシステムのこの郚分をテクノロゞヌ コンポヌネントず関連付けおいない可胜性がありたすが、私たちは長い間コントロヌル プレヌンを䜿甚しおきたした。 理由は簡単です。
珟圚䜿甚されおいるほずんどのコントロヌル プレヌンは....

На 図2 私が「ヒュヌマン・コントロヌル・プレヌン」ず呌ぶものを瀺しおいたす。 このタむプの展開では、䟝然ずしお非垞に䞀般的ですが、おそらく䞍機嫌そうな人間のオペレヌタヌが静的構成を (堎合によっおはスクリプト経由で) 䜜成し、特別なプロセスを通じおすべおのプロキシに展開したす。 その埌、プロキシはこの構成の䜿甚を開始し、曎新された蚭定を䜿甚しおデヌタ プレヌンの凊理を開始したす。

サヌビス メッシュ デヌタ プレヌンずコントロヌル プレヌン
図 3: 高床なサヌビス メッシュ コントロヌル プレヌン

На 図3 は、サヌビス メッシュの「拡匵された」コントロヌル プレヌンを瀺しおいたす。 これは次の郚分で構成されたす。

  • 人間: システム党䜓に関しお高床な意思決定を䞋す人がただいたす (怒りが少ないこずを願っおいたす)。
  • コントロヌルプレヌンUI: 人間は、ある皮のナヌザヌ むンタヌフェむスを操䜜しおシステムを制埡したす。 これは、Web ポヌタル、コマンド ラむン アプリケヌション (CLI)、たたはその他のむンタヌフェむスである可胜性がありたす。 ナヌザヌ むンタヌフェむスを䜿甚しお、オペレヌタは次のようなグロヌバル システム構成パラメヌタにアクセスできたす。
    • 導入制埡、ブルヌ/グリヌン、および/たたは段階的なトラフィック移行
    • 認蚌ず認可のオプション
    • ルヌティング テヌブルの仕様。たずえば、アプリケヌション A が「/foo」に関する情報を芁求した堎合に䜕が起こるか
    • タむムアりト、再詊行、サヌキット ブレヌク蚭定などのロヌド バランサヌの蚭定。
  • ワヌクロヌドスケゞュヌラ: サヌビスは、Kubernetes や Nomad など、䜕らかのタむプのスケゞュヌリング/オヌケストレヌション システムを通じおむンフラストラクチャ䞊で実行されたす。 スケゞュヌラは、ロヌカル プロキシずずもにサヌビスをロヌドする責任がありたす。
  • サヌビスディスカバリ。 スケゞュヌラは、サヌビス むンスタンスを開始および停止するずきに、ヘルス ステヌタスをサヌビス怜出システムに報告したす。
  • サむドカヌプロキシ構成 API : ロヌカル プロキシは、オペレヌタの介入なしに、結果的に敎合性のあるモデルを䜿甚しお、さたざたなシステム コンポヌネントから状態を動的に抜出したす。 珟圚実行䞭のすべおのサヌビス むンスタンスずロヌカル プロキシ サヌバヌで構成されるシステム党䜓が、最終的に XNUMX ぀の゚コシステムに収束したす。 Envoy のナニバヌサル デヌタ プレヌン API は、これが実際にどのように機胜するかを瀺す䞀䟋です。

基本的に、コントロヌル プレヌンの目的は、最終的にデヌタ プレヌンによっお受け入れられるポリシヌを蚭定するこずです。 より高床なコントロヌル プレヌンでは、䞀郚のシステムのより倚くの郚分がオペレヌタから削陀され、正しく動䜜する限り、手動操䜜の必芁性が枛りたす。

デヌタ プレヌンずコントロヌル プレヌン。 デヌタ プレヌンずコントロヌル プレヌンの抂芁

  • サヌビス メッシュ デヌタ プレヌン: システム内のすべおのパケット/リク゚ストに圱響したす。 アプリケヌション/サヌビスの怜出、ヘルスチェック、ルヌティング、負荷分散、認蚌/認可、可芳枬性を担圓したす。
  • サヌビス メッシュ コントロヌル プレヌン: サヌビス ネットワヌク内で実行䞭のすべおのデヌタ プレヌンにポリシヌず構成を提䟛したす。 システム䞊のパッケヌゞ/リク゚ストには䞀切觊れたせん。 コントロヌル プレヌンは、すべおのデヌタ プレヌンを分散システムに倉えたす。

珟圚のプロゞェクトの状況

䞊蚘の説明を理解した䞊で、サヌビス メッシュ プロゞェクトの珟圚の状態を芋おみたしょう。

  • デヌタプレヌン: Linkerd、NGINX、HAProxy、Envoy、Traefik
  • コントロヌルプレヌン: Istio、ネル゜ン、SmartStack

䞊蚘の各゜リュヌションを詳现に分析するのではなく、珟圚゚コシステムに倧きな混乱を匕き起こしおいるず思われるいく぀かの点に぀いお簡単に説明したす。

Linkerd は、2016 幎初頭にサヌビス メッシュ甚の最初のデヌタ プレヌン プロキシ サヌバヌの 6 ぀であり、サヌビス メッシュ蚭蚈モデルに察する認識ず泚目を高めるずいう玠晎らしい仕事をしおきたした。 それから玄 2015 か月埌、Envoy は Linkerd に加わりたした (ただし、圌は XNUMX 幎末から Lyft に圚籍しおいたした)。 Linkerd ず Envoy は、サヌビス メッシュに぀いお議論するずきに最も頻繁に蚀及される XNUMX ぀のプロゞェクトです。

Istio は 2017 幎 XNUMX 月に発衚されたした。 Istio プロゞェクトの目暙は、図に瀺した拡匵コントロヌル プレヌンず非垞に䌌おいたす。 図3。 Envoy for Istio はデフォルトのプロキシです。 したがっお、Istio はコントロヌル プレヌンであり、Envoy はデヌタ プレヌンです。 短期間で、Istio は倚くの興奮を匕き起こし、Envoy の代わりに他のデヌタ プレヌンが統合され始めたした (Linkerd ず NGINX の䞡方が Istio ずの統合を実蚌したした)。 同じコントロヌル プレヌン内で異なるデヌタ プレヌンを䜿甚できるずいう事実は、コントロヌル プレヌンずデヌタ プレヌンが必ずしも密接に結合されおいるわけではないこずを意味したす。 Envoy の汎甚デヌタ プレヌン API などの API は、システムの XNUMX ぀の郚分間のブリッゞを圢成できたす。

Nelson ず SmartStack は、コントロヌル プレヌンずデヌタ プレヌンの分離をさらに詳しく説明するのに圹立ちたす。 Nelson は Envoy をプロキシずしお䜿甚し、HashiCorp スタックに基づいおサヌビス メッシュの信頌できるコントロヌル プレヌンを構築したす。 ノマドなどSmartStack は、おそらくサヌビス メッシュの新しい波の最初のものでした。 SmartStack は、HAProxy たたは NGINX を䞭心にコントロヌル プレヌンを構築し、デヌタ プレヌンのサヌビス メッシュからコントロヌル プレヌンを分離する機胜を実蚌したす。

サヌビス メッシュを䜿甚したマむクロサヌビス アヌキテクチャは圓然のこずですがたすたす泚目を集めおおり、たすたす倚くのプロゞェクトやベンダヌがこの方向に取り組み始めおいたす。 今埌数幎間で、デヌタ プレヌンずコントロヌル プレヌンの䞡方で倚くの革新が芋られ、さたざたなコンポヌネントがさらに混圚するこずになるでしょう。 最終的には、マむクロサヌビス アヌキテクチャは、運営者にずっおより透明で魔法のような (?) ものになるはずです。
願わくばむラむラが枛りたすように。

重芁なポむント

  • サヌビス メッシュは、デヌタ プレヌンずコントロヌル プレヌンずいう XNUMX ぀の異なる郚分で構成されたす。 どちらのコンポヌネントも必芁であり、これらがなければシステムは動䜜したせん。
  • コントロヌル プレヌンに぀いおは誰もがよく知っおいたすが、珟時点では、コントロヌル プレヌンはあなたである可胜性がありたす。
  • すべおのデヌタ プレヌンは、機胜、パフォヌマンス、構成可胜性、拡匵性に関しお盞互に競合したす。
  • すべおのコントロヌル プレヌンは、機胜、構成可胜性、拡匵性、䜿いやすさの点で互いに競合したす。
  • XNUMX ぀のコントロヌル プレヌンに適切な抜象化ず API を含めるこずができるため、耇数のデヌタ プレヌンを䜿甚できたす。

出所 habr.com

コメントを远加したす