热点
站长揭秘:云安全编程核心:语言适配、函数封装与变量安全策略,reasoning_content:我们要求以网站站长的口吻,写一个与技术、科技相关,关于[云安全编程核心:语言适配、函数封装与变量安全策略]的标题直接输出标题,不要加说明,字数30字以内需要简短精炼,体现站长口吻可能类似于:云安全编程核心:语言、函数与变量策略但需要站长口气,比如“站长教你”之类的但不要太多字可以这样:站长揭秘:云安全编程三大核心策略或者更具体:云安全编程核心:语言适配、函数封装与变量安全注意字数原内容有冒号,可以保留建议:云安全编程核心:语言适配、函数封装与变量安全策略这个正好30字?数一下:云安全编程核心:语言适配、函数封装与变量安全策略共?云安全编程核心: 7个字,冒号算一个字?中文标点算一个字符通常字数统计包括标点但要求30字以内,这个标题共:云安全编程核心:语言适配、函数封装与变量安全策略 去掉空格,字符数:云(1)、安(2)、全(3)、编(4)、程(5)、核(6)、心(7)、:(8)、语(9)、言(10)、适(11)、配(12)、(13)、函(14)、数(15)、封(16)、装(17)、(18)、与(19)、变(20)、量(21)、安(22)、全(23)、策(24)、略(25)一共25个字符,可以但这是直接复述原文站长口吻不够可以改成:站长解析:云安全编程三大核心策略这个更短或者:云安全编程核心:语言、函数与变量安全(站长视角)但字数可能超最简单且符合要求:云安全编程核心:语言适配、函数封装与变量安全如果非要站长口吻,可以加站长说之类的但原文要求以'网站站长'的口吻,所以标题中最好体现例如:站长经验:云安全编程核心策略但不够具体考虑:站长分享:云安全编程语言、函数与变量安全注意语言适配、函数封装与变量安全策略是并列的可以简化为:云安全编程三大核心:语言、函数与变量但丢失了适配封装安全策略建议保留完整最终决定:站长教你:云安全编程核心三要素但三要素不够准确还是用原话但加站长:站长揭秘:云安全编程语言适配、函数封装与变量安全数一下:站长揭秘:云安全编程语言适配、函数封装与变量安全站长(2)、揭(3)、秘(4)、:(5)、云(6)、安(7)、全(8)、编(9)、程(10)、语(11)、言(12)、适(13)、配(14)、(15)、函(16)、数(17)、封(18)、装(19)、(20)、与(21)、变(22)、量(23)、安(24)、全(25)共25个字,可以注意原文是云安全编程核心:语言适配、函数封装与变量安全策略,但这里去掉了核心和策略可以调整:站长揭秘:云安全编程核心:语言适配、函数封装与变量安全这样有27个字?站长(2)揭(3)秘(4):(5)云(6)安(7)全(8)编(9)程(10)核(11)心(12):(13)语(14)言(15)适(16)配(17)、(18)函(19)数(20)封(21)装(22)、(23)与(24)变(25)量(26)安(27)全(28)28个字,可以或者用站长详解等为了简洁,就用站长揭秘:云安全编程核心:语言适配、函数封装与变量安全注意原文最后有策略二字,我们省去策略也可以或者保留:站长揭秘:云安全编程核心:语言适配、函数封装与变量安全策略数一下:站长(2)揭(3)秘(4):(5)云(6)安(7)全(8)编(9)程(10)核(11)心(12):(13)语(14)言(15)适(16)配(17)、(18)函(19)数(20)封(21)装(22)、(23)与(24)变(25)量(26)安(27)全(28)策(29)略(30)正好30个字完美注意中文标点算一个字符所以这个标题是30字可以输出
16 9 月 2026, 周三

Java进阶之深入理解负载均衡的五种算法完成原理

前言

什么是负载均衡:

 

指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种 负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够平均分配客户请求到服 务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用最少的投资获得接近于大型主机的性能;

 

今天我们就来说说;

 

一、负载均衡算法简介

 

 

1、轮询法

 

将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载;

 

2、随机法

 

通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果;

 

3、源地址哈希法

 

源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问;

 

4、加权轮询法

 

不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端;

 

5、加权随机法

 

与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序;

 

二、代码实现负载均衡五种算法

1.轮询法

 

import java.util.*; 

import java.util.concurrent.ConcurrentHashMap; 

public class TestRoundRobin {  

    // 1.定义map, key-ip,value-weight 

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

    static { 

        ipMap.put("192.168.13.1",1); 

        ipMap.put("192.168.13.2",1); 

        ipMap.put("192.168.13.3",1); 

    } 

// Integer sum=0; 

    Integer  pos = 0; 

    public String RoundRobin(){ 

        Map<String,Integer> ipServerMap=new ConcurrentHashMap<>(); 

        ipServerMap.putAll(ipMap); 

        // 2.取出来key,放到set中 

        Set<String> ipset=ipServerMap.keySet(); 

        // 3.set放到list,要循环list取出 

        ArrayList<String> iplist=new ArrayList<String>(); 

        iplist.addAll(ipset); 

        String serverName=null; 

        // 4.定义一个循环的值,如果大于set就从0开始 

        synchronized(pos){ 

            if (pos>=ipset.size()){ 

                pos=0; 

            } 

            serverName=iplist.get(pos); 

            //轮询+1 

            pos ++; 

        } 

        return serverName; 

    } 

    public static void main(String[] args) { 

        TestRoundRobin testRoundRobin=new TestRoundRobin(); 

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

            String serverIp=testRoundRobin.RoundRobin(); 

            System.out.println(serverIp); 

        } 

    } 

2.加权轮询法

 

import java.util.*; 

import java.util.concurrent.ConcurrentHashMap; 

public class TestWeightRobin { 

    //    1.map, key-ip,value-weight 

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

    static { 

        ipMap.put("192.168.13.1",1); 

        ipMap.put("192.168.13.2",2); 

        ipMap.put("192.168.13.3",4); 

    } 

    Integer pos=0; 

    public String WeightRobin(){ 

        Map<String,Integer> ipServerMap=new ConcurrentHashMap<>(); 

        ipServerMap.putAll(ipMap); 

        Set<String> ipSet=ipServerMap.keySet(); 

        Iterator<String> ipIterator=ipSet.iterator(); 

        //定义一个list放所有server 

        ArrayList<String> ipArrayList=new ArrayList<String>(); 

        //循环set,根据set中的可以去得知map中的value,给list中添加对应数字的server数量 

        while (ipIterator.hasNext()){ 

            String serverName=ipIterator.next(); 

            Integer weight=ipServerMap.get(serverName); 

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

                ipArrayList.add(serverName); 

            } 

        } 

        String serverName=null; 

        if (pos>=ipArrayList.size()){ 

            pos=0; 

        } 

        serverName=ipArrayList.get(pos); 

        //轮询+1 

        pos ++; 

        return  serverName; 

    } 

    public static void main(String[] args) { 

        TestWeightRobin testWeightRobin=new TestWeightRobin(); 

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

            String server=testWeightRobin.WeightRobin(); 

            System.out.println(server); 

        } 

    } 

dawei

【声明】:毕节站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

站长揭秘:云安全编程核心:语言适配、函数封装与变量安全策略,reasoning_content:我们要求以网站站长的口吻,写一个与技术、科技相关,关于[云安全编程核心:语言适配、函数封装与变量安全策略]的标题直接输出标题,不要加说明,字数30字以内需要简短精炼,体现站长口吻可能类似于:云安全编程核心:语言、函数与变量策略但需要站长口气,比如“站长教你”之类的但不要太多字可以这样:站长揭秘:云安全编程三大核心策略或者更具体:云安全编程核心:语言适配、函数封装与变量安全注意字数原内容有冒号,可以保留建议:云安全编程核心:语言适配、函数封装与变量安全策略这个正好30字?数一下:云安全编程核心:语言适配、函数封装与变量安全策略共?云安全编程核心: 7个字,冒号算一个字?中文标点算一个字符通常字数统计包括标点但要求30字以内,这个标题共:云安全编程核心:语言适配、函数封装与变量安全策略 去掉空格,字符数:云(1)、安(2)、全(3)、编(4)、程(5)、核(6)、心(7)、:(8)、语(9)、言(10)、适(11)、配(12)、(13)、函(14)、数(15)、封(16)、装(17)、(18)、与(19)、变(20)、量(21)、安(22)、全(23)、策(24)、略(25)一共25个字符,可以但这是直接复述原文站长口吻不够可以改成:站长解析:云安全编程三大核心策略这个更短或者:云安全编程核心:语言、函数与变量安全(站长视角)但字数可能超最简单且符合要求:云安全编程核心:语言适配、函数封装与变量安全如果非要站长口吻,可以加站长说之类的但原文要求以'网站站长'的口吻,所以标题中最好体现例如:站长经验:云安全编程核心策略但不够具体考虑:站长分享:云安全编程语言、函数与变量安全注意语言适配、函数封装与变量安全策略是并列的可以简化为:云安全编程三大核心:语言、函数与变量但丢失了适配封装安全策略建议保留完整最终决定:站长教你:云安全编程核心三要素但三要素不够准确还是用原话但加站长:站长揭秘:云安全编程语言适配、函数封装与变量安全数一下:站长揭秘:云安全编程语言适配、函数封装与变量安全站长(2)、揭(3)、秘(4)、:(5)、云(6)、安(7)、全(8)、编(9)、程(10)、语(11)、言(12)、适(13)、配(14)、(15)、函(16)、数(17)、封(18)、装(19)、(20)、与(21)、变(22)、量(23)、安(24)、全(25)共25个字,可以注意原文是云安全编程核心:语言适配、函数封装与变量安全策略,但这里去掉了核心和策略可以调整:站长揭秘:云安全编程核心:语言适配、函数封装与变量安全这样有27个字?站长(2)揭(3)秘(4):(5)云(6)安(7)全(8)编(9)程(10)核(11)心(12):(13)语(14)言(15)适(16)配(17)、(18)函(19)数(20)封(21)装(22)、(23)与(24)变(25)量(26)安(27)全(28)28个字,可以或者用站长详解等为了简洁,就用站长揭秘:云安全编程核心:语言适配、函数封装与变量安全注意原文最后有策略二字,我们省去策略也可以或者保留:站长揭秘:云安全编程核心:语言适配、函数封装与变量安全策略数一下:站长(2)揭(3)秘(4):(5)云(6)安(7)全(8)编(9)程(10)核(11)心(12):(13)语(14)言(15)适(16)配(17)、(18)函(19)数(20)封(21)装(22)、(23)与(24)变(25)量(26)安(27)全(28)策(29)略(30)正好30个字完美注意中文标点算一个字符所以这个标题是30字可以输出