ボトルネックノードはTRAFFICが到着する前に特定されます
ビトウィネネス中央性
グラフ内の各ペアのノード間には、最短パスが存在します。ノードNのビトウィネネス中央性は、Nを通るすべての最短パスの割合です。
ビトウィネネス中央性が高いノードは、他のペアの多くが通る場所にあります。もし遅くなったら、多くのフローが遅くなります。失敗した場合は、多くのフローが破損します。
アーキテクチャー読み方:ビトウィネネス中央性が高いノードは、すべてのアーキテクチャーレビューで特別な注意を払う必要があります。彼らはボトルネック、SPOF、そして1つにキャパシティークリティカルなコンポーネントです。彼らは一般的に
- DNSプロバイダー(クライアントとサービス間のすべて)
- イングレスプロキシ(クライアントとバックエンド間のすべて)
- データベースプライマリ(バックエンドとすべての読み取り間)
- 認証サービス(ユーザーと承認されたすべてのアクション間)
測定なくしてグラフトポロジーだけが、ビトウィネネス中央性が高いノードを特定します。TRAFFICデータが必要なく、アーキテクチャーディアグラムが必要です。多くのペアのノードが通る場所にあると、構造的に重要です。
オペレーショナルコンシークィンス:ビトウィネネス中央性が高いノードは、(1) キャパシティーヘッドルーム、(2) レドンダンシー、(3) オブザーバビリティ、および(4) インシデント対応プレイブックへの不均等な投資が必要です。
最小のカットで最小のスライスが切断されます
Min-Cut Theoremの簡単な説明
グラフ内の2つのノード間のmin-cutは、どちらを断絶するために必要な最小のエッジ(またはノード)数です。
運用読み: min-cutが最悪の場合の爆発半径を制限します。'クライアント'と'DB'の間のmin-cutが1エッジ(単一のプロキシ)である場合、エッジを失うとすべてのクライアントがDBから切断されます。min-cutが5の場合、完全に切断するために同時に5つのコンポーネントを失う必要があります;不運ですが、制限されています。
爆発半径に対する設計: 重要な境界でmin-cutを増やす。複数のプロキシ;複数のキャッシュノード;DC間のネットワークパス。各追加でmin-cutが1上がります。
グラフの分水嶺パターン: リソースを別のサブグラフに分割し、互いにmin-cutを持たないようにします。1つのサブグラフ内での失敗は、エッジが存在しないため、他のものに伝播できません。
直径が設定する失敗伝播距離
グラフの直径 = 任意の2つのノード間の最長の最短パス。
失敗伝播: ノードが失敗し、再試行が戻ると、直径距離まで上流のノードに触れることがあります。直径3のシステム(クライアント→プロキシ→バックエンド→DB)では、DBの失敗が3つの上流レイヤーに影響を与える可能性のある再試行の嵐が発生します。
意義: 直径が短いほど失敗の収束が早くなりますが、同時にノードの集中度も高まります。各設計にはトレードオフがあります。
実際のアーキテクチャでMin-Cutを計算する
アーキテクチャ:1つのDNS、1つのCDN、3つのリバースプロキシ、12つのバックエンドリプリカ、1つのDBプライマリ。
グラフメトリックを通じた失敗モードの審査
合成
今では、betweennessの高いノードを特定し、すべての境界でMin-Cutを計算し、直径を通じて失敗伝播距離を推定することができます。
すべて3つを適用します。
システム:50のクライアントエンドポイント -> 1つのDNS -> 2つのCDN POP -> 4つのリバースプロキシ -> 16のバックエンドレプリカ -> {DBクラスター(1つのプライマリ + 2つのスタンバイ)、Redisクラスター(5ノード)、3つの外部API}。
コンパニオンノート
コンパニオンノート
この幾何学的レッスンでは、Failure Modes & Blast Radiusのメインレッスンをグラフメトリック(Betweenness、min-cut、diameter)を通じて再構築しています。
最後のコンパニオン、geometry_of_observability_and_capacityは、CDN POPのキャッチメントのVoronoiセル、光速の床のlatency三角形、およびプロキシ階層でのキューイング曲線を再訪します。
よくできました。