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)
相关推荐
架构师老Y13 分钟前
007、微服务架构设计与服务拆分策略
python·微服务·架构
鬼先生_sir13 分钟前
SpringCloud-Sentinel(熔断降级 & 流量控制)
spring·spring cloud·sentinel
沃尔威武3 小时前
Spring Cloud Gateway实战:微服务API网关从零到一
java·spring·微服务
斌味代码4 小时前
Java SpringBoot 微服务实战:企业级架构设计与性能调优完全指南
java·spring boot·微服务
好家伙VCC4 小时前
**发散创新:基于Go语言的服务网格实践与流量治理实战**在微服务架构日益复杂的今天,**服务网格(S
java·python·微服务·架构·golang
木子欢儿15 小时前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
Devin~Y15 小时前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
鬼先生_sir15 小时前
Spring Cloud 微服务监控实战:SkyWalking + Prometheus+Grafana 全栈解决方案
运维·spring cloud·grafana·prometheus·skywalking
文慧的科技江湖19 小时前
光储充协同的终极闭环:用SpringCloud微服务打造“发-储-充-用“智能能源网络 - 慧知开源充电桩管理平台
java·开发语言·spring cloud·微服务·能源·充电桩开源平台·慧知重卡开源充电桩平台
星河耀银海19 小时前
云原生核心特性:容器化、微服务与DevOps的通俗解读
微服务·云原生·devops