做学校的网站推广发展前景,企业网站建设主要考虑哪些,设计欣赏心得体会,网站首页快照应该怎么负载均衡算法实现
负载均衡介绍
负责均衡主要有以下五种方法实现: 1、轮询法
将请求按顺序轮流地分配到后端服务器上#xff0c;它均衡地对待后端的每一台服务器#xff0c;而不关心服务器实际的连接数和当前的系统负载#xff1b;
2、随机法
通过系统的随机算法#…负载均衡算法实现
负载均衡介绍
负责均衡主要有以下五种方法实现: 1、轮询法
将请求按顺序轮流地分配到后端服务器上它均衡地对待后端的每一台服务器而不关心服务器实际的连接数和当前的系统负载
2、随机法
通过系统的随机算法根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知随着客户端调用服务端的次数增多 其实际效果越来越接近于平均分配调用量到后端的每一台服务器也就是轮询的结果
3、源地址哈希法
源地址哈希的思想是根据获取客户端的IP地址通过哈希函数计算得到的一个数值用该数值对服务器列表的大小进行取模运算得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡同一IP地址的客户端当后端服务器列表不变时它每次都会映射到同一台后端服务器进行访问
4、加权轮询法
不同的后端服务器可能机器的配置和当前系统的负载并不相同因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重让其处理更多的请而配置低、负载高的机器给其分配较低的权重降低其系统负载加权轮询能很好地处理这一问题并将请求顺序且按照权重分配到后端
5、加权随机法
与加权轮询法一样加权随机法也根据后端机器的配置系统的负载分配不同的权重。不同的是它是按照权重随机请求后端服务器而非顺序
代码实现
1.轮询方式
/*** 1.负载均衡算法的轮询方式*/
public class poll {static HashMapString, Integer ipMap new HashMap();static {ipMap.put(192.168.110.10,1);ipMap.put(192.168.110.11,1);ipMap.put(192.168.110.12,1);ipMap.put(192.168.110.13,1);}Integer pos 0;public String RoundRobin(){//1.将map中数据取出放到conCurrentmap中,conCurrentmap能够避免多线程时,数据出错ConcurrentHashMapString, Integer cMap new ConcurrentHashMap();cMap.putAll(ipMap);//2.取出Key,放到set中,可以去重SetString ipset cMap.keySet();//3.set放到list中ListString iplist new ArrayList();iplist.addAll(ipset);String serverName null;synchronized (pos){if (pos iplist.size()){pos 0;}serverName iplist.get(pos);pos;}return serverName;}public static void main(String[] args) {poll poll new poll();for (int i 0; i 10; i) {String name poll.RoundRobin();System.out.println(name);}}
}2.加权轮询法
public class WeightPoll {static HashMapString, Integer ipMap new java.util.HashMap();static {ipMap.put(192.168.110.10,1);ipMap.put(192.168.110.11,2);ipMap.put(192.168.110.12,3);ipMap.put(192.168.110.13,4);}Integer pos 0;public String WeightRobin(){ConcurrentHashMapString, Integer ipServerMap new ConcurrentHashMap();ipServerMap.putAll(ipMap);SetString ipSet ipServerMap.keySet();IteratorString iterator ipSet.iterator();//定义一个list放所有serverListString iplist new ArrayList();//循环放入iplist中while (iterator.hasNext()){String name iterator.next();Integer num ipServerMap.get(name);for (Integer i 0; i num; i) {iplist.add(name);}}String serverName null;if (pos iplist.size()){pos 0;}serverName iplist.get(pos);pos;return serverName;}public static void main(String[] args) {WeightPoll weightPoll new WeightPoll();for (int i 0; i 11; i) {System.out.println(weightPoll.WeightRobin());}}}3.随机法
public class RandomAlgrithm {static HashMapString, Integer ipMap new java.util.HashMap();static {ipMap.put(192.168.110.10,1);ipMap.put(192.168.110.11,2);ipMap.put(192.168.110.12,3);ipMap.put(192.168.110.13,4);}public String Random(){ConcurrentHashMapString, Integer ipConMap new ConcurrentHashMap();ipConMap.putAll(ipMap);SetString ipSet ipConMap.keySet();ListString ipList new ArrayList();ipList.addAll(ipSet);int num new Random().nextInt(ipList.size());String serverName ipList.get(num);return serverName;}public static void main(String[] args) {RandomAlgrithm randomAlgrithm new RandomAlgrithm();for (int i 0; i 10; i) {System.out.println(randomAlgrithm.Random());}}
}4.加权随机
public class WeightRandom {static HashMapString, Integer ipMap new java.util.HashMap();static {ipMap.put(192.168.110.10,1);ipMap.put(192.168.110.11,2);ipMap.put(192.168.110.12,3);ipMap.put(192.168.110.13,4);}public String WeightRandom(){ConcurrentHashMapString, Integer ipConMap new ConcurrentHashMap();ipConMap.putAll(ipMap);SetString ipSet ipConMap.keySet();IteratorString iterator ipSet.iterator();ListString iplist new ArrayList();while (iterator.hasNext()){String name iterator.next();Integer num ipConMap.get(name);for (Integer i 0; i num; i) {iplist.add(name);}}int pos new Random().nextInt(iplist.size());return iplist.get(pos);}public static void main(String[] args) {WeightRandom weightRandom new WeightRandom();for (int i 0; i 10; i) {System.out.println(weightRandom.WeightRandom());}}
}5.源地址哈希法
public class AddressHash {static HashMapString, Integer ipMap new java.util.HashMap();static {ipMap.put(192.168.110.10,1);ipMap.put(192.168.110.11,2);ipMap.put(192.168.110.12,3);ipMap.put(192.168.110.13,4);}public String ipHash(String clientIp){ConcurrentHashMapString, Integer ipConMap new ConcurrentHashMap();ipConMap.putAll(ipMap);SetString ipSet ipConMap.keySet();ListString iplist new ArrayList();iplist.addAll(ipSet);int hashCode clientIp.hashCode();int num hashCode % iplist.size();return iplist.get(num);}public static void main(String[] args) {AddressHash addressHash new AddressHash();for (int i 0; i 1; i) {System.out.println(addressHash.ipHash(192.168.110.57));System.out.println(addressHash.ipHash(192.168.110.47));System.out.println(addressHash.ipHash(192.168.110.23));System.out.println(addressHash.ipHash(192.168.110.59));}}
}