日交易,根据权重分配流量的算法,根据权重和交易笔数

日交易,根据权重分配流量的算法,根据权重和交易笔数 【日交易,根据权重分配流量的算法,根据权重和交易笔数】交易系统,接入多个通道。确保每个通道按权重每日达到相应的交易笔数。
通过实时交易笔数/权重。然后进行升序排序,得到选择通道的次序,进行选择通道。

//a=当前交易笔数/权重。权重越大,如果交易笔数相等,a越小。权重不变,交易笔数变。a的值大小也在变。 //相对公平的流量分配。 public static void main(String[] args) { //定义三个通道的权重,按随机数选拔使用哪个通道。 //模拟三个通道的权重A 10B 70C 30 //模拟当前交易笔数 A:10B:50 C:20 //从数据库查询出list集合 ChannelD A=new ChannelD("A",10,10); ChannelD B=new ChannelD("B",70,50); ChannelD C=new ChannelD("C",30,20); List channels=new ArrayList(); channels.add(A); channels.add(B); channels.add(C); Map map=new HashMap(); Double trade=0.0; //遍历list集合,将交易笔数/权重的值作为key,通道对象为value 存储到map中 for (ChannelD channel : channels) { trade=(double) (channel.getCount()/channel.getWeight()); map.put(trade,channel.getName()); }//将交易笔数/权重的值转化成数据,进行排序。 Set set=map.keySet(); Double[] d=set.toArray(new Double[set.size()]); //将数据中的值由小到大进行排序 boolean flag=true; for(int i=0; id[j+1]){ double temp=d[j]; d[j]=d[j+1]; d[j+1]=temp; flag=false; } } if(flag){ break; } }//将排好序的通道名字由小到大的顺序,加入到链表集合中 LinkedList chan=new LinkedList(); for(int i=0; i

    推荐阅读