详解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 风格的标签列表