loadbalance轮询算法 java实现

/**
* <html>
* <body>
* <P> Copyright JasonInternational</p>
* <p> All rights reserved.</p>
* <p> Created on 2018年5月16日 下午8:33:15</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.component.loadbalance; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; /**
* @Package:cn.ucaner.datastructure.loadbalance
* @ClassName:Hash
* @Description: <p> Hash</p>
* @Author: - Jason
* @CreatTime:2018年5月16日 下午8:38:29
* @Modify By:
* @ModifyTime: 2018年5月16日
* @Modify marker:
* @version V1.0
*/
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();
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);
// 在Web应用中可通过HttpServlet的getRemoteIp方法获取
String remoteIp = "127.0.0.1";
int hashCode = remoteIp.hashCode();
int serverListSize = keyList.size();
int serverPos = hashCode % serverListSize;
return keyList.get(serverPos);
} /**
* @Description: Just for Test
* @param args void
* @Autor: Jason - Jasonandy@hotmail.com
*/
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(getServer());
}
}
}

  文章来源地址https://www.yii666.com/article/754051.html文章地址https://www.yii666.com/article/754051.html网址:yii666.com<网址:yii666.com文章来源地址:https://www.yii666.com/article/754051.html

/**
* <html>
* <body>
* <P> Copyright JasonInternational</p>
* <p> All rights reserved.</p>
* <p> Created on 2018年5月16日 下午8:00:17</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.component.loadbalance; import java.util.HashMap; /**
* @Package:cn.ucaner.datastructure.loadbalance
* @ClassName:IpMap
* @Description: <p> IpMap
* https://www.cnblogs.com/szlbm/p/5588555.html
* </p>
* @Author: - Jason
* @CreatTime:2018年5月16日 下午8:00:17
* @Modify By:
* @ModifyTime: 2018年5月16日
* @Modify marker:
* @version V1.0
*/
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.109", 1);
serverWeightMap.put("192.168.1.110", 1);
} }
/**
* <html>
* <body>
* <P> Copyright JasonInternational</p>
* <p> All rights reserved.</p>
* <p> Created on 2018年5月16日 下午8:33:15</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.component.loadbalance; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; /**
* @Package:cn.ucaner.datastructure.loadbalance
* @ClassName:Random
* @Description: <p> Random
*
* 基于概率统计的理论,吞吐量越大,随机算法的效果越接近于轮询算法的效果
* </p>
* @Author: - 随机算法
* @CreatTime:2018年5月16日 下午8:36:48
* @Modify By:
* @ModifyTime: 2018年5月16日
* @Modify marker:
* @version V1.0
*/
public class Random { public static String getServer(){
// 重建一个Map,避免服务器的上下线导致的并发问题
Map<String, Integer> serverMap = new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);
// 取得Ip地址List
Set<String> keySet = serverMap.keySet();
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);
java.util.Random random = new java.util.Random();//获取随机数
int randomPos = random.nextInt(keyList.size());
return keyList.get(randomPos);
} /**
* @Description: Just for Test
* @param args void
* @Autor: Jason - Jasonandy@hotmail.com
*/
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(getServer());
}
}
}
/**
* <html>
* <body>
* <P> Copyright JasonInternational</p>
* <p> All rights reserved.</p>
* <p> Created on 2018年5月16日 下午8:33:15</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.component.loadbalance; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; /**
* @Package:cn.ucaner.datastructure.loadbalance
* @ClassName:RoundRobin
* @Description: <p> 轮询算法
* https://www.cnblogs.com/szlbm/p/5588555.html
* </p>
* @Author: - Jason
* @CreatTime:2018年5月16日 下午8:33:15
* @Modify By:
* @ModifyTime: 2018年5月16日
* @Modify marker:
* @version V1.0
*/
public class RoundRobin { private static Integer pos = 0; public static String getServer(){
// 重建一个Map,避免服务器的上下线导致的并发问题
Map<String, Integer> serverMap = new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);
// 取得Ip地址List
Set<String> keySet = serverMap.keySet();
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);
String server = null;
synchronized (pos){
if (pos > keySet.size())
pos = 0;
server = keyList.get(pos);
pos ++;
}
return server;
} /**
* @Description: Just for Test
* @param args void
* @Autor: Jason - Jasonandy@hotmail.com
*/
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(getServer());
}
}
}
/**
* <html>
* <body>
* <P> Copyright JasonInternational</p>
* <p> All rights reserved.</p>
* <p> Created on 2018年5月16日 下午8:33:15</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.component.loadbalance; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set; /**
* @Package:cn.ucaner.datastructure.loadbalance
* @ClassName:WeightRandom
* @Description: <p> WeightRandom </p>
* @Author: -
* @CreatTime:2018年5月16日 下午8:41:24
* @Modify By:
* @ModifyTime: 2018年5月16日
* @Modify marker:
* @version V1.0
*/
public class WeightRandom { public static String getServer(){
// 重建一个Map,避免服务器的上下线导致的并发问题
Map<String, Integer> serverMap =
new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap); // 取得Ip地址List
Set<String> keySet = serverMap.keySet();
Iterator<String> iterator = keySet.iterator(); List<String> serverList = new ArrayList<String>();
while (iterator.hasNext()){
String server = iterator.next();
int weight = serverMap.get(server);
for (int i = 0; i < weight; i++)
serverList.add(server);
} java.util.Random random = new java.util.Random();
int randomPos = random.nextInt(serverList.size()); return serverList.get(randomPos);
} /**
* @Description: Just for Test
* @param args void
* @Autor: Jason - Jasonandy@hotmail.com
*/
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(getServer());
}
}
}
/**
* <html>
* <body>
* <P> Copyright JasonInternational</p>
* <p> All rights reserved.</p>
* <p> Created on 2018年5月16日 下午8:33:15</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.component.loadbalance; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set; /**
* @Package:cn.ucaner.datastructure.loadbalance
* @ClassName:WeightRoundRobin
* @Description: <p> WeightRoundRobin </p>
* @Author: - Jason
* @CreatTime:2018年5月16日 下午8:39:44
* @Modify By:
* @ModifyTime: 2018年5月16日
* @Modify marker:
* @version V1.0
*/
public class WeightRoundRobin { private static Integer pos; public static String getServer(){ // 重建一个Map,避免服务器的上下线导致的并发问题
Map<String, Integer> serverMap = new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap); // 取得Ip地址List
Set<String> keySet = serverMap.keySet();
Iterator<String> iterator = keySet.iterator(); List<String> serverList = new ArrayList<String>();
while (iterator.hasNext())
{
String server = iterator.next();
int weight = serverMap.get(server);
for (int i = 0; i < weight; i++)
serverList.add(server);
} String server = null;
synchronized (pos){
if (pos > keySet.size())
pos = 0;
server = serverList.get(pos);
pos ++;
}
return server;
} /**
* @Description: Just for Test
* @param args void
* @Autor: Jason - Jasonandy@hotmail.com
*/
public static void main(String[] args) {
//for (int i = 0; i < 10; i++) {
System.out.println(getServer());
//}
} }

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

loadbalance轮询算法 java实现-相关文章

  1. 权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现

  2. 权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现3

  3. 权重轮询调度算法 java版本号

  4. 权重轮询调度算法(Weighted Round-Robin Scheduling)-C#实现

  5. golang实现权重轮询调度算法

  6. php版权重轮询调度算法

  7. loadbalance轮询算法 java实现

  8. 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失

    wait/notify  机制是为了避免轮询带来的性能损失。为了说清道理,我们用“图书馆借书”这个经典例子来作解释。一本书同时只能借给一个人。现在有一本书,图书馆已经把这本书借了张三。在简单的synchrnozed 同步机制下,李四如果想借,先要去图书馆查看书有没有还回来。李

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png