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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘大米️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值