iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Java 中怎么实现负载均衡算法
  • 116
分享到

Java 中怎么实现负载均衡算法

2024-04-02 19:04:59 116人浏览 八月长安
摘要

Java 中怎么实现负载均衡算法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、完全随机算法缺点:所有服务器的访问概率都是相同的。packa

Java 中怎么实现负载均衡算法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1、完全随机算法

缺点:所有服务器的访问概率都是相同的。

package com.example.demo.core.random;

import java.util.Arrays;
import java.util.List;
import java.util.Random;


public class RandomServer {

   public static List<String> list = Arrays.asList("10.180.11.126:8888","10.180.11.128:8888","10.180.11.130:8888");

   static Random random = new Random();

   public static String getServer() {
       int number = random.nextInt(list.size());
       return list.get(number);
   }

   public static void main(String[] args) {
       for(int i = 0; i < 15; i++) {
           System.out.println(getServer());
       }
   }
}

2、加权随机算法

场景:有的服务器性能高,可以让随机到此服务器的可能性增大

在这里小编建了一个前端学习交流扣扣群:132667127,我自己整理的最新的前端资料和高级开发教程,如果有想需要的,可以加群一起学习交流

缺点:权重低的服务器可能很长一段时间都访问不到3

package com.example.demo.core.random;

import java.util.*;


public class WeightRandomServer {

   public static Map<String,Integer> map = new HashMap<>();

   static {
       map.put("10.180.11.126:8888",2);
       map.put("10.180.11.128:8888",7);
       map.put("10.180.11.130:8888",1);
   }

   static Random random = new Random();

   
   public static String getServer() {

       List<String> list = new ArrayList<>();

       for(Map.Entry<String,Integer> entry: map.entrySet()) {

           //根据权重,决定向list中添加几次
           for(int i = 0; i < entry.getValue(); i++) {

               list.add(entry.geTKEy());
           }
       }
       //list的大小
       int weight = map.values().stream().mapToInt(p -> p).sum();

       int number = random.nextInt(weight);

       return list.get(number);
   }


   
   public static String getServer1() {
       //计算总权值
       int weight = map.values().stream().mapToInt(p -> p).sum();

       //随机一个随机数
       int index = random.nextInt(weight);

       //遍历  服务  map
       for(Map.Entry<String,Integer> entry : map.entrySet()) {
           //如果权重大于  索引
           if(entry.getValue() >= index) {
               // 返回这个服务
               return entry.getKey();
           }
           //否则,索引 = 当前索引 - 当前服务的权重
           index = index - entry.getValue();
       }
       return "";
   }

   public static void main(String[] args) {

       for(int i = 0; i < 15; i++) {

           //System.out.println(getServer());
           System.out.println(getServer1());
       }
   }
}

3、完全轮询算法

缺点:从头到尾轮询一遍,不能根据服务器性能设置权重

package com.example.demo.core.poll;

import java.util.Arrays;
import java.util.List;


public class PollServer {
   public static List<String> list = Arrays.asList("10.180.11.126:8888","10.180.11.128:8888","10.180.11.130:8888");

   static int index;

   public static String getServer() {
       if(index == list.size()) {
           index = 0;
       }
       return list.get(index++);
   }

   public static void main(String[] args) {

       for(int i = 0; i < 15; i++) {

           System.out.println(getServer());
       }
   }
}

4、加权轮询算法

有点:可以根据服务器性能设置访问权重

缺点:可能某个服务器权重大,长时间执行,遇到耗时大的请求,压力会很大

package com.example.demo.core.poll;

import java.util.HashMap;
import java.util.Map;


public class WeightPollServer {

   public static Map<String,Integer> map = new HashMap<>();

   static {
       map.put("10.180.11.126:8888",2);
       map.put("10.180.11.128:8888",7);
       map.put("10.180.11.130:8888",5);
   }

   static int index;

   public static String getServer() {
       int weight = map.values().stream().mapToInt( p -> p).sum();
       int number = (index++) % weight;
       for(Map.Entry<String,Integer> entry : map.entrySet()) {
           if(entry.getValue() >= number) {
               return entry.getKey();
           }
           number = number - entry.getValue();
       }
       return "";
   }

   public static void main(String[] args) {

       for(int i = 0; i < 15; i++) {
           System.out.println(getServer());
       }
   }
}

5、平滑加权轮询算法

优点:根据权重分配服务,同时又保证权重低的服务可以被访问到

缺点:集群环境下,同一个用户访问无法分流到固定一台机器

package com.example.demo.core.smooth;


public class SmoothWeight {

   private int weight;

   private int currentWeight;

   private String address;


   public int getWeight() {
       return weight;
   }

   public void setWeight(int weight) {
       this.weight = weight;
   }

   public int getCurrentWeight() {
       return currentWeight;
   }

   public void setCurrentWeight(int currentWeight) {
       this.currentWeight = currentWeight;
   }

   public String getAddress() {
       return address;
   }

   public void setAddress(String address) {
       this.address = address;
   }

   public SmoothWeight(int weight, int currentWeight, String address) {
       this.weight = weight;
       this.currentWeight = currentWeight;
       this.address = address;
   }
}
package com.example.demo.core.smooth;

import java.util.HashMap;
import java.util.Map;


public class SmoothWeightPollServer {


   public static Map<String,SmoothWeight> map = new HashMap<>();

   static {
       map.put("10.180.11.126:8888",new SmoothWeight(5,5,"10.180.11.126:8888"));
       map.put("10.180.11.128:8888",new SmoothWeight(2,2,"10.180.11.128:8888"));
       map.put("10.180.11.130:8888",new SmoothWeight(4,4,"10.180.11.130:8888"));
   }

   public static String getServer() {

       SmoothWeight maxSmoothWeight = null;

       int weight = map.values().stream().mapToInt(SmoothWeight :: getWeight).sum();

       for(Map.Entry<String,SmoothWeight> entry : map.entrySet()) {

           SmoothWeight currentSmoothWeight = entry.getValue();

           if(maxSmoothWeight == null || currentSmoothWeight.getCurrentWeight() > maxSmoothWeight.getCurrentWeight()) {
               maxSmoothWeight = currentSmoothWeight;
           }
       }
       assert maxSmoothWeight != null;
       maxSmoothWeight.setCurrentWeight(maxSmoothWeight.getCurrentWeight() - weight);
       for(Map.Entry<String,SmoothWeight> entry : map.entrySet()) {

           SmoothWeight currentSmoothWeight = entry.getValue();

           currentSmoothWeight.setCurrentWeight(currentSmoothWeight.getCurrentWeight() + currentSmoothWeight.getWeight());
       }

       return maxSmoothWeight.getAddress();
   }


   public static void main(String[] args) {

       for(int i = 0; i < 15; i++) {
           System.out.println(getServer());
       }
   }
}

6、哈希负载算法

package com.example.demo.core.hash;

import java.util.Arrays;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;


public class HashServer {

   public static List<String> list = Arrays.asList("10.180.11.126:8888","10.180.11.128:8888","10.180.11.130:8888");

   public static String getServer(String client){
       int nodeCount = 40;

       TreeMap<Integer,String> treeMap = new TreeMap<>();

       for(String s : list) {
           for(int i = 0; i < nodeCount; i++) {
               treeMap.put((s + "address:" + i).hashCode(), s);
           }
       }

       SortedMap<Integer,String> sortedMap = treeMap.tailMap(client.hashCode());

       Integer firstHash = (sortedMap.size() > 0) ? sortedMap.firstKey() : treeMap.firstKey();

       return treeMap.get(firstHash);
   }

   public static void main(String[] args) {

       for(int i = 0; i < 100; i++) {
           System.out.println(getServer("用户:" + i + "访问"));
       }
   }

}

看完上述内容,你们掌握Java 中怎么实现负载均衡算法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网node.js频道,感谢各位的阅读!

--结束END--

本文标题: Java 中怎么实现负载均衡算法

本文链接: https://www.lsjlt.com/news/77185.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 中怎么实现负载均衡算法
    Java 中怎么实现负载均衡算法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、完全随机算法缺点:所有服务器的访问概率都是相同的。packa...
    99+
    2024-04-02
  • Java怎么实现负载均衡算法
    这篇文章主要讲解了“Java怎么实现负载均衡算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么实现负载均衡算法”吧!什么是负载均衡(Load balancing)?在网站创立初期...
    99+
    2023-06-02
  • hadoop负载均衡算法怎么实现
    Hadoop负载均衡算法的实现可以通过以下几种方式: 数据均衡:Hadoop中的数据均衡是通过HDFS的数据均衡来实现的。HDF...
    99+
    2024-04-18
    hadoop
  • Java实现5种负载均衡算法(小结)
    目录概念轮询算法加权轮询法加权随机法随机法IP_Hash算法概念 负载均衡是将客户端请求访问,通过提前约定好的规则转发给各个server。其中有好几个种经典的算法,下面我们用Java...
    99+
    2024-04-02
  • 怎么使用Java实现常见的负载均衡算法
    在Java中实现常见的负载均衡算法,可以使用以下几种方法: 轮询算法(Round Robin):实现一个列表来存储服务器节点,并...
    99+
    2024-04-09
    Java
  • Java 负载均衡的 5 种算法实现原理
    目录一、负载均衡算法简介1、轮询法2、随机法3、源地址哈希法4、加权轮询法5、加权随机法二、代码实现负载均衡五种算法1.轮询法2.加权轮询法3.随机法4.加权随机5.源地址哈希法 前...
    99+
    2024-04-02
  • Tomcat中怎么实现负载均衡
    在Tomcat中实现负载均衡可以通过以下几种方式: 使用Apache服务器作为反向代理:可以将多个Tomcat实例部署在不同的服...
    99+
    2024-03-07
    Tomcat
  • java负载均衡框架怎么实现
    在Java中,可以使用以下几种方式来实现负载均衡框架:1. 随机算法:通过随机选择一个可用的服务器来实现负载均衡。这种方式简单且易于...
    99+
    2023-10-12
    java
  • 服务器的负载均衡算法怎么实现
    这篇文章主要介绍“服务器的负载均衡算法怎么实现”,在日常操作中,相信很多人在服务器的负载均衡算法怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”服务器的负载均衡算法怎么实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-03
  • mysql中怎么实现负载均衡
    这篇文章给大家介绍mysql中怎么实现负载均衡,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.环境: mysql 5ubuntu10.04 x86_64mdb1 ...
    99+
    2024-04-02
  • SpringBoot中怎么实现负载均衡
    在Spring Boot中,实现负载均衡通常是通过集成Spring Cloud Ribbon来实现的。Ribbon是一个负载均衡器和...
    99+
    2024-04-09
    SpringBoot
  • 使用Java实现5种负载均衡算法实例
    目录前言概念 几种负载均衡算法图例轮询算法 加权轮询法 加权随机法 随机法 IP_Hash算法 总结前言 负载均衡是为了解决并发情况下,多个请求访问,把请求通过提前约定好的规则转发给...
    99+
    2024-04-02
  • sqlserver中怎么实现负载均衡
    这篇文章将为大家详细讲解有关sqlserver中怎么实现负载均衡,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.所有的数据库客户都通过ICX访问数据库。当...
    99+
    2024-04-02
  • Flask中怎么实现负载均衡
    Flask本身并不直接提供负载均衡的功能,但可以通过其他方式来实现负载均衡。以下是一些常用的方法: 使用Nginx或其他反向代理服...
    99+
    2024-05-11
    Flask
  • springcloud负载均衡怎么实现
    Spring Cloud提供了多种方式来实现负载均衡,常用的有以下几种方式:1. Ribbon:Ribbon是Spring Clou...
    99+
    2023-09-02
    springcloud 负载均衡
  • 6种负载均衡算法
    当今的分布式系统越来越普遍,由于它们能够提供更高的灵活性和可扩展性。但是,这些系统需要处理大量的客户端请求。为了处理这些请求并提供对每个客户端的稳定和高效的服务,需要使用负载均衡算法。 以下是分布式系统中常用的负载均衡算法: &#x...
    99+
    2023-09-10
    负载均衡 java 数据库 运维 服务器
  • php负载均衡怎么实现
    在PHP中实现负载均衡的方式有多种,以下是其中几种常见的方法:1. 使用负载均衡器:负载均衡器是一个专门的服务器,它将请求分发给多个...
    99+
    2023-08-15
    php
  • mac负载均衡怎么实现
    在mac上实现负载均衡可以通过以下几种方式:1. 使用NAT(Network Address Translation)路由器:将多个...
    99+
    2023-09-01
    负载均衡
  • dubbo负载均衡怎么实现
    Dubbo负载均衡可以通过以下方式实现:1. 随机负载均衡(Random Load Balance):每次从可用的服务提供者中随机选...
    99+
    2023-10-20
    dubbo
  • CDN怎么实现负载均衡
    CDN(内容分发网络)可以通过多种方式实现负载均衡,其中一些常见的方法包括: DNS轮询:CDN服务提供商可以利用DNS轮询来分...
    99+
    2024-04-24
    CDN
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作