Java加权负载均衡策略

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Java加权负载均衡策略
加权轮询

后端集群每台机器都分配一个权重,权重高得会承担更多的流量,相反权重低的分配的流量也会少,这种策略允许后端集群机器配置差异化

java实现
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.stereotype.Controller;
@Controller
public class IpMapController extends LogBaseController implements Runnable {
   private static Integer pos = 0;
   // 待scp的Ip列表,Key代表Ip,Value代表该Ip的权重
   public static HashMap<String, Integer> serverWeightMap = new HashMap<String, Integer>();
   static {
    serverWeightMap.put("127.0.0.1", 1);
    serverWeightMap.put("127.0.0.2", 1);
    serverWeightMap.put("127.0.0.3", 1);
    serverWeightMap.put("127.0.0.4", 1);
   }
   public void run() {
    // 重建一个Map,避免服务器的上下线导致的并发问题
    Map<String, Integer> serverMap = new HashMap<String, Integer>();
    serverMap.putAll(serverWeightMap);
    // 取得Ip地址List
    Set<String> keySet = serverMap.keySet();
    Iterator<String> iterator = keySet.iterator();
    // 根据权重组成iplist
    List<String> serverList = new ArrayList<String>();
    while (iterator.hasNext()) {
      String server = iterator.next();
      int weight = serverMap.get(server);
      for (int i = 0; i < weight; i++)
        serverList.add(server);
    }
    String server = null;
    synchronized (pos) {
      if (pos >= keySet.size()){
        pos = 0;
      }
      server = serverList.get(pos);
      System.out.println("server:" + server + ",pos=" + pos);
      pos++;
    }
   }
   public static void main(String[] args) {
     IpMapController ipRunnable = new IpMapController();
    for (int i = 0; i <= 10; i++) {
      System.out.println("t" + i);
      new Thread(ipRunnable).start();
    }
   }
}

多线程输出结果
t0
t1
t2
t3
t4
t5
t6
server:127.0.0.4,pos=0
server:127.0.0.3,pos=1
server:127.0.0.2,pos=2
server:127.0.0.2,pos=2
t7
server:127.0.0.4,pos=0
server:127.0.0.3,pos=1
t8
server:127.0.0.2,pos=2
server:127.0.0.2,pos=2
t9
server:127.0.0.4,pos=0
t10
server:127.0.0.3,pos=1
server:127.0.0.2,pos=2


相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
11小时前
|
负载均衡 Java 测试技术
性能测试与负载均衡:保证Java应用的稳定性
性能测试与负载均衡:保证Java应用的稳定性
|
1天前
|
消息中间件 负载均衡 算法
【RocketMQ系列十二】RocketMQ集群核心概念之主从复制&生产者负载均衡策略&消费者负载均衡策略
【RocketMQ系列十二】RocketMQ集群核心概念之主从复制&生产者负载均衡策略&消费者负载均衡策略
10 2
|
2天前
|
Java 调度 开发者
Java定时器的使用方法与调度策略
Java定时器的使用方法与调度策略
|
2天前
|
存储 缓存 Prometheus
Java中数据缓存的优化与实现策略
Java中数据缓存的优化与实现策略
|
2天前
|
负载均衡 算法 Java
实现高可用和可扩展的负载均衡系统的Java方法
实现高可用和可扩展的负载均衡系统的Java方法
|
2天前
|
消息中间件 负载均衡 Java
Java中设计和优化消息传递系统的策略
Java中设计和优化消息传递系统的策略
|
2天前
|
存储 监控 算法
Java内存管理策略与性能调优
Java内存管理策略与性能调优
|
3天前
|
缓存 算法 安全
Java中的数据结构与算法优化策略
Java中的数据结构与算法优化策略
|
3天前
|
SQL 监控 安全
Java Web应用的安全防护与攻防策略
Java Web应用的安全防护与攻防策略
|
3天前
|
缓存 监控 算法
构建高性能Java Web应用的技术策略
构建高性能Java Web应用的技术策略