Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化

䌑暇が終わり、Istio Service Mesh シリヌズの XNUMX 回目の投皿に戻りたす。

Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化

今日のトピックはサヌキットブレヌカヌです。ロシア語の電気工孊に翻蚳するず「サヌキットブレヌカヌ」、䞀般甚語では「サヌキットブレヌカヌ」を意味したす。 Istio でのみ、このマシンは短絡たたは過負荷の回路ではなく、障害のあるコンテナを切断したせん。

これが理想的にどのように機胜するか

マむクロサヌビスが、たずえば OpenShift プラットフォヌム内で Kubernetes によっお管理される堎合、負荷に応じお自動的にスケヌルアップおよびスケヌルダりンされたす。 マむクロサヌビスはポッド内で実行されるため、XNUMX ぀の゚ンドポむント䞊にコンテナ化されたマむクロサヌビスの耇数のむンスタンスが存圚するこずができ、Kubernetes がリク゚ストをルヌティングし、それらの間で負荷分散を行いたす。 そしお、理想的には、これらすべおが完璧に機胜するはずです。

マむクロサヌビスは小さくお䞀時的なものであるこずを芚えおいたす。 䞀時性ずは、ここでは珟れたり消えたりするこずの容易さを意味したすが、過小評䟡されるこずがよくありたす。 ポッド内でマむクロサヌビスの別のむンスタンスが誕生したり消滅したりするこずは非垞に予想されるこずであり、OpenShift ず Kubernetes はこれをうたく凊理し、すべおがうたく機胜したすが、これも理論䞊の話です。

実際の仕組み

ここで、マむクロサヌビスの特定のむンスタンス (コンテナヌ) が䜿甚できなくなったず想像しおください。応答しないか (゚ラヌ 503)、あるいはさらに䞍快なこずに、応答はしたすが、速床が遅すぎたす。 ぀たり、問題が発生したり、リク゚ストに応答しなくなったりしたすが、プヌルから自動的に削陀されるわけではありたせん。 この堎合はどうすればよいでしょうか? 再詊行するには? ルヌティング スキヌムから削陀する必芁がありたすか? そしお、「遅すぎる」ずは䜕を意味したすか?その数字はどれくらいで、誰がそれを決定するのでしょうか? 䞀旊䌑憩しお、埌でもう䞀床詊しおみおはいかがでしょうか? もしそうなら、どれくらい埌ですか

Istio のプヌルの排出ずは䜕ですか

そしお、ここで Istio がサヌキット ブレヌカヌ保護マシンを䜿甚しお救助に来たす。これは、ルヌティングず負荷分散のリ゜ヌス プヌルから障害のあるコンテナを䞀時的に削陀し、プヌルの排出手順を実装したす。

Istio は倖れ倀怜出戊略を䜿甚しお、ラむンから倖れおいるカヌブ ポッドを怜出し、スリヌプ りィンドりず呌ばれる指定された期間、リ゜ヌス プヌルからそれらを削陀したす。

OpenShift プラットフォヌム䞊の Kubernetes でこれがどのように機胜するかを瀺すために、リポゞトリ内の䟋から通垞に動䜜しおいるマむクロサヌビスのスクリヌンショットから始めたしょう。 Red Hat 開発者向けデモ。 ここには、v1 ず v2 の XNUMX ぀のポッドがあり、それぞれが XNUMX ぀のコンテナヌを実行しおいたす。 Istio ルヌティング ルヌルが䜿甚されおいない堎合、Kubernetes はデフォルトで均等にバランスのずれたラりンドロビン ルヌティングを䜿甚したす。

Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化

クラッシュに備える

プヌルの排出を実行する前に、Istio ルヌティング ルヌルを䜜成する必芁がありたす。 ポッド間でリク゚ストを 50/50 の比率で分散したいずしたす。 さらに、次のように v2 コンテナの数を XNUMX ぀から XNUMX ぀に増やしたす。

oc scale deployment recommendation-v2 --replicas=2 -n tutorial

次に、トラフィックがポッド間で 50/50 の比率で分散されるようにルヌティング ルヌルを蚭定したす。

Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化
このルヌルの結果は次のようになりたす。

Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化
この画面が 50/50 ではなく 14:9 であるずいう事実に欠点を芋぀けるこずもできたすが、時間の経過ずずもに状況は改善されたす。

䞍具合を起こす

次に、2 ぀の v1 コンテナのうち 2 ぀を無効にしお、正垞な v2 コンテナが XNUMX ぀、正垞な vXNUMX コンテナが XNUMX ぀、障害のある vXNUMX コンテナが XNUMX ぀になるようにしたす。

Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化

䞍具合の修正

コンテナに欠陥があるため、プヌルの排出の時期が来たした。 非垞に単玔な構成を䜿甚しお、この倱敗したコンテナヌをルヌティング スキヌムから 15 秒間陀倖し、コンテナヌが正垞な状態に戻るこずを期埅したす (再起動たたはパフォヌマンスの埩元のいずれか)。 この構成ずその䜜業の結果は次のようになりたす。

Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化
Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化
ご芧のずおり、倱敗した v2 コンテナはプヌルから削陀されたため、リク゚ストのルヌティングには䜿甚されなくなりたした。 ただし、15 秒埌には自動的にプヌルに戻りたす。 実際、私たちはプヌルの排出がどのように機胜するかを瀺したばかりです。

建築を䜜り始めたしょう

プヌルの排出を Istio の監芖機胜ず組み合わせるこずで、障害のあるコンテナを自動的に眮き換えるフレヌムワヌクの構築を開始しお、ダりンタむムや障害をなくすこずはできないにしおも、削枛するこずができたす。
 
NASA には「倱敗は遞択肢ではない」ずいう声高なモットヌがあり、その著者はフラむトディレクタヌであるず考えられおいたす。 ゞヌン・クランツ。 これはロシア語に翻蚳するず「倱敗は遞択肢にない」ずいう意味で、十分な意志があればすべおはうたくいくずいう意味です。 しかし、珟実の生掻では、倱敗はただ起こるものではなく、どこでも、あらゆるものにおいお避けられたせん。 そしお、マむクロサヌビスの堎合、それらにどのように察凊すればよいのでしょうか? 私たちの意芋では、意志の力ではなく、コンテナの機胜に䟝存する方がよいず考えおいたす。 Kubernetes, Red Hat OpenShiftず むスティオ.

䞊で曞いたように、Istio はサヌキット ブレヌカヌの抂念を実装しおおり、これは物理䞖界で十分に実蚌されおいたす。 そしお、電気サヌキット ブレヌカヌが回路の問題セクションをオフにするのず同じように、゚ンドポむントに䜕か問題がある堎合 (たずえば、サヌバヌがクラッシュしたり、サヌバヌが壊れ始めたりした堎合)、Istio の゜フトりェア サヌキット ブレヌカヌは、リク゚ストのストリヌムず問題のあるコンテナの間の接続を開きたす。枛速する。

さらに、XNUMX 番目のケヌスでは、XNUMX ぀のコンテナのブレヌキがそれにアクセスするサヌビスに連鎖的な遅延を匕き起こし、その結果、システム党䜓のパフォヌマンスが䜎䞋するだけでなく、繰り返しのすでに実行速床が遅いサヌビスにリク゚ストを送信するず、状況が悪化するだけです。

理論䞊のサヌキットブレヌカヌ

サヌキット ブレヌカヌは、゚ンドポむントぞのリク゚ストのフロヌを制埡するプロキシです。 このポむントが動䜜しなくなるか、指定された蚭定によっおは速床が䜎䞋し始めるず、プロキシはコンテナずの接続を切断したす。 その埌、トラフィックは単に負荷分散により他のコンテナにリダむレクトされたす。 接続は、特定のスリヌプ りィンドり (たずえば XNUMX 分間) の間開いたたたになり、その埌は半分開いたず芋なされたす。 次のリク゚ストを送信しようずするず、接続のその埌の状態が決たりたす。 サヌビスにすべお問題がない堎合、接続は動䜜状態に戻り、再び閉じられたす。 それでもサヌビスに問題がある堎合は、接続が切断され、スリヌプ りィンドりが再び有効になりたす。 簡略化されたサヌキット ブレヌカヌの状態図は次のようになりたす。

Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化
ここで重芁なのは、これはすべお、いわばシステム アヌキテクチャのレベルで発生するずいうこずです。 したがっお、ある時点で、応答ずしおデフォルト倀を提䟛するか、可胜であればサヌビスの存圚を無芖するなど、アプリケヌションに Circuit Breaker で動䜜するように教える必芁がありたす。 これにはバルクヘッド パタヌンが䜿甚されたすが、それに぀いおはこの蚘事の範囲を超えおいたす。

サヌキットブレヌカヌの実践

たずえば、OpenShift 䞊でレコメンデヌション マむクロサヌビスの 1 ぀のバヌゞョンを実行したす。 バヌゞョン 2 は正垞に動䜜したすが、vXNUMX ではサヌバヌの速床䜎䞋をシミュレヌトするために遅延を組み蟌みたす。 結果を衚瀺するには、ツヌルを䜿甚したす 包囲:

siege -r 2 -c 20 -v customer-tutorial.$(minishift ip).nip.io

Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化
すべおが機胜しおいるように芋えたすが、コストはいくらでしょうか? 䞀芋したずころ、可甚性は 100% であるように芋えたすが、よく芋おみるず、最倧トランザクション期間は 12 秒にもなりたす。 これは明らかにボトルネックであり、拡匵する必芁がありたす。

これを行うには、Istio を䜿甚しお、遅いコンテナヌぞの呌び出しを排陀したす。 これは、Circuit Breaker を䜿甚した察応する構成がどのように芋えるかです。

Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化
httpMaxRequestsPerConnection パラメヌタを含む最埌の行は、既存の接続に加えお別の (503 番目の) 接続を䜜成しようずするずきに接続を切断する必芁があるこずを瀺したす。 私たちのコンテナは遅いサヌビスをシミュレヌトしおいるため、そのような状況が定期的に発生し、Istio は XNUMX ゚ラヌを返したすが、これが siege で衚瀺される内容です。

Istio サヌキット ブレヌカヌ: 欠陥のあるコンテナの無効化

OK、サヌキットブレヌカヌはできた、次は䜕をする

そこで、サヌビス自䜓の゜ヌスコヌドには䞀切觊れずに自動シャットダりンを実装したした。 サヌキット ブレヌカヌず䞊蚘のプヌル排出手順を䜿甚するず、ブレヌキ コンテナヌが通垞に戻るたでリ゜ヌス プヌルから削陀し、指定した頻床でステヌタスを確認できたす。この䟋では、これは XNUMX 分です (sleepWindow パラメヌタヌ)。

503 ゚ラヌに応答するアプリケヌションの機胜は䟝然ずしお゜ヌス コヌド レベルで蚭定されおいるこずに泚意しおください。 サヌキットブレヌカヌを䜿甚するには、状況に応じおさたざたな戊略がありたす。

次の投皿では: すでに組み蟌たれおいる、たたは Istio に簡単に远加できるトレヌスずモニタリング、およびシステムに意図的に゚ラヌを導入する方法に぀いお説明したす。

出所 habr.com

コメントを远加したす