Ribbon:Spring Cloud负载均衡与服务调用组件

Ribbon:Spring Cloud负载均衡与服务调用组件

问题总结

  1. 负载均衡?
  2. Ribbon实现服务调用?
  3. Ribbon实现负载均衡?
  4. 切换负载均衡策略?
  5. 定制负载均衡策略?

问题答案

  1. 负载均衡

    负载均衡(Load Balance),将用户的请求平分到多个服务器上运行,以扩展服务器带宽、增强数据处理能力、增加吞吐量、提高网络的可用性和灵活性的目的。

  • 服务端负载均衡

  1. 服务端负载均衡:在客户端和服务端之间建立一个负载均衡服务器(硬件设备:F5,软件:Nginx)。负载均衡服务器维护了一份可用服务端清单,然后通过心跳机制来删除故障的服务端节点,以保证清单中的所有服务节点都是可以正常访问。

  2. 客户端发送请求,全部交给负载均衡服务器(轮询、随机),选择一个服务端进行转发。、

  3. 特点:

    (1)需要建立一个独立的负载均衡服务器。

    (2)负载均衡在客户端发送请求后进行,客户端不知道那个服务器提供服务。

    (3)可用服务端清单存储于负载均衡服务器中。

    • 客户端负载均衡

    1. 客户端负载均衡是将负载均衡逻辑以代码的形式封装到客户端上。客户端从服务注册中心获取服务端列表,并通过(轮询、随机)将请求分配给多个服务提供者。
    • 服务端负载均衡VS客户端负载均衡
    不同点 服务端负载均衡 客户端负载均衡
    是否需要建立负载均衡服务器
    是否需要服务注册中心
    可用服务清单存储位置 负载均衡服务器上(nginx) 服务注册中心
    负载均衡的时机 发送请求,再进行负载均衡 先负载均衡,再发送请求
    客户端是否了解服务提供方消息

  1. Ribbon实现服务调用
    • Ribbon可以与RestTemplate配合使用,以实现微服务之间的调用。
    • RestTemplate是一个用于消费第三方的请求框架,实现了对HTTP请求的封装。例如HEAD、GET、POST、PUT、DELETE等类型的HTTP请求,分别对应RestTemplate中的headForHeaders()、getForObject()、postForObject()、put()、delete()方法。

  1. Ribbon实现负载均衡

Spring Cloud Ribbon提供了一个IRule接口,用于定义负载均衡策略。

序号 实现类 负载均衡策略
1 RoundRobinRule 排序轮询
2 RandomRule 随机选取
3 RetryRule 先轮询,如果获取到的服务实例为null或已经失效,则再指定时间内不断地进行轮询重试,超过指定时间没有获取到则返回null
4 WeighedResponseTimeRule RoundRobinRule的一个子类,对父类进行了扩展。根据平均响应时间,计算所以服务实例的权重,响应时间和服务实例的权重、选中概率成反比。刚启动,统计信息不足,使用轮询
5 BestAvailableRule 先过滤掉故障或者失效的服务实例,选择并发量最小的服务实例
6 AvailabilityFilteringRule 同BestAvailableRule
7 ZoneAvoidanceRule 默认,根据服务所在区域的性能和服务的可用性,来选择服务实例(轮询)

  1. 切换负载均衡策略
  • 再客户端的配置类中,将IRule的其他实现类注入到容器中即可。

  1. 定制负载均衡策略
  • 类似于4
posted @ 2024-01-02 18:02  hoodoo-  阅读(20)  评论(0编辑  收藏  举报