网站设计公司 广州,鄠邑建站 网站建设,企业建设网站流程,erp系统哪个品牌最好随机算法是指#xff1a;从服务器列表中#xff0c;随机选取一台服务器进行访问。由概率论可以得知#xff0c;随着客户端调用服务端的次数增多#xff0c;其实际效果趋近于平均分配请求到服务端的每一台服务器#xff0c;也就是达到轮询的效果。一、算法描述假设有 N 台服…随机算法是指从服务器列表中随机选取一台服务器进行访问。由概率论可以得知随着客户端调用服务端的次数增多其实际效果趋近于平均分配请求到服务端的每一台服务器也就是达到轮询的效果。一、算法描述假设有 N 台服务器 S {S0, S1, S2, …, Sn}算法可以描述为1、通过随机函数生成 0 到 N 之间的任意整理将该数字作为索引从 S 中获取对应的服务器假定我们现在有如下四台服务器服务器地址权重192.168.1.11192.168.1.22192.168.1.33192.168.1.44初始化服务列表后 serverList 如下服务器地址序号192.168.1.11192.168.1.22192.168.1.23192.168.1.34随机算法与服务器权重没有关系每个服务器会被随机访问到。当调用次数足够多时每台服务器被访问的概率近似是相等的随机算法的效果就越趋近于轮询算法。二、java代码实现package com.test.mvp.schedulealgothrim;import com.google.common.collect.SortedMultiset;import com.google.common.collect.TreeMultiset;import org.apache.commons.collections4.CollectionUtils;import java.io.Serializable;import java.util.ArrayList;import java.util.Map;import java.util.Random;import java.util.Set;import java.util.TreeMap;class Server implements Serializable {private static final long serialVersionUID 7246747589293111189L;private String server;private Integer weight;private String description;public Server(String server, String description, Integer weight) {this.server server;this.description description;this.weight weight;}public String getDescription() {return description;}public void setDescription(String description) {this.description description;}public String getServer() {return server;}public void setServer(String server) {this.server server;}public Integer getWeight() {return weight;}public void setWeight(Integer weight) {this.weight weight;}}class ServerManager {public static Map serverMap new TreeMap();static {serverMap.put(192.168.1.1, new Server(192.168.1.1, 第1台server, 1));serverMap.put(192.168.1.2, new Server(192.168.1.2, 第2台server, 2));serverMap.put(192.168.1.3, new Server(192.168.1.3, 第3台server, 3));serverMap.put(192.168.1.4, new Server(192.168.1.4, 第4台server, 4));}}class RandomBalance {private static final Random RANDOM new Random();private static ArrayList middleServerList;public static String getServer() {if (CollectionUtils.isEmpty(middleServerList)) {Set serverSet ServerManager.serverMap.keySet();middleServerList new ArrayList(serverSet);}return middleServerList.get(RANDOM.nextInt(middleServerList.size()));}}public class RandomScheduleTest {public static void main(String[] args) {SortedMultiset serverSet TreeMultiset.create();for (int i 0; i 100; i) {String server RandomBalance.getServer();Server curServer ServerManager.serverMap.get(server);System.out.println(server , curServer.getDescription());serverSet.add(server, 1);}ServerManager.serverMap.forEach((key, value)-{System.out.println(key , count serverSet.count(key));});}}运算结果如下所示192.168.1.4, 第4台server192.168.1.3, 第3台server192.168.1.1, 第1台server192.168.1.1, 第1台server192.168.1.2, 第2台server192.168.1.2, 第2台server192.168.1.3, 第3台server192.168.1.1, 第1台server192.168.1.2, 第2台server192.168.1.4, 第4台server192.168.1.4, 第4台server192.168.1.1, 第1台server192.168.1.4, 第4台server192.168.1.3, 第3台server192.168.1.4, 第4台server192.168.1.4, 第4台server192.168.1.4, 第4台server192.168.1.4, 第4台server192.168.1.3, 第3台server192.168.1.4, 第4台server192.168.1.4, 第4台server192.168.1.4, 第4台server192.168.1.3, 第3台server192.168.1.3, 第3台server192.168.1.3, 第3台server192.168.1.1, 第1台server192.168.1.2, 第2台server192.168.1.2, 第2台server192.168.1.1, 第1台server192.168.1.4, 第4台server192.168.1.2, 第2台server192.168.1.4, 第4台server192.168.1.2, 第2台server192.168.1.1, 第1台server192.168.1.4, 第4台server192.168.1.4, 第4台server192.168.1.1, 第1台server192.168.1.2, 第2台server192.168.1.2, 第2台server192.168.1.3, 第3台server192.168.1.1, 第1台server192.168.1.1, 第1台server192.168.1.1, 第1台server192.168.1.4, 第4台server192.168.1.2, 第2台server192.168.1.4, 第4台server192.168.1.2, 第2台server192.168.1.2, 第2台server192.168.1.1, 第1台server192.168.1.3, 第3台server192.168.1.3, 第3台server192.168.1.3, 第3台server192.168.1.2, 第2台server192.168.1.3, 第3台server192.168.1.4, 第4台server192.168.1.3, 第3台server192.168.1.1, 第1台server192.168.1.1, 第1台server192.168.1.3, 第3台server192.168.1.4, 第4台server192.168.1.3, 第3台server192.168.1.3, 第3台server192.168.1.1, 第1台server192.168.1.3, 第3台server192.168.1.1, 第1台server192.168.1.4, 第4台server192.168.1.1, 第1台server192.168.1.4, 第4台server192.168.1.3, 第3台server192.168.1.1, 第1台server192.168.1.2, 第2台server192.168.1.2, 第2台server192.168.1.4, 第4台server192.168.1.1, 第1台server192.168.1.3, 第3台server192.168.1.3, 第3台server192.168.1.2, 第2台server192.168.1.3, 第3台server192.168.1.4, 第4台server192.168.1.2, 第2台server192.168.1.1, 第1台server192.168.1.3, 第3台server192.168.1.2, 第2台server192.168.1.1, 第1台server192.168.1.3, 第3台server192.168.1.4, 第4台server192.168.1.1, 第1台server192.168.1.1, 第1台server192.168.1.3, 第3台server192.168.1.1, 第1台server192.168.1.4, 第4台server192.168.1.3, 第3台server192.168.1.4, 第4台server192.168.1.2, 第2台server192.168.1.1, 第1台server192.168.1.2, 第2台server192.168.1.4, 第4台server192.168.1.4, 第4台server192.168.1.1, 第1台server192.168.1.3, 第3台server192.168.1.1, count26192.168.1.2, count20192.168.1.3, count26192.168.1.4, count28说明1、首先使用 Random 对象随机生成 [0, serverList.size()) 的整数然后通过索引获取到服务器。2、在多线程的情况下若线程A修改 ServerManager.serverMap 的值则线程B无法即时拿到线程A修改后的值可能会导致请求错误需要调用方进行容错处理。3、从宏观的角度看访问量越大负载越均衡。从微观的角度看局部并不那么均衡。本文地址https://blog.csdn.net/chinawangfei/article/details/109643598如您对本文有疑问或者有任何想说的请点击进行留言回复万千网友为您解惑