トラフィックが到着する前に特定されるボトルネックノード
介在中心性
グラフ内のすべてのノードのペアについて、それらを結ぶ最短経路が存在します。ノードNの介在中心性とは、すべての最短経路のうち、Nを通過する経路の割合です。
高い介在中心性を持つノードは、多くの他のノードのペア間の経路上にあります。 それが遅くなると、多くのフローが遅くなります。それが障害を起こすと、多くのフローが切断されます。
アーキテクチャ的な読み解き:高い介在中心性を持つノードは、すべてのアーキテクチャレビューで特に注意を払うべきものです。それらは、ボトルネック、SPOF(単一障害点)、および容量クリティカルなコンポーネントが一つにまとまったものです。それらは通常、以下のようなものです:
- DNSプロバイダ(すべてのクライアントとすべてのサービスの間に位置する)
- イングレスプロキシ(すべてのクライアントとすべてのバックエンドの間に位置する)
- データベースプライマリ(すべてのバックエンドとすべての読み取りの間に位置する)
- 認証サービス(すべてのユーザーとすべての認可されたアクションの間に位置する)
測定なしでの検出: グラフのトポロジーのみで、高ベタネスノードを特定できます。トラフィックデータは不要であり、アーキテクチャ図が必要です。他の多くのノードのペアの間に位置するノードは、構造的に重要である。
運用上の影響: 高ベタネスノードには、(1) 容量の余裕、(2) 冗長性、(3) 観測可能性、および (4) インシデント対応プレイブックへの不均衡な投資が求められる。
最小のカットは最小のスライスを切断する
平易な言葉で説明する最小カットの定理
グラフにおける2つのノード間の最小カット(min-cut)とは、それらを切断するために削除しなければならないエッジ(またはノード)の最小数です。
運用上の読み方: 最小カットは、最悪ケースのブラスト半径(影響範囲)を上限で制約します。'clients'(クライアント)と'database'(データベース)間の最小カットが1エッジ(単一のプロキシ)の場合、そのエッジを失うことでクライアントとデータベースの接続が完全に遮断されます。一方、最小カットが5の場合、完全に切断するには5つのコンポーネントを同時に失う必要があり、これは不運なケースですが、影響範囲は限界があります。
ブラスト半径を考慮した設計: すべての重要な境界において最小カットを増やす必要があります。複数のプロキシ、複数のキャッシュノード、データセンター間の複数のネットワークパスなどです。これらを追加するたびに、最小カットは1増加します。
グラフの用語で表したバルクヘッドパターン: リソースを、互いに最小カットを共有しない独立したサブグラフに分割します。エッジが存在しないため、あるサブグラフ内の障害は他のサブグラフに伝播しません。
直径は障害伝播の距離を設定する
グラフの直径とは、任意の2つのノード間の最短路の長さの最大値です。
障害の伝播: ノードが障害を起こし、リトライが逆流すると、直径の距離だけ上流のノードに影響が及びます。直径が3のシステム(クライアント -> プロキシ -> バックエンド -> DB)では、DBの障害によりリトライストームが発生し、3層上流のレイヤーが影響を受けます。
示唆: 直径が短いほど障害の封じ込めは速くなりますが、ノードの集中度も高まります。各設計にはトレードオフがあります。
実際のアーキテクチャにおける最小カットの計算
アーキテクチャ構成: DNS 1台、CDN 1台、リバースプロキシ 3台、バックエンドレプリカ 12台、DBプライマリ 1台。
グラフ指標による障害モード監査
統合
これにより、高ビネスノードを特定し、すべての境界で最小カットを計算し、直径を介して障害伝播距離を推定できるようになりました。
これら3つをすべて適用してください。
システム構成:50の顧客エンドポイント -> 1つのDNS -> 2つのCDN POP -> 4つのリバースプロキシ -> 16のバックエンドレプリカ -> { DBクラスタ(プライマリ1 + スタンバイ2)、Redisクラスタ(5ノード)、外部API 3つ }。
補足ノート
補足ノート
この幾何学的なレッスンは、障害モードと影響範囲のメインレッスンをグラフ指標(介在性、最小カット、直径)を通じて再構成しています。
最後の補足ノート geometry_of_observability_and_capacity では、CDN PoPのカッチメントに対するボロノイセル、レイテンシの三角形における光速の下限、およびプロキシ層で再検討されるキューイング曲線について扱います。
よくできました。