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 则适用于各种类型的应用程序和服务,提供了更灵活、高性能的负载均衡解决方案。

相关推荐
zhengxianyi5152 小时前
vue 首屏加载优化
前端·javascript·vue.js·nginx·gzip·expires·静态文件缓存
全栈工程师修炼指南2 小时前
Nginx | HTTP 反向代理:对上游服务端响应缓存流程浅析与配置实践
运维·网络协议·nginx·http·缓存
Justin_JGT6 小时前
flask+uwsgi+Nginx
python·nginx·flask
没有bug.的程序员6 小时前
Sentinel 流控原理深度解析:构建高可用微服务的底层架构
java·算法·微服务·云原生·架构·sentinel·负载均衡
淡笑沐白6 小时前
Nginx 详细教程
运维·nginx
ts9778 小时前
Nginx + Vue History 模式刷新 404 的完整排查与解决方案
运维·vue.js·nginx
微爱帮监所写信寄信8 小时前
微爱帮监狱写信寄信小程序DDoS防护:智能负载均衡架构
小程序·负载均衡·ddos
m0_537473491 天前
Nginx 生产环境平滑升级实战:从 1.24.0 到 1.28.0 的零宕机操作全记录
运维·nginx
小白不想白a1 天前
ELB--弹性负载均衡器
运维·负载均衡
BIBI20491 天前
Nginx 反向代理完全入门:从一个真实场景开始
nginx·部署·配置·问题解决·服务器运维·web 开发·web 服务器