本篇文章主要介绍Java实现负载均衡的几种算法,具体如下:

轮询:
package class2.zookeeper.loadbalance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* 負載均衡算法,輪詢法
* @author guoy
*
*/
public class TestRoundRobin {
static Map<String,Integer> serverWeigthMap = new HashMap<String,Integer>();
static{
serverWeigthMap.put("192.168.1.12", 1);
serverWeigthMap.put("192.168.1.13", 1);
serverWeigthMap.put("192.168.1.14", 2);
serverWeigthMap.put("192.168.1.15", 2);
serverWeigthMap.put("192.168.1.16", 3);
serverWeigthMap.put("192.168.1.17", 3);
serverWeigthMap.put("192.168.1.18", 1);
serverWeigthMap.put("192.168.1.19", 2);
}
Integer pos = 0;
public String roundRobin()
{
//重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
Map<String,Integer> serverMap = new HashMap<String,Integer>();
serverMap.putAll(serverWeigthMap);
//獲取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;
}
public static void main(String[] args) {
TestRoundRobin robin = new TestRoundRobin();
for (int i = 0; i < 20; i++) {
String serverIp = robin.roundRobin();
System.out.println(serverIp);
}
}
}
加权轮询:
package class2.zookeeper.loadbalance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
/**
* 加權隨機载均衡算法
* @author guoy
*
*/
public class TestWeightRandom {
static Map<String,Integer> serverWeigthMap = new HashMap<String,Integer>();
static{
serverWeigthMap.put("192.168.1.12", 1);
serverWeigthMap.put("192.168.1.13", 1);
serverWeigthMap.put("192.168.1.14", 2);
serverWeigthMap.put("192.168.1.15", 2);
serverWeigthMap.put("192.168.1.16", 3);
serverWeigthMap.put("192.168.1.17", 3);
serverWeigthMap.put("192.168.1.18", 1);
serverWeigthMap.put("192.168.1.19", 2);
}
public static String weightRandom()
{
//重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
Map<String,Integer> serverMap = new HashMap<String,Integer>();
serverMap.putAll(serverWeigthMap);
//獲取ip列表list
Set<String> keySet = serverMap.keySet();
Iterator<String> it = keySet.iterator();
List<String> serverList = new ArrayList<String>();
while (it.hasNext()) {
String server = it.next();
Integer weight = serverMap.get(server);
for (int i = 0; i < weight; i++) {
serverList.add(server);
}
}
Random random = new Random();
int randomPos = random.nextInt(serverList.size());
String server = serverList.get(randomPos);
return server;
}
public static void main(String[] args) {
String serverIp = weightRandom();
System.out.println(serverIp);
}
}
随机:
package class2.zookeeper.loadbalance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Set;
/**
* 隨機负载均衡算法
* @author guoy
*
*/
public class TestRandom {
static Map<String,Integer> serverWeigthMap = new HashMap<String,Integer>();
static{
serverWeigthMap.put("192.168.1.12", 1);
serverWeigthMap.put("192.168.1.13", 1);
serverWeigthMap.put("192.168.1.14", 2);
serverWeigthMap.put("192.168.1.15", 2);
serverWeigthMap.put("192.168.1.16", 3);
serverWeigthMap.put("192.168.1.17", 3);
serverWeigthMap.put("192.168.1.18", 1);
serverWeigthMap.put("192.168.1.19", 2);
}
public static String random()
{
//重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
Map<String,Integer> serverMap = new HashMap<String,Integer>();
serverMap.putAll(serverWeigthMap);
//獲取ip列表list
Set<String> keySet = serverMap.keySet();
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);
Random random = new Random();
int randomPos = random.nextInt(keyList.size());
String server = keyList.get(randomPos);
return server;
}
public static void main(String[] args) {
String serverIp = random();
System.out.println(serverIp);
}
}
加权随机:
package class2.zookeeper.loadbalance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
/**
* 加權隨機载均衡算法
* @author guoy
*
*/
public class TestWeightRandom {
static Map<String,Integer> serverWeigthMap = new HashMap<String,Integer>();
static{
serverWeigthMap.put("192.168.1.12", 1);
serverWeigthMap.put("192.168.1.13", 1);
serverWeigthMap.put("192.168.1.14", 2);
serverWeigthMap.put("192.168.1.15", 2);
serverWeigthMap.put("192.168.1.16", 3);
serverWeigthMap.put("192.168.1.17", 3);
serverWeigthMap.put("192.168.1.18", 1);
serverWeigthMap.put("192.168.1.19", 2);
}
public static String weightRandom()
{
//重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
Map<String,Integer> serverMap = new HashMap<String,Integer>();
serverMap.putAll(serverWeigthMap);
//獲取ip列表list
Set<String> keySet = serverMap.keySet();
Iterator<String> it = keySet.iterator();
List<String> serverList = new ArrayList<String>();
while (it.hasNext()) {
String server = it.next();
Integer weight = serverMap.get(server);
for (int i = 0; i < weight; i++) {
serverList.add(server);
}
}
Random random = new Random();
int randomPos = random.nextInt(serverList.size());
String server = serverList.get(randomPos);
return server;
}
public static void main(String[] args) {
String serverIp = weightRandom();
System.out.println(serverIp);
}
}
ip hash:
package class2.zookeeper.loadbalance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* 负载均衡 ip_hash算法
* @author guoy
*
*/
public class TestIpHash {
static Map<String,Integer> serverWeigthMap = new HashMap<String,Integer>();
static{
serverWeigthMap.put("192.168.1.12", 1);
serverWeigthMap.put("192.168.1.13", 1);
serverWeigthMap.put("192.168.1.14", 2);
serverWeigthMap.put("192.168.1.15", 2);
serverWeigthMap.put("192.168.1.16", 3);
serverWeigthMap.put("192.168.1.17", 3);
serverWeigthMap.put("192.168.1.18", 1);
serverWeigthMap.put("192.168.1.19", 2);
}
/**
* 获取请求服务器地址
* @param remoteIp 负载均衡服务器ip
* @return
*/
public static String ipHash(String remoteIp)
{
//重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
Map<String,Integer> serverMap = new HashMap<String,Integer>();
serverMap.putAll(serverWeigthMap);
//獲取ip列表list
Set<String> keySet = serverMap.keySet();
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);
int hashCode =remoteIp.hashCode();
int serverListSize = keyList.size();
int serverPos = hashCode % serverListSize;
return keyList.get(serverPos);
}
public static void main(String[] args) {
String serverIp = ipHash("192.168.1.12");
System.out.println(serverIp);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java负载均衡算法
# java负载均衡
# 使用Java实现6种常见负载均衡算法
# Java实现5种负载均衡算法(小结)
# Java负载均衡算法实现之轮询和加权轮询
# java开发Dubbo负载均衡与集群容错示例详解
# 使用Java实现5种负载均衡算法实例
# Java Grpc实例创建负载均衡详解
# Java Ribbon与openfeign区别和用法讲解
# Java中的服务发现与负载均衡及Eureka与Ribbon的应用小结
# 由於
# 器上
# 负载均衡
# 几种
# 大家多多
# put
# serverWeigthMap
# lt
# static
# String
# gt
# Integer
# pos
# roundRobin
# 下線導致
# map
# package
# java
# loadbalance
# zookeeper
相关文章:
c# await 一个已经完成的Task会发生什么
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何在橙子建站中快速调整背景颜色?
如何通过虚拟主机快速完成网站搭建?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
建站之星如何助力企业快速打造五合一网站?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
建站之星×万网:智能建站系统+自助建站平台一键生成
建站主机选虚拟主机还是云服务器更好?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何解决ASP生成WAP建站中文乱码问题?
建站之星免费版是否永久可用?
南京网站制作费用,南京远驱官方网站?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
动图在线制作网站有哪些,滑动动图图集怎么做?
制作网站的公司有哪些,做一个公司网站要多少钱?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
安云自助建站系统如何快速提升SEO排名?
专业网站建设制作报价,网页设计制作要考什么证?
如何用花生壳三步快速搭建专属网站?
已有域名如何快速搭建专属网站?
如何通过可视化优化提升建站效果?
香港服务器如何优化才能显著提升网站加载速度?
定制建站策划方案_专业建站与网站建设方案一站式指南
宝塔建站助手安装配置与建站模板使用全流程解析
广州美橙建站如何快速搭建多端合一网站?
建站之星备案是否影响网站上线时间?
已有域名和空间如何搭建网站?
h5网站制作工具有哪些,h5页面制作工具有哪些?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
如何用wdcp快速搭建高效网站?
如何高效配置香港服务器实现快速建站?
深入理解Android中的xmlns:tools属性
常州企业建站如何选择最佳模板?
英语简历制作免费网站推荐,如何将简历翻译成英文?
深圳网站制作案例,网页的相关名词有哪些?
Android滚轮选择时间控件使用详解
建站之星导航配置指南:自助建站与SEO优化全解析
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
盐城做公司网站,江苏电子版退休证办理流程?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
重庆市网站制作公司,重庆招聘网站哪个好?
南宁网站建设制作定制,南宁网站建设可以定制吗?
如何用西部建站助手快速创建专业网站?
如何选择高性价比服务器搭建个人网站?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
如何基于云服务器快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。