背景
服务端收到一条请求,要控制这条请求以 10% 的概率让 Worker1 处理,以 90% 的概率让 Worker2 处理,Java 实现。
分析
通过 Java 中的 java.util.Random
随机生成一个 [0, 100) 区间的整数。
0 ~ 99 之间,每个数字出现的概率是 1%,那么这个随机整数落在 [0, 9) 区间的概率是 10%,落在 [10, 100) 之间的概率就为 90%
然后根据随机整数所属的范围,在 [0, 10) 区间时,给结果赋值为 1,在 [10, 100) 区间时,给结果赋值为 2。
最后,当结果为1时,将请求交给 Worker1;结果为 2 时,交给 Worker2
流程如下
实现
private static Random sRandom = new Random();
public static int nextWorker() {
int r = sRandom.nextInt(100);
if (r < 10) {
return 1;
} else {
return 2;
}
}
拓展
若后续新增 Worker3,需要分别以不同的概率将请求交给他们。
可以将 [0, 100) 区间的整数进一步细分,如:
- Worker1 得到请求的概率为10%
- Worker2 为20%
- Worker3 为70%
那么可以将区间划分为 [0, 9), [10, 30), [30, 100),生成的随机数落在这三个区间的概率分别为 10%, 20%, 70%