nodejs負荷バランス(二):RPC負荷バランス
概要
このページは確かに長引きました.前節はサービス負荷の均衡の実現について話しましたが、もし遠隔サービスを起動する必要があるなら、どのように保証しますか?これは
アルゴリズム
いくつかの主要な負荷均衡アルゴリズムがどのように実現されるかを紹介します.私が書いたNPMパケットload-balancer-algorithmを見てもいいです.
ポーリング(Round robin) アルゴリズムとは、サービス・キューを順次ポーリングするノードのことで、繰り返し実行するのが簡単です.消費側がバランスを取る を呼び出します.は、現在の下付き+1対のデータプール長の数取モードにより、次のノード下付き を取得する.
短所:は、サービス提供ノードの性能が一致することを要求する.
ウェightted Round Robin
重み付きポーリング(Weightted round robin)アルゴリズムは、ポーリング添加重みに基づいて判断され、性能の低いサービスノードに対してトラフィックを低減することができる. 重みのリアルタイム同期 を動的に調整する.比較均衡アルゴリズム しかし、重大なサービスノードが突然負荷が上昇するため、 である.
Source IP hash (consistent hash)アルゴリズムは、クライアントIP要求をサーバに固定的に割り当てるために、同じは、ノード を比較する. nodejsは主に であることを確認している.
短所:は他のアルゴリズムに対して負荷の等化性が低く、性能も比較的低い である.固定のIPサービスが掛かっています.ユーザ 例えば、図の各ノードが2つの仮想ノードを生成し、要求データに基づいてsh値を生成し、どの値が最も近いかを比較し、どのノードにアクセスするかを決定する.
Random
ランダム(Random) アルゴリズムは、ランダムには衝突率が高いが、呼び出し量が大きいほど平均 ランダムに1つの0~pool.lengthの範囲内の値 Weightted Random
重みランダムアルゴリズムは、マシンの性能が一致しない場合、ランダムベースで重みを加えて計算します.ランダムに1つの0~total Weightted値を計算し、
最小接続(Least connections)アルゴリズムは、接続数が少なくとも少なくてもサービスノードが優先的に起動する.は、統計的接続または要求数 を必要とする.サーバの性能が一致しています.
Weightted Least Connection
重みが少なくとも接続されたアルゴリズムは、少なくとも接続されたサービスノードに基づいて重みを増加させる判定である.
この文章も長い間我慢していました.文章を書き終えたいです. ,しかし、多くのことを発見しました.考えてみますか?それとも別々に書いてください.後に「nodejs負荷バランス(三):RPC実現」を書きます.
詳細はNPMパッケージload-balancer-algorithmを参照してください.
このページは確かに長引きました.前節はサービス負荷の均衡の実現について話しましたが、もし遠隔サービスを起動する必要があるなら、どのように保証しますか?これは
Consumer
を実現します. rpcを端呼出しする負荷の均衡.この文章では主にRPC負荷バランスアルゴリズムの実現について説明します. . アルゴリズム
いくつかの主要な負荷均衡アルゴリズムがどのように実現されるかを紹介します.私が書いたNPMパケットload-balancer-algorithmを見てもいいです.
const LBA = require('load-balancer-algorithm');
const weightRandomPool = [
{ host: "127.0.0.2", weight: 2 },
{ host: "127.0.0.1", weight: 3 },
{ host: "127.0.0.3", weight: 5 },
];
const weightedList = []
const loadBalance = new LBA.WeightedRoundRobin(weightRandomPool);
for(let i = 0; i < 10; i++){
const address = loadBalance.pick();
weightedList.push(loadBalance.getWeight(address.host))
}
// [5, 5, 3, 5, 2, 3, 5, 2, 3, 5]
console.log(weightedList)
Round Robinポーリング(Round robin) アルゴリズムとは、サービス・キューを順次ポーリングするノードのことで、繰り返し実行するのが簡単です.
短所:
ウェightted Round Robin
重み付きポーリング(Weightted round robin)アルゴリズムは、ポーリング添加重みに基づいて判断され、性能の低いサービスノードに対してトラフィックを低減することができる.
が発生する. (smboth Weightted Round Robin)は、平滑分布の取得ノード[
{ host: "127.0.0.1", weight: 2 },
{ host: "127.0.0.2", weight: 3 },
{ host: "127.0.0.3", weight: 5 },
]
// normal
// [5, 5, 5, 5, 5, 3, 3, 3, 2, 2]
// smooth
// [5, 5, 3, 5, 2, 3, 5, 2, 3, 5]
Source IP HashSource IP hash (consistent hash)アルゴリズムは、クライアントIP要求をサーバに固定的に割り当てるために、同じ
session
を取得することを実現する. ,仮想ノードの整合性hashの実現を見ても、現在主流で推奨されています.IP
を介して N個のhash
を生成する. ,その後、hash
を通過する. N個の仮想ノードの値を取得し、要求データ(ipまたはパラメータ)と生成されたhash
最も近いノードsticky sessions
モードで使用されており、アクセスが同じサービス上のsession
短所:
session
なくしますから、いい方法はやはりsession
です. 共有Random
ランダム(Random) アルゴリズムは、ランダムに
pool
を生成する. 長さ数の範囲内の整数をランダムに取得するマシンです.重みランダムアルゴリズムは、マシンの性能が一致しない場合、ランダムベースで重みを加えて計算します.
pool
を順次減算する. のノード重み付けが0より小さい場合、ランダム値が現在の重み範囲内に落ちることを表すlet offset = randomInteger(totalWeight);
for (let i = 0; i < len; i++) {
// ,
offset -= this.getWeight(pool[i]);
if (offset < 0) {
address = pool[i];
break;
}
}
Least Connection最小接続(Least connections)アルゴリズムは、接続数が少なくとも少なくてもサービスノードが優先的に起動する.
Weightted Least Connection
重みが少なくとも接続されたアルゴリズムは、少なくとも接続されたサービスノードに基づいて重みを増加させる判定である.
この文章も長い間我慢していました.文章を書き終えたいです. ,しかし、多くのことを発見しました.考えてみますか?それとも別々に書いてください.後に「nodejs負荷バランス(三):RPC実現」を書きます.
詳細はNPMパッケージload-balancer-algorithmを参照してください.