ボトルネックノードは、交通が到着する前に特定されます
中心性ベトウィネス
グラフ内の各ペアのノード間のショートパスが存在します。中心性ベトウィネスのノードN = Nを通過するショートパスの全体の割合。
高中心性のノードは、他のペアの多くにパスがあります。 もし遅くなるなら、多くのフローが遅くなるでしょう。もし失敗があれば、多くのフローが破損します。
アーキテクチャ読みのための高中心性: 高い中心性を持つノードは、すべてのアーキテクチャレビューで特別な注意を払う必要があります。彼らはボトルネック、SPOF(シングル・ポイント・オブ・フィール)および容量が重要な要素です。一般的に、次の傾向があります:
- DNSプロバイダー(すべてのクライアントとすべてのサービスの間)
- 侵入プロキシ(すべてのクライアントとすべてのバックエンドの間)
- データベースのプライマリ(すべてのバックエンドとすべての読み取りの間)
- 認証サービス(すべてのユーザーとすべての承認されたアクションの間)
測定なしの検出: グラフのトポロジだけで高中心性のノードを特定できます。トラフィックデータは必要ありません。アーキテクチャのダイアグラムが必要です。多くのペアの間でノードが位置している場合、構造的に重要です。
運用の影響: 高中心性のノードは、(1)容量の余裕、(2)冗長性、(3)観測性および(4)インシデント対応プレイブックに特別な投資が必要です。
最小切断は、最小のスライスを切断します
最小切断の定理の簡単な説明
2つのノード間のグラフの最小切断は、最小のエッジ(またはノード)を削除することで切断されます。
Operational reading: 最小カットで最悪の場合の爆発半径を抑えます。'クライアント'と'DB'の間の最小カットが1エッジ(単一のプロキシ)である場合、そのエッジを失うとすべてのクライアントがDBから切断されます。最小カットが5の場合、完全に切断するために同時に5つのコンポーネントを失う必要があります。不運ですが、限定的です。
爆発半径に対する設計: 重要な境界で最小カットを高めます。複数のプロキシ;複数のキャッシュノード;DC間のネットワークパス。各追加で最小カットが1上がります。
グラフのbulkheadパターン: リソースを別のサブグラフに分割し、互いに最小カットを共有しないようにします。1つのサブグラフ内での失敗が他のものに伝播できないのは、エッジが存在しないためです。
直径が失敗伝播距離を設定します
グラフの直径 = 任意の2つのノード間の最短パスの最長です。
失敗伝播: ノードが失敗し、再試行が流れ戻ると、直径距離の距離のアップストリームノードに触れることができます。直径が3のシステム(クライアント -> プロキシ -> バックエンド -> DB)では、DBの失敗が3つのアップストリームレイヤーに再試行の嵐を引き起こします。
意味: 直径が短いほど、失敗の拡大を早く抑えることができますが、ノードの集中が増えるというトレードオフがあります。各設計には、そのトレードオフがあります。
実際のアーキテクチャで最小カットを計算する
アーキテクチャ:1つのDNS、1つのCDN、3つのリバースプロキシ、12のバックエンドリプリカ、1つのDBプライマリ。
グラフ指標を通じた失敗モードの審査
シンセシス
今では、高betweennessを持つノードを特定できます、各境界で最小カットを計算し、直径で失敗伝播距離を推定できます。
すべて3つを適用します。
システム: 50のクライアントエンドポイント -> 1のDNS -> 2のCDN POPs -> 4のリバースプロキシ -> 16のバックエンドレプリカ -> { DBクラスタ(プライマリ1 + 2のスタンバイ)、Redisクラスタ(5ノード)、3つの外部API }。
コンパニオンノート
コンパニオンノート
この幾何学のレッスンは、Betweenness、min-cut、diameterを通じて、Failure Modes & Blast Radiusのメインレッスンを再構成します。
geometry_of_observability_and_capacityは、CDN POPのキャッチメントのVoronoi細胞、latency三角形の光速のフロア、およびプロキシ層での再訪問されたキューイング曲線を扱います。
素晴らしいです。