Ribbon跟Nginx实现负载均衡的区别!

一,

Ribbon是在客户端去进行请求的分发,而Nginx则是服务器端的

下面是Ribbon的源码

public Server choose(ILoadBalancer lb, Object key) {

if (lb == null) {

log.warn("no load balancer");

return null;

} else {

Server server = null;

int count = 0;

while(true) {

if (server == null && count++ < 10) {

List<Server> reachableServers = lb.getReachableServers();

List<Server> allServers = lb.getAllServers();

int upCount = reachableServers.size();

int serverCount = allServers.size();

if (upCount != 0 && serverCount != 0) {

int nextServerIndex = this.incrementAndGetModulo(serverCount);

server = (Server)allServers.get(nextServerIndex);

if (server == null) {

Thread.yield();

} else {

if (server.isAlive() && server.isReadyToServe()) {

return server;

}

server = null;

}

continue;

}

log.warn("No up servers available from load balancer: " + lb);

return null;

}

if (count >= 10) {

log.warn("No available alive servers after 10 tries from load balancer: " + lb);

}

return server;

}

}

}

private int incrementAndGetModulo(int modulo) {

int current;

int next;

do {

current = this.nextServerCyclicCounter.get();

next = (current + 1) % modulo;

//while 自旋操作

} while(!this.nextServerCyclicCounter.compareAndSet(current, next));

return next;

}

二,工作原理

  • Ribbon:Ribbon 通过在客户端维护服务实例列表和选择算法来实现负载均衡。客户端应用程序通过 Ribbon 客户端负载均衡器来选择要发送请求的服务实例。
  • Nginx:Nginx 在服务器端实现负载均衡,它接收来自客户端的请求,并根据预先配置的负载均衡策略将请求分发给多个后端服务器。Nginx 可以根据请求的不同特征,如 IP 地址、HTTP 头部等,使用不同的负载均衡算法。

三,性能跟灵活性

  • Ribbon:Ribbon 作为客户端库集成到应用程序中,对于每个请求都需要在客户端进行负载均衡选择,可能会增加客户端的负载和延迟。
  • Nginx:Nginx 是一个高性能的反向代理服务器,通过在服务器端实现负载均衡,可以有效地减轻客户端的负载,并提供更好的性能和灵活性。

总结

总的来说,Ribbon 适用于微服务架构中服务消费方的负载均衡,而 Nginx 则适用于各种类型的应用程序和服务,提供了更灵活、高性能的负载均衡解决方案。

相关推荐
菠萝炒饭pineapple-boss31 分钟前
Nginx-Ingress-Controller自定义端口实现TCP/UDP转发
tcp/ip·nginx·udp·ingress
塑遂34 分钟前
Nginx+Tomcat负载均衡群集
nginx·tomcat·负载均衡
天空之城夢主2 小时前
LVS 负载均衡群集
运维·负载均衡·lvs
luopeng2076634362 小时前
onlyOffice通过nginx自定义前缀代理
运维·nginx
yangshuo12814 小时前
解决node项目nginx静态缓存导致项目重建后页面无变化问题
linux·nginx·缓存
JVM高并发4 小时前
Nginx使用 Lua 脚本调用外部 API 验证 Token
nginx·全栈
遗忘妳6 小时前
LVS 负载均衡群集
运维·负载均衡·lvs
执笔论英雄7 小时前
【大模型推理】PD分离场景下decoder负载均衡,如何选取decoder
运维·负载均衡
apple_pingwan7 小时前
@Schedule定时任务在负载均衡下防止任务多次执行
运维·负载均衡
皮皮林55117 小时前
负载均衡 LVS vs Nginx 对比!还傻傻分不清?
nginx