读完本文你将知道:
1. 什么是负载均衡?
2. 负载均衡的几种简单实现:
(1) 轮询法(Round Robin)
(2)随机法(Random)
(3)源地址Hash法(Hash)
(4)加权轮询法(Weight Round Robin)
(5)加权随机法(Weight Random)
(6)最小连接数法(Least Connections)
1. 什么是负载均衡?
负载均衡(Load Balance),指由多台服务器以对称的形式组成的一个服务器集合,每台服务器都有等价的地位,都可以单独对外提供服务而无需其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够平均分配客户请求到服务器陈列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用最少的投资获得接近于大型主机的性能。
本文主要讲解将“外部发送来的请求均匀分配到对称结构中的某一台服务器上”的各种算法, 并以Java代码来模拟实现。
下面首先来以一个IP列表来模拟集群中的机器的IP集合。
package distributed;
import java.util.HashMap;
/**
* Created by louyuting on 17/2/7.
*/
public class IPMap {
public static HashMap<String, Integer> serverWeightMap = new HashMap<String, Integer>();
static {
//第一个参数是IP地址,第二个是权重.
serverWeightMap.put("192.168.1.100", 1);
serverWeightMap.put("192.168.1.101", 2);
serverWeightMap.put("192.168.1.102", 3);
serverWeightMap.put("192.168.1.103", 4);
serverWeightMap.put("192.168.1.104", 3);
serverWeightMap.put("192.168.1.105", 2);
serverWeightMap.put("192.168.1.106", 1);
serverWeightMap.put("192.168.1.107", 2);
serverWeightMap.put("192.168.1.108", 1);
serverWeightMap.put("192.168.1.109", 4);
}
}
1.轮训法
轮训法其实就是按照所有地址的序列,从前往后一次访问,实现代码如下:
package distributed;
import java.util.*;
/**
* 轮训法
*/
public class RoundRobin {
private static Integer pos=0;
public static String getServerIP(){
//重新在线程本地copy一份IPMap, 避免服务器上线下线导致的并发问题
Map<String, Integer> s