前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >终于有人放大招把Ribbon的核心工作原理给一次性讲清楚了

终于有人放大招把Ribbon的核心工作原理给一次性讲清楚了

作者头像
愿天堂没有BUG
发布2022-10-28 15:13:32
7960
发布2022-10-28 15:13:32
举报
文章被收录于专栏:愿天堂没有BUG(公众号同名)

本篇文章即将介绍Ribbon的核心工作原理。

Ribbon的核心工作原理

下面我们从Ribbon的负载均衡核心组件、负载均衡策略、Ribbon的工作流程等方面讲解Ribbon的核心工作原理。

Ribbon的负载均衡核心组件

● Rule:用于从服务列表中选取服务的逻辑组件。

● Ping:在后台运行的确保服务可用性的组件。

● ServerList:服务列表,它可以是静态的也可以是动态的,如果是动态的( DynamicServer-ListLoadBalancer),将会启动一个后台线程定期刷新和过滤服务列表。

这些组件可以使用程序进行配置,也可以使用客户端配置属性进行 配 置 , 以 下 是 配 置 文 件 中 相 关 的 属 性 名 ( 注 意 带 上 前 缀<clientName>.<nameSpace>.):

● NFLoadBalancerClassName:配置ILoadBalancer的实现类。

● NFLoadBalancerPingClassName:配置IPing的实现类。

● NFLoadBalancerRuleClassName:配置IRule的实现类。

● NIWSServerListClassName:配置ServerList的实现类。

● NIWSServerListFilterClassName:配置ServerListFilter的实现类。

例如,将backend-service后端服务配置使用自带的RetryRule进行路由转发,下面是配置详情:

在我们的应用程序中Netflix为每个Ribbon客户端名称创建一个ApplicationContext,用于客户端自定义一些组件实现,包括:

● IClientConfig:为客户端或者负载均衡器保存客户端配置信息。

● ILoadBalancer:代表一个软件的负载均衡接口。

● ServerList:定义了如何获取可供选择的服务列表。

● IRule:描述负载均衡策略。● IPing:说明如何执行服务器的周期性Ping。

Ribbon的负载均衡策略

Ribbon客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件,下面是用到的一些负载均衡策略。

● 简单轮询负载均衡(RoundRobinRule):这是最简单的通过循环法选择服务的负载均衡策略。它通常用作默认策略或更高级策略的后备策略。

● 可用服务过滤负载均衡(AvailabilityFilteringRule):这个策略会跳过断路中的服务,或者高并发连接数的服务。默认情况下,如果RestClient最近三次连接均失败,则认为该服务实例断路,该实例会保持断路状态30s后进入回路关闭状态,如果此时仍然连接失败,那么等待进入关闭状态的时间会随失败次数的增加指数级增长。

● 加权响应时间负载均衡(WeightedResponseTimeRule):这个策略会为每一个服务按响应时长分配权重,响应时间越长权重越低,权重代表了该服务会被选中的概率。

● 区域感知负载均衡:这个策略基于区域同源关系(ZoneAffinity,也就是更倾向于选择发出调用的服务所在的托管区域内的服务,这样可以降低延迟,节省成本)选择目标服务 实 例 。Ribbon 使 用 ZoneAvoidancePredicate 和AvailabilityPredicate来判断是否选择某个后端服务,前者使用一个区域为单位考察可用性,不可用的区域会被丢弃,从剩下的区域中选择可用的服务,AvailabilityPredicate用于过滤掉连接数过多的服务。

● 重试负载均衡(RetryRule):当请求分发到集群中的一个服务后,请求连接失败或者响应超时,会重新请求以获取可用服务,可以选择重试当前服务节点,也可以改换其他节点。

● 随机负载均衡(RandomRule):在现有服务之间随机分配流量的一种负载均衡策略。

Ribbon的工作流程

下图是Ribbon的工作流程简图,我们在源码分析中会进一步分析,了解Ribbon是如何拦截HTTP请求进行负载均衡的。

Ribbon首先会拦截所有标注@LoadBalance注解的RestTemplate,然 后 将 Ribbon 默 认 的 拦 截 器 LoadBalancerInterceptor 添 加 到RestTemplate的执行逻辑中,这样每次执行RestTemplate时都会拦截HTTP请求。当有请求发生时,Ribbon默认会创建一个IloadBalancer实例。ILoadBalance在RibbonClientConfiguration中完成自动配置,它可以实现定制化的IRule、IPing、ServerList。当发生HTTP请求时,IloadBalancer在服务集群中选择一个服务,然后发送请求到后端服务。

本文给大家讲解的内容是Ribbon的核心工作原理

  1. 下篇文章给大家讲解的内容是Ribbon源码解析
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 愿天堂没有BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ribbon的核心工作原理
  • 本文给大家讲解的内容是Ribbon的核心工作原理
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档