概要
スーパー ロード バランシングは、サービスの継続的な拡張、マシン数の増加、マシンのパフォーマンスの違いなどの問題を解決して、システムの安定性を高め、リクエストの圧力を自動的に分散するように設計されています。このアルゴリズムは複数のモデルとバランス戦略を実装しており、構成を通じてランダム化、ポーリング、一貫したハッシュなどを実装できます。同時に、コンピュータ室全体への関連配布も実現できます。すでに複数のシステムで使用されています。
タグ
ロードバランシング
コンテンツ
既存システムに存在する問題:
1. 接続が遅く、瞬間的なアクセスが遅い。
シーン 1:
バックエンドに新しいマシンを追加した場合、キャッシュヒット率が低いため応答速度は遅くなりますが、タイムアウトすることなく接続できます。 ui へのアクセスが継続すると、ui はブロックされます。
シーン 2:
バックエンド モジュール内の特定のマシンの応答が遅い場合。フロントエンドがアクセスを続けると、ブロックされます。
2. クラッシュ。
シーン 1:
断続的にリクエストに応答できますが、速度が非常に遅いです。 ui を踏み固めます。
3. ハイブリッド展開。
シーン 1:
複数のモジュールが同じマシン上にある場合、プロジェクトは影響を受けます。
4. マシンの重量。
シーン 1:
古いマシンのパフォーマンスは低いですが、新しいマシンは強力なパフォーマンスを持っています。したがって、それらには異なる圧力がかかるはずです。
5. マシン間の冗長性。
シーン 1:
バックエンドはキャッシュ モジュールに大きく依存しており、一貫したハッシュ アルゴリズムを使用しているため、1 台のマシンに障害が発生すると、他のマシンのキャッシュ ヒット率に大きな影響を与えます。したがって、このマシンに対するリクエストを別のコンピュータ室に分散したいと考えています。
6. php と c は同じ戦略を使用します。
PHP と C が使用しようとしている戦略は、実際には非常に似ています。開発の重複を避けるために、PHP と C は同じ負荷分散ライブラリを使用することを望んでいます。
解決すべき問題:
デザインのアイデア:
1. バランス戦略によって計算された均衡値に従って、サーバーを逆順にソートします。
2. 選択内容を読み込みます。手順 1 でソートしたサーバーを次の順序で選択します:
a. 接続失敗の確率に応じて選択します。
注: 横軸は失敗の数を表し、縦軸は選択の確率を表します。
Cconn: 範囲内の失敗の数
f(Cconn): 接続確率、値の範囲は (0, 100]
b. 健康状態に応じて選択します。
モデル全体はサービス処理時間の収束に基づいています。
分析:
1) マシンの状態が良好であれば、平均処理時間は安定したレベルに保たれ、小さな変動であってもすぐに安定します。
2) マシンに問題が発生し始めると、処理時間が増加し始めます。増加が一定期間を超えて続く場合は、サービスに影響を与える可能性があることを意味し、一定期間後に安定する場合は、リクエストにあまり影響を与えないことを意味します。
f(healthy): マシンの健全性ステータス、値の範囲 [0,1]
select(healthy): マシン選択確率、値の範囲 [R,1]
c. すべてのマシンが選択されていない場合は、サービス対象のマシンがランダムに選択されます。
3. マシンのトラフィックは均等に分散されます。
マシンが異なれば、処理能力も異なります。ステップ 2 に従ってマシンを選択すると、処理時間が 1/T (T>=2) である他のマシンも選択する必要があり、圧力の一部が対応するマシンに割り当てられます。
k 台のマシンの処理時間を t1, t2,...,tk、選択したマシン id=i とし、このマシンより処理能力の高いマシンの時間を p1, p2,...,pr, とする。 (ここで、pj × T
アルゴリズム設計:
A. 平衡アルゴリズム
1. 一貫したハッシュ アルゴリズム。
各サーバーの IP とポートに加えて、balance_key を文字列として連結し、MD5 署名を作成します。
値(サーバー) = md5(サーバーIP + サーバーポート + バランスキー)
2. ランダムアルゴリズム。
値(サーバー) = ランダム();
3. ポーリングアルゴリズム。
値(サーバー) =((server.id – (%サーバーカウントを四捨五入)) + サーバーカウント) % サーバーカウント
4. 多肢選択アルゴリズム。
ランクは 1 に初期化されます。デフォルトのサーバーに障害が発生した場合は、ランク +1
値(サーバー) =((サーバーID – (ランク % サーバーカウント)) + サーバーカウント) % サーバーカウント
B. ロードアルゴリズム
1. 接続状態アルゴリズム。
a. 各サーバーのステータス キューを開きます。 bool queue[K] は失敗の数をカウントするために使用されます。チームに悪い状態が入るたびに、カウントは 1 ずつ増加します。不良状態がキューから取り出される場合、カウントは 1 つ減ります。
b. f(Cconn) の式に従って選択確率を計算します。
c. rand()%100 を使用して、マシンを選択するかどうかを決定します。
2. 健康状態アルゴリズム。
a. 各マシンは 1 秒以内の処理時間 T と時間 C を維持します。
b. 1 秒経過したら、T と C を平均処理時間 R として計算します。
c. M 秒ごとに、最近の各マシンの平均処理時間をカウントし、式 select (健全) に従って選択確率を計算します。
d. rand()%100 を使用して、[0, select(healthy)*100] でマシンを選択するかどうかを決定します。
C. トラフィックの平準化
ポリシーに従って要件を満たすマシンを選択し、トラフィック均等化式に従ってトラフィックを割り当てます。
割り当てるときは、balance_key+server メソッドとrandom()に従ってマシンを割り当て、リクエストが同じマシンに配置されるようにしてください。