Java实现常用简单负载均衡(LoadBalance)
2017-01-18 00:19
567 查看
我们先说一下百度百科对于 负载均衡 的定义:
建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
话不多说,接下来,我们通过Java代码,来实现几种非常简单的负载均衡:
以上几种方式的实现都非常简单,只是为了让大家对于负载均衡有一个更加深刻的了解,只是提供给大家一个思路,在真正的实现过程中要比上面难很多,考虑的点也要多很多,希望在这里能让大家收获一些东西
建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
话不多说,接下来,我们通过Java代码,来实现几种非常简单的负载均衡:
服务器地址池实现:
package _20170117; import java.util.HashMap; /** * 服务器地址池 * Created by zhang on 17/1/17. */ public class IpMap { public static HashMap<String, Integer> serverWeightMap = new HashMap<String, Integer>(); static { serverWeightMap.put("192.168.30.201", 1); serverWeightMap.put("192.168.30.112", 2); serverWeightMap.put("192.168.30.124", 3); serverWeightMap.put("192.168.30.223", 4); serverWeightMap.put("192.168.30.110", 2); serverWeightMap.put("192.168.30.118", 1); serverWeightMap.put("192.168.30.200", 5); } }
轮询法:
package _20170117; import java.util.*; /** * 轮询法 * Created by zhang on 17/1/17. */ 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(); List<String> keyList = new ArrayList<String>(); keyList.addAll(keySet); String server; synchronized (pos){ if (pos >= keySet.size()) { pos = 0; } server = keyList.get(pos); pos ++ ; } return server; } }
随机法:
package _20170117; import java.util.*; /** * 随机法 * Created by zhang on 17/1/17. */ 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(); List<String> keyList = new ArrayList<String>(); keyList.addAll(keySet); java.util.Random random = new java.util.Random(); int pos = random.nextInt(keyList.size()); return keyList.get(pos); } }
加权随机法:
package _20170117; import java.util.*; import java.util.Random; /** * 加权随机 * Created by zhang on 17/1/17. */ 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(); List<String> keyList = new ArrayList<String>(); Iterator<String> iterator = keySet.iterator(); while (iterator.hasNext()) { String server = iterator.next(); int weight = serverMap.get(server); for (int i = 0; i < weight; i++) { keyList.add(server); } } Random random = new Random(); int pos = random.nextInt(keyList.size()); return keyList.get(pos); } }
加权轮询法:
package _20170117; import java.util.*; /** * 加权轮询法 * Created by zhang on 17/1/17. */ public class WeightRoundRobin { 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(); 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 ; synchronized (pos){ if (pos >= serverList.size()) { pos = 0; } server = serverList.get(pos); pos ++ ; } return server; } }
以上几种方式的实现都非常简单,只是为了让大家对于负载均衡有一个更加深刻的了解,只是提供给大家一个思路,在真正的实现过程中要比上面难很多,考虑的点也要多很多,希望在这里能让大家收获一些东西
相关文章推荐
- 用java实现简单url负载均衡以及容错
- java常用加密解密简单实现
- java swing几种常用容器简单实现
- redis java客户端Jedis 实现 连接池 + 简单的负载均衡
- memcached学习——常用命令+基于java客户端的3种简单实现(二)
- java简单实现常用的排序算法
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现
- virtualbox虚拟机ubuntu,安装docker,配置javaweb环境,简单实现负载均衡
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现
- Java爬虫的简单实现
- 负载均衡算法---Java的简单实现(1)
- 负载均衡算法---Java简单实现(2)
- JavaWeb之Servlet的简单实现
- java几种常用设计模式简单示例
- jsp实现简单的Java web聊天室程序源码
- 红黑树的简单实现(java)
- Java:Java实现简单闹钟设计
- Java实现简单线程池
- Java打造RPC框架(二):11个类实现简单Java RPC
- Java实现简单文件过滤器功能