负载均衡指Hash取模算法
来源:互联网 发布:奇异值分解 svd逆矩阵 编辑:程序博客网 时间:2024/05/14 20:03
在负载均衡的实现过程中有多种方式,随机,轮询,hash等,本处主要讲解基于java的hash算法,具体实现代码如下:
第一步创建以ip为健值得hashmap存放对象
public class IpMap
{
// 待路由的Ip列表,Key代表Ip,Value代表该Ip的权重
public static HashMap<String, Integer> serverWeightMap =
new HashMap<String, Integer>();
static
{
serverWeightMap.put("192.168.1.100", 1);
serverWeightMap.put("192.168.1.101", 1);
// 权重为4
serverWeightMap.put("192.168.1.102", 4);
serverWeightMap.put("192.168.1.103", 1);
serverWeightMap.put("192.168.1.104", 1);
// 权重为3
serverWeightMap.put("192.168.1.105", 3);
serverWeightMap.put("192.168.1.106", 1);
// 权重为2
serverWeightMap.put("192.168.1.107", 2);
serverWeightMap.put("192.168.1.108", 1);
serverWeightMap.put("192.168.1.110", 1);
serverWeightMap.put("192.168.1.109", 1);
}
}
第二步采用hash的算法取模进行测试
public class Hash
{
public static String getServer()
{
// 重建一个Map,避免服务器的上下线导致的并发问题
Map<String, Integer> serverMap =
new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);
// 取得Ip地址List
Set<String> keySet = serverMap.keySet();
System.out.println(keySet);
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);
// 在Web应用中可通过HttpServlet的getRemoteIp方法获取
String remoteIp = "127.0.0.1";
String newIP = "192.168.1.109";
int hashCode = remoteIp.hashCode();
int hashCode1 = newIP.hashCode();
System.out.println(hashCode+","+hashCode1);
int serverListSize = keyList.size();
int serverPos = hashCode % serverListSize;
int serverPos1 = hashCode1 % serverListSize;
System.out.println(serverPos+","+serverPos1);
if(hashCode1 < 0){
serverPos1 = Math.abs(serverPos1);
}
System.out.println(keyList.get(serverPos1));
return keyList.get(serverPos);
}
public static void main(String args[]){
getServer();
System.out.println(getServer());
}
这种方法比较简单,原因是在创建hashmap的对象时候,ip地址已经被经hash处理之后有序的排放在map集合里面,当外部服务ip过来访问的时候,会对这个ip地址进行一次hash,然后相对map集合的长度进行取模运算,这样得到的一个取模的值就可以对应map集合里取到的ip地址,这样就完成了负载均衡的实践
- 负载均衡指Hash取模算法
- 负载均衡一致性hash算法
- 负载均衡一致性hash算法
- Hash算法系列-应用(负载均衡)
- 一致性hash算法: cache、负载均衡应用
- nginx负载均衡ip-hash算法
- 一致性hash算法: cache、负载均衡应用
- 一致性hash算法解决服务器负载均衡问题
- 一致性hash算法理解 环形空间负载均衡机制
- 一致性Hash与负载均衡
- 一致性Hash与负载均衡
- 负载均衡--服务器集群负载均衡算法
- 负载均衡算法
- 负载均衡算法小结
- 负载均衡算法大全
- 负载均衡算法随笔
- 负载均衡算法随笔
- 负载均衡算法
- MySQL笔记六之 条件判断函数
- 微软中间语言
- JAVASCRIPT&CSS之RUN SUN
- HDU-2141
- SqlServer函数大全
- 负载均衡指Hash取模算法
- IE下document.getElementsByName无法获取DIV标签
- Eclipse中server启动超时的解决方法
- Leetcode 207. Course Schedule
- win10 uwp 如何拖动一个TextBlock的文字到另一个TextBlock
- 矩形着色
- DIV模拟TAB选项卡
- 基于计算机视觉的无人驾驶感知系统
- 空指针