读完本文你将知道: 1. 什么是负载均衡? 2. 负载均衡的几种简单实现: (1) 轮询法(Round Robin) (2)随机法(Random) (3)源地址Hash法(Hash) (4)加权轮询法(Weight Round Robin) (5)加权随机法(Weight Random) (6)最小连接数法(Least Connections)
负载均衡(Load Balance),指由多台服务器以对称的形式组成的一个服务器集合,每台服务器都有等价的地位,都可以单独对外提供服务而无需其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够平均分配客户请求到服务器陈列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用最少的投资获得接近于大型主机的性能。
本文主要讲解将“外部发送来的请求均匀分配到对称结构中的某一台服务器上”的各种算法, 并以Java代码来模拟实现。
下面首先来以一个IP列表来模拟集群中的机器的IP集合。
package distributed;
import java.util.HashMap;
/**
* Created by louyuting on 17/2/7.
*/
public class IPMap {
public static HashMap serverWeightMap = new HashMap();
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
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
轮训法其实就是按照所有地址的序列,从前往后一次访问,实现代码如下:
package distributed;
import java.util.*;
/**
* 轮训法
*/
public class RoundRobin {
private static Integer pos=0;
public static String getServerIP(){
//重新在线程本地copy一份IPMap, 避免服务器上线下线导致的并发问题
Map serverMap = new HashMap();
serverMap.putAll(IPMap.serverWeightMap);
//取的IP地址的Set
Set ips = serverMap.keySet();
List iplist = new ArrayList();
iplist.addAll(ips);
String server = null;
synchronized (pos){
if(pos > iplist.size())
pos=0;
server = iplist.get(pos);
pos++;
}
return server;
}
/**
*
* @param args
*/
public static void main(String[] args) {
String result = null;
for(int i=0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?