BalanceUtil 权重负载均衡工具类
需求: 现在有三个AB测试分组,比例各为 5 3 2,需要按照权重过滤得到要走的测试分组
实现
工具类 BalanceUtil
public class BalanceUtil { int sum = 0; int[] w; int[] pre; public BalanceUtil(int[] w) { this.w = w; pre = new int[w.length + 1]; for (int i = 1; i <= w.length; i++) { sum += w[i - 1]; pre[i] = pre[i - 1] + w[i - 1]; } for (int i = 0; i < pre.length; i++) { pre[i]++; } // 1 3 4 6 // 0 1 4 8 14 // 1 2 5 9 15 //pre[i]+1表示 beigin = i+1, end) = pre[i+1]; } public int pickIndex() { //[1,sum] int v = (int) (Math.random() * sum) + 1; return search(v); } public int pickIndex(int v) { return search(v); } private int search(int v) { int l = 0; int r = pre.length - 1; while (l < r) { int mid = (l + r + 1) / 2; if (pre[mid] == v) { return mid; } else if (pre[mid] > v) { r = mid - 1; } else { l = mid; } } return l; } public static void main(String[] args) { int[] arr = new int[]{ 5,3, 2}; BalanceUtil balanceUtil = new BalanceUtil(arr); //获取索引 int index = balanceUtil.pickIndex(); } }
下一篇:
装饰者模式与动态代理的区别