负载均衡(Load Balancing)是聊聊一种计算机网络和服务器管理技术
,旨在分配网络流量、种负载均请求或工作负载到多个服务器或资源,衡算以确保这些服务器能够高效、聊聊均匀地处理负载,种负载均并且能够提供更高的衡算性能
、可用性和可扩展性。聊聊
这篇文章,种负载均我们聊聊六种通用的衡算负载均衡算法
。
图片
1.轮询 (Round Robin)
轮询是聊聊指将请求按顺序轮流地分配到后端服务器上,服务器租用它均衡地对待后端的种负载均每一台服务器
,而不关心服务器实际的衡算连接数和当前的系统负载
。
图片
示例代码:
复制import java.util.List; import java.util.concurrent.atomic.AtomicInteger; publicclass RoundRobin { privatefinal List<String> servers; privatefinal AtomicInteger index = new AtomicInteger(0); public RoundRobin(List<String> servers) { this.servers = servers; } public String getServer() { int currentIndex = index.getAndIncrement() % servers.size(); return servers.get(currentIndex); } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16. 2.粘性轮询 (Sticky Round-Robin)
粘性轮询是聊聊标准轮询算法的一个变种,它通过记住客户端与服务实例的种负载均映射关系,确保来自同一客户端的衡算连续请求会被路由到同一个服务实例上。
它的建站模板特点是
:
会话保持:一旦客户端首次请求被分配到某个服务实例,后续请求会"粘"在这个实例上客户端识别
:通常基于客户端IP、会话ID或特定HTTP头来识别客户端故障转移:当目标服务实例不可用时,系统会重新分配客户端到其他可用实例
图片
示例代码:
复制import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; publicclass StickyRoundRobin { privatefinal List<String> servers; privatefinal AtomicInteger index = new AtomicInteger(0); privatefinal Map<String, String> clientToServer = new ConcurrentHashMap<>(); public StickyRoundRobin(List<String> servers) { this.servers = servers; } public String getServer(String clientId) { return clientToServer.computeIfAbsent(clientId, k -> servers.get(index.getAndIncrement() % servers.size())); } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19. 3.加权轮询 (Weighted Round-Robin)
加权轮询是标准轮询算法的增强版本,它允许管理员为每个服务实例分配不同的权重值
。权重越高的实例处理越多的请求,从而实现更精细的免费模板负载分配。
图片
它的特点是:
权重分配