java 多线程负载均衡_Java加权负载均衡策略

本文介绍了Java实现加权轮询负载均衡策略,通过为后端集群的每台机器分配权重,根据权重分配流量,以实现流量差异化。在示例中,创建了一个HashMap存储IP和权重,并通过多线程运行展示加权轮询的效果。
摘要由CSDN通过智能技术生成

加权轮询

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

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 serverWeightMap = new HashMap();

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 serverMap = new HashMap();

serverMap.putAll(serverWeightMap);

// 取得Ip地址List

Set keySet = serverMap.keySet();

Iterator iterator = keySet.iterator();

// 根据权重组成iplist

List serverList = new ArrayList();

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值