リアルタイムでランダム関数を用いて指定比を選択する方法
イントロ
実時間での負荷均衡選択アルゴリズムの効率的方法
これの最良の方法は、それは常に前の比を計算し、選択された部分をピックアップし、新しい要求を割り当てられるようにすることです.
しかし、それは簡単ではなく、複雑になりそうです.
ここでは、非常にシンプルで信頼できる方法があります.
飛び込みましょう.
論理的考察
連続流
コードレビュー
package org.chaostocosmos.dev.io;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
public class RandomRatioIndexSelection {
List<Integer> ratioList;
public RandomRatioIndexSelection(String ratioExpr) {
this(Arrays.asList(ratioExpr.split(":")).stream().map(e -> Integer.parseInt(e)).collect(Collectors.toList()));
}
public RandomRatioIndexSelection(List<Integer> ratioList) {
this.ratioList = ratioList;
}
public int getSelectIndex() {
Random random = new Random();
int sum = ratioList.stream().reduce((a, b) -> Integer.sum(a, b)).get().intValue();
int start = 0;
int bound = 0;
int ran = random.nextInt(sum);
for (int i = 0; i < ratioList.size(); i++) {
int ratio = ratioList.get(i);
bound += ratio;
if (ran >= start && ran < bound) {
return i;
}
start += ratio;
}
return -1;
}
public static void main(String[] args) {
RandomRatioIndexSelection rris = new RandomRatioIndexSelection("10:30:40:20");
List<Integer> ratioList = new ArrayList<Integer>();
for(int i=0; i<10000; i++) {
int index = rris.getSelectIndex();
ratioList.add(index);
}
long r0 = ratioList.stream().filter(i -> i == 0).count();
long r1 = ratioList.stream().filter(i -> i == 1).count();
long r2 = ratioList.stream().filter(i -> i == 2).count();
long r3 = ratioList.stream().filter(i -> i == 3).count();
System.out.println("Toal count: "+r0+" "+r1+" "+r2+" "+r3);
}
}
テストダイビング
コードを実行すると、結果は次のようになります.
それは、インデックスの数は、比率の各部分として選択されるものを示しています.でも変なところがあります.インデックスカウントは、比率と正確に一致しません.
それはランダムな機能に基づいているため、それは静的な計算ではないが、それはまた、継続的に処理するためにカウントするリアルタイムです.したがって、ある比率は指定された比率と若干の違いを持つかもしれません.
結論
私たちはランダム選択されたインデックスを与えられた比率を実装する方法について話しました.私は、これがサービスがロードバランシングを必要とすると貢献することができたと思います、そのために、カスタマイズされなければならないかもしれません.
常に弾力的な思考はあなたです!
ありがとう.
Reference
この問題について(リアルタイムでランダム関数を用いて指定比を選択する方法), 我々は、より多くの情報をここで見つけました https://dev.to/kooin/how-to-implement-to-select-specified-ratio-using-random-function-in-real-time-2cmeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol