当前位置:首页 > 科技  > 软件

深入剖析Netflix Ribbon:分布式微服务架构的负载均衡神器

来源: 责编: 时间:2023-11-01 09:18:55 388观看
导读作者 | 波哥审校 | 重楼在现代分布式微服务架构中,负载均衡是保证系统高可用、高性能的关键组件之一。Netflix Ribbon作为Netflix开源的负载均衡库,为微服务架构提供了强大的负载均衡能力,极大地促进了微服务间的通信和

作者 | 波哥vb928资讯网——每日最新资讯28at.com

审校 | 重楼vb928资讯网——每日最新资讯28at.com

在现代分布式微服务架构中,负载均衡是保证系统高可用、高性能的关键组件之一。Netflix Ribbon作为Netflix开源的负载均衡库,为微服务架构提供了强大的负载均衡能力,极大地促进了微服务间的通信和协作。本篇笔者将深入剖析Netflix Ribbon的底层实现原理,带您揭开其神秘面纱。vb928资讯网——每日最新资讯28at.com

Netflix Ribbon是Netflix开源的负载均衡库,它可以无缝集成到微服务架构中,提供了多种负载均衡策略和丰富的配置选项,帮助开发者实现高性能、高可用的服务调用。先来看下Ribbond 架构:vb928资讯网——每日最新资讯28at.com

1.Ribbon的架构

Ribbon的架构主要由以下几个核心组件构成:vb928资讯网——每日最新资讯28at.com

  • IClientConfig:配置接口,用于获取配置信息,如连接超时、读取超时等。
  • IRule:负载均衡规则接口,用于决定请求应该转发到哪个服务实例。

vb928资讯网——每日最新资讯28at.com

其中vb928资讯网——每日最新资讯28at.com

  • choose(Object key): 从所有服务实例中选择一个,根据具体的负载均衡规则,返回选定的服务实例。
  • setLoadBalancer(ILoadBalancer lb): 设置与负载均衡规则相关的负载均衡器。
  • getLoadBalancer(): 获取与负载均衡规则相关联的负载均衡器。

IRule 接口提供了选择服务实例的方法,具体选择哪个服务实例取决于实现该接口的负载均衡规则。这个规则可以是轮询、随机、加权轮询等不同的策略。使用示例如下:vb928资讯网——每日最新资讯28at.com

vb928资讯网——每日最新资讯28at.com

当然我们一般使用是和Spring/SpringBoot整合使用,只需要在配置中加以配置即可。如果想实现自己的选择机制,则只需要实现IRule,并完成使用配置即可。vb928资讯网——每日最新资讯28at.com

  • IPing:用于检测服务实例的存活状态。

主要有两种实现方式:PingUrl 和 PingConstant
vb928资讯网——每日最新资讯28at.com

PingUrl 实现通过向服务实例发送HTTP请求来检查其健康状态。默认情况下,它会向服务实例的 / 路径发送 GET 请求来检查服务实例是否存活。vb928资讯网——每日最新资讯28at.com

vb928资讯网——每日最新资讯28at.com

PingConstant 实现则更简单粗暴,无论什么情况下都返回 true,表示服务实例一直存活vb928资讯网——每日最新资讯28at.com

vb928资讯网——每日最新资讯28at.com

  • ServerList:用于获取所有可用的服务实例列表。

接口有两个方法:vb928资讯网——每日最新资讯28at.com

  1. getInitialListOfServers(): 用于获取初始化时所有可用的服务实例列表。
  2. getUpdatedListOfServers(): 用于获取更新后的所有服务实例列表,包括动态刷新的列表。

ServerList 接口的实现是由具体的服务发现组件完成的。在 Netflix Ribbon 中,常用的服务发现组件是 Netflix Eureka,它可以通过 Eureka Server 获取服务实例信息vb928资讯网——每日最新资讯28at.com

例如,Netflix Ribbon 提供了 DiscoveryEnabledNIWSServerList,它是通过 Eureka 获取服务实例的一个实现类。这个实现类会调用 Eureka Client 获取服务实例的信息,然后将服务实例封装成 Ribbon 的 Server 对象。vb928资讯网——每日最新资讯28at.com

  • ServerListFilter:用于对服务实例列表进行过滤,以适应特定需求。

它只有getFilteredListOfServers这个方法,用于过滤服务实例列表,返回过滤后的服务实例列表。vb928资讯网——每日最新资讯28at.com

ServerListFilter允许我们自定义过滤规则,以决定负载均衡器最终选择的服务实例。我们可以根据自己的需求实现这个接口,定义自己的过滤规则。这个过程可以包括排除一些不符合条件的服务实例,或者根据特定标准重新排序服务实例列表等。vb928资讯网——每日最新资讯28at.com

Netflix Ribbon 中,有一些内置的过滤器,例如 ZonePreferenceServerListFilter、ZoneAffinityServerListFilter 等。这些过滤器基于服务实例所在的区域(Zone)来进行服务实例的过滤和排序,例如:vb928资讯网——每日最新资讯28at.com

vb928资讯网——每日最新资讯28at.com

2.Ribbon的负载均衡流程

下面详细介绍下Ribbon的负载均衡流程:vb928资讯网——每日最新资讯28at.com

  • 获取服务实例列表:Ribbon通过ServerList获取可用的服务实例列表。
  • 过滤服务实例:Ribbon会通过ServerListFilter对服务实例列表进行过滤,可能会过滤掉一些不符合特定条件的实例。
  • 选择负载均衡策略:根据IRule选择合适的负载均衡策略,如轮询、随机、加权轮询等。这里的IRule可以是我们自己实现的规则。
  • 选择目标服务实例:根据负载均衡策略,选择一个目标服务实例。
  • 执行请求:将请求发送到选择的服务实例上。

3. Ribbon具体使用

接下来,我们详细说明下如何在项目中使用Ribbonvb928资讯网——每日最新资讯28at.com

  • 首先,我们需要在Spring配置文件中初始化Ribbon(当然maven的配置各位老铁就自己去配置了)

vb928资讯网——每日最新资讯28at.com

在上述配置中,我们通过ribbonRule指定了负载均衡规则,这里使用了AvailabilityFilteringRule,它会根据服务实例的状态来判断是否选择该实例。而ribbonPing则用于设置服务实例的健康检查策略。vb928资讯网——每日最新资讯28at.com

  • 发起服务调用

接下来,我们通过RestTemplate来发起服务调用:vb928资讯网——每日最新资讯28at.com

vb928资讯网——每日最新资讯28at.com

在这段代码中,我们通过RestTemplate发起了对名为SERVICE-PROVIDER的服务的调用。vb928资讯网——每日最新资讯28at.com

  • 实现负载均衡

通过上述配置和代码,Ribbon将会根据我们指定的负载均衡规则和健康检查策略来选择合适的服务实例,从而实现负载均衡。vb928资讯网——每日最新资讯28at.com

本篇对Netflix Ribbon的底层实现原理进行了简要介绍,涵盖了其核心组件、架构、负载均衡流程以及实现原理的基本概念。深入理解Netflix Ribbon对于构建高性能、高可用的微服务架构至关重要,希望能对您有所帮助。vb928资讯网——每日最新资讯28at.com

作者介绍

波哥,互联行业从业10余年,先后担任项目总监及架构师。目前专攻技术,喜欢研究技术原理。技术全面,主攻Java,精通JVM底层机制及Spring全家桶底层框架原理,熟练掌握当前主流的中间件、服务网格等技术原理。vb928资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16285-0.html深入剖析Netflix Ribbon:分布式微服务架构的负载均衡神器

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Springboot中如何自定义Web容器的运行参数

下一篇: 掌握Spring事件监听器的内部逻辑与实现

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的“在线鉴别”,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就“胡锡进炒股是否知道认真报道”展开讨论。有
  • 苹果公司要求三星和LG Display生产「无边框」OLED iPhone显示屏

    据 The Elec 报道,苹果已要求其供应商为未来的 iPhone 型号开发「无边框」OLED 显示面板。苹果显然已要求三星和 LG Display 开发新的 OLED 显示面
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
  • 与兆芯合作 联想推出全新旗舰版笔记本电脑开天N7系列

    联想与兆芯合作推出全新联想旗舰版笔记本电脑开天 N7系列。这个系列采用兆芯KX-6640MA处理器平台,KX-6640MA 处理器是采用了陆家嘴架构,16nm 工艺,4 核 4 线
Top