SpringCloud之Ribbon基础认识-服务负载均衡

0、Ribbon基本认识

  1. Spring Cloud Ribbon 是基于 Netflix Ribbon实现的一套客户端 负载均衡的工具。

  2. Ribbon 主要功能是提供客户端负载均衡算法和服务调用

  3. Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。

  4. Ribbon 会基于某种规则(如简单轮询,随机连接等)去连接指定服务

  5. 程序员很容易使用 Ribbon的负载均衡算法实现负载均衡

  6. 一句话**:** Ribbon: 负载均衡+RestTemplate 调用

官网地址**: https://github.com/Netflix/ribbon**

Ribbon 目前进入维护模式, 未来替换方案 是 Spring Cloud LoadBalancer

1、LB(Load Balance)

  1. 集中式 LB
    • 即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方;
    • LB(Load Balance 负载均衡)
  2. 进程内 LB
    • 将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些服务地址可用,然后再从这些地址中选择出一个合适的服务地址。
    • Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址
    • 取出来的服务存入jvm并且​定时更新​:默认每30秒(可配置)重新拉取列表,保证数据新鲜度,如果取出来的服务地址有不能用的也会自动选择其他的能够使用的

2、Ribbon机制和架构

  1. 先选择 EurekaServer,它优先选择在同一个区域内负载较少的 server
  2. 再根据用户指定的策略,在从 server 取到的服务注册列表中选择一个地址
  3. Ribbon 提供了多种策略∶ 比如轮询、随机和根据响应时间加权。

3、Ribbon常见负载算法

策略名 描述 特点
BestAvailableRule 选择一个最小的并发请求的server。逐个考察Server,如果Server被tripped(跳闸)不能用了,则忽略,再选择其中ActiveRequestsCount最小的server。 ​低延迟优先​​,适合对响应速度敏感的场景。但是一个一个的看,对服务方来说有一点的资源开销。
AvailabilityFilteringRule 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections超过配置的阈值)。 ​高可用性​​,自动排除故障或过载节点。
WeightedResponseTimeRule 根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。 ​动态权重​​,优先选择响应快的节点。
RetryRule 对选定的负载均衡策略机上重试机制。在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server,达到一定阈值则不再尝试。 ​容错性强​​,适合临时性故障恢复。
RoundRobinRule 轮询index,选择index对应位置的server。 ​公平分配​​,按顺序轮询,简单均衡但无视节点状态。Ribbon默认是这个
RandomRule 随机选择一个server。在index上随机,选择index对应位置的server。 ​无状态随机​​,适合低复杂度场景。
ZoneAvoidanceRule 复合判断server所在区域的性能和server的可用性选择性server。 ​区域感知​​,兼顾性能和跨区域容灾,各方面综合考量。

举例配置(Config)如下 :

复制代码
@Configuration
public class RibbonRule {
    //配置注入自己的负载均衡算法
    @Bean
    public IRule myRibbonRule() {
        //这里返回的是RandomRule,当然也可以自己指定
        return new RandomRule();
    }
}

在启动类上加如下注解:

复制代码
//指定Ribbon的负载均衡算法
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class)
相关推荐
fanly111 天前
Surging AI Agent 完整产品介绍
微服务·microservice
吃饱了得干活4 天前
Spring Cloud Gateway 微服务网关:路由、断言、过滤器
java·spring cloud
蝎子莱莱爱打怪8 天前
XZLL-IM干货系列 04|Netty 长连接实战:Pipeline 怎么排、心跳怎么跳、连接怎么管
后端·微服务·面试
SamDeepThinking9 天前
Java微服务练习方式
java·后端·微服务
米丘12 天前
微前端之 Web Components 完全指南
微服务·html
霸道流氓气质15 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
慧一居士15 天前
Feign的GET请求如何传递对象参数?
java·spring cloud
我登哥MVP15 天前
SpringCloud Alibaba 核心组件解析:服务链路追踪
java·spring boot·后端·spring·spring cloud·java-ee·maven
慧一居士15 天前
SpringCloud 微服务Feigin 用的完整调用端和被调用的示例
java·spring cloud
霸道流氓气质15 天前
Spring Boot 微服务性能优化完全指南
spring boot·微服务·性能优化