详解Java实现负载均衡的几种算法代码
发布时间 - 2026-01-10 22:59:19 点击率:次本篇文章主要介绍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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用JavaScript实现文本编辑器_光标和选区怎么处理
新三国志曹操传主线渭水交兵攻略
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
企业网站制作这些问题要关注
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
iOS验证手机号的正则表达式
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何在建站宝盒中设置产品搜索功能?
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Thinkphp 中 distinct 的用法解析
在线制作视频的网站有哪些,电脑如何制作视频短片?
高端建站三要素:定制模板、企业官网与响应式设计优化
java获取注册ip实例
Android自定义listview布局实现上拉加载下拉刷新功能
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
iOS中将个别页面强制横屏其他页面竖屏
Swift开发中switch语句值绑定模式
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
如何在IIS7上新建站点并设置安全权限?
java ZXing生成二维码及条码实例分享
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Laravel如何升级到最新版本?(升级指南和步骤)
如何挑选高效建站主机与优质域名?
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何撰写建站申请书?关键要点有哪些?
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
佛山企业网站制作公司有哪些,沟通100网上服务官网?
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
高端建站如何打造兼具美学与转化的品牌官网?
在线制作视频网站免费,都有哪些好的动漫网站?
轻松掌握MySQL函数中的last_insert_id()
Laravel Docker环境搭建教程_Laravel Sail使用指南
海南网站制作公司有哪些,海口网是哪家的?
如何快速上传自定义模板至建站之星?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel如何处理文件下载请求?(Response示例)
如何构建满足综合性能需求的优质建站方案?
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
如何快速生成专业多端适配建站电话?
Laravel如何发送系统通知?(Notification渠道示例)
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
PHP正则匹配日期和时间(时间戳转换)的实例代码
Laravel如何实现API资源集合?(Resource Collection教程)
如何使用 jQuery 正确渲染 Instagram 风格的标签列表

