ランダム、ロビン、少なくともアクティブ、一貫性のあるハッシュ:ダボの4つの負荷分散戦略を提供します
A、RandomLoadBalance--ランダム
保護された <T>の発動<T>のdoSelect(一覧<実行者<T >> インボーカは、URLのURL、呼び出し呼び出し){ // 呼び出し側の数 int型の長さ= invokers.size(); // すべての呼び出しは同じ重みを持っていますか? ブール sameWeight = 真; // すべての呼び出し側の重量が 値int []重み= 新しい INT [長さ]。 // 最初の呼び出しの体重 INT firstWeight = getWeight(invokers.get(0 )、呼び出し)。 重み[ 0] = firstWeight。 // 重みの合計 int型全重量= firstWeight。 以下のために(INT ; I <長さ、Iは1 = I ++ ){ int型の重量= getWeight(invokers.get(I)、呼び出し)。 // 後で使用するために保存 重み[I] = 重量; // 合計 全重量+ = 重量; もし(!sameWeight &&重量= firstWeight){ sameWeight = 偽; } } // 有权重、按权重随机 場合(全重量> 0 &&!sameWeight){ // 0 -全重量(含まれていない)乱数 intはオフセット= ThreadLocalRandom.current()nextInt(全重量);. //は乱数アンの呼び出しに対応する配列を返し ために(INT I = 0; I <長; I ++ ){ オフセット - = 重み[I]; IF(オフセット<0 ){ 戻りinvokers.get(I); } } } // すべてのノードは呼出しからランダムアレイ返し、0又は等しく重み付けされる リターンインボーカを。 GET(ThreadLocalRandom.current()nextInt(長さ)); }
要約:ランダムロードバランシング:各ノードの重みに応じて、ランダム(ThreadLocalRandomスレッドセーフを使用して)は、2つの特定のケースに分けられます。
1、同量の各ノードは、ランダムな呼び出しを返します。
図2に示すように、同じ重量、乱数、乱数及び間隔戻る対応する呼び出しに応じて生成された総重量はありません。
特徴:要求が増加したときの要求の少量が発生することは、よりバランスのとれた、傾斜しています。
二、RoundRobinLoadBalance--投票