『互联网架构』软件架构-深入理解Ribbon(93)

栏目: Java · 发布时间: 5年前

内容简介:在国内dubbo还是使用比较多的,毕竟是阿里很早之前都开源的框架,但是dubbo的生态相对来说已经赶不上springclud了,springclud在国外应用的比较多,大家基本都是dubbo的,springclud这一系列初心就是说说最重要的知识点,有老铁联系我,说内容太简单了,想要多学点源码,多学点项目实战的应用。其实源码怎么说呢?我的建议先把springclud基础的知识点都掌握了,最好有个实战的项目应用,在去学源码。基础知识都不了解直接怼源码,这种学习方法绝对是有问题的。就像上节Eureka,只会说看

在国内dubbo还是使用比较多的,毕竟是阿里很早之前都开源的框架,但是dubbo的生态相对来说已经赶不上springclud了,springclud在国外应用的比较多,大家基本都是dubbo的,springclud这一系列初心就是说说最重要的知识点,有老铁联系我,说内容太简单了,想要多学点源码,多学点项目实战的应用。其实源码怎么说呢?我的建议先把springclud基础的知识点都掌握了,最好有个实战的项目应用,在去学源码。基础知识都不了解直接怼源码,这种学习方法绝对是有问题的。就像上节Eureka,只会说看源码的方法。看最核心的东西,不会全部看的。在工作中运用了,熟悉了在详细的根据核心的东西的思路来看源码。说了这么多,今天说说Ribbon。

源码:https://github.com/limingios/netFuture/tree/master/源码/『互联网架构』软件架构-深入理解Ribbon(93)/

『互联网架构』软件架构-深入理解Ribbon(93)

(一)Ribbon客户端负载均衡介绍及基本使用

  • 服务端的负载均衡

    > nginx本身就是服务,nginx做负载,就是服务端做负载均衡。dubbo就是服务端的负载均衡。

『互联网架构』软件架构-深入理解Ribbon(93)

  • 客户端侧负载均衡

    > 针对服务端的就是调用方,客户端。客户端的负载均衡

    > 一个order项目,一个user项目,order调用方里面有个小的模块,知道所有用户中心的服务列表。然后根据服务列表获取负载均衡。

『互联网架构』软件架构-深入理解Ribbon(93)

(二)Ribbon基本概念及使用

Ribbon是一个实现了客户端负载均衡的组件,Netflix(美国是一家在线影片租赁提供商,开源了很多比较牛X的技术)开源的,其主要功能是提供【客户端侧负载均衡】。

Ribbon客户端组件提供一系列完善的配置项,如连接超时,重试等配置。简单来说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中列出负载均衡后面所有的机器,Ribbon会自动的帮助你基于某种规则(轮询,随机等)去连接这些机器,我们也可以使用自定义Ribbon实现自己的负载均衡算法。

『互联网架构』软件架构-深入理解Ribbon(93)

『互联网架构』软件架构-深入理解Ribbon(93)

(三)Eureka集成Ribbon架构图

之前说 eureka的时候,eureka有server和client,在下图中order和user都是client,eureka server是server端,order和user都注册到eureka的服务中心。在order中有ribbon。其实ribbon就是嵌入在client中的一个小组件。ribbon会到eureka server上获取到可用服务的列表,如user service的所有服务,拿到列表后基于自身的复杂均衡的策略,选一台user service的服务进行调用。也级㐊说ribbon正常的情况下是跟eureka在一起的。

『互联网架构』软件架构-深入理解Ribbon(93)

(四)Eureka集成Ribbon-回顾

  • 增加Ribbon依赖
  • 本来需要引入spring-cloud-starter-netflix-ribbon,但是由于spring-cloud-starter-netflix-eureka-client中,已经包含了ribbon的包了,所以实际上我们不需要显示的引入ribbon的包就可以直接使用它
  • 负载均衡代码

『互联网架构』软件架构-深入理解Ribbon(93)

  • 源码演示

    > 三个项目一个eurekaserver,一个order-consumber-berservice,一个order-provider-berservice,

『互联网架构』软件架构-深入理解Ribbon(93)

启动:eurekaserver,端口8761

『互联网架构』软件架构-深入理解Ribbon(93)

『互联网架构』软件架构-深入理解Ribbon(93)

启动:order-service,端口8011,eureka增加了一个服务

『互联网架构』软件架构-深入理解Ribbon(93)

『互联网架构』软件架构-深入理解Ribbon(93)

启动:user-service,端口8001,eureka增加了一个服务

『互联网架构』软件架构-深入理解Ribbon(93)

启动:user-service,端口8002,eureka增加了一个服务

『互联网架构』软件架构-深入理解Ribbon(93)

  • 访问order查看走向

    > http://localhost:8011/user/getIpAndPort 这个方法是order的方法

『互联网架构』软件架构-深入理解Ribbon(93)

发现每次刷新访问打印结果的端口都不一样:8001,8002。如果搞过nginx的会发现这不是轮询的策略啊,默认情况下ribbon的复杂均衡的策略是轮询的方式。

『互联网架构』软件架构-深入理解Ribbon(93)

『互联网架构』软件架构-深入理解Ribbon(93)

(五)使用Ribbon配置类实现指定微服务负载均衡策略

在spring cloud官方文档中是这样说的,如果要自定义Ribbon配置, 则需要把这个配置类放在@SpringBootApplication扫不到的包中(@ComponentScan),因为如果可以扫到自定义的Ribbon配置类的话,那么会对所有的Riboon都生效。

  • 配置步骤
  1. 独立新建包,并创建ribbon配置类,例如:com.tuling.cloud.config.
  2. RibbonConfiguration 创建一个空类ProviderUserConfiguration配置服务的ribbon负载均衡策略

见示例:05-ms-consumer-order-ribbon-customizing

『互联网架构』软件架构-深入理解Ribbon(93)

访问定制化策略的order,随机的。每次刷新都是随机的。

http://localhost:8010/user/getIpAndPort

『互联网架构』软件架构-深入理解Ribbon(93)

默认负载均衡策略与自定义负载均衡策略同时使用

1. 再启动两个用户微服务 serviceid和port不同

2. 请求microservice-user微服务,会使用自定义的CustomRibbonConfig 作为负载均衡策略(随机)

3. 请求microservice-user-2微服务,会使用默认的负载均衡策略(轮询)

  • 上边这种写死的方式很土鳖,使用Ribbon属性配置实现指定微服务负载均衡策略

    1.在订单微服务的application.yml中增加配置

    『互联网架构』软件架构-深入理解Ribbon(93)

2.见示例:05-ms-consumer-order-ribbon-customizing-properties

『互联网架构』软件架构-深入理解Ribbon(93)

3.Ribbon配置的优先级:属性配置 > JAVA配置>Netflix Ribbon默认配置

『互联网架构』软件架构-深入理解Ribbon(93)

(六)Ribbon脱离Eureka独立使用

到现在为止,我们看到的Ribbon负载均衡后的后端服务地址,是从EurekaServer中获取的可用微服务列表,那么现在如果我不需要使用Eureka,不从Eureka中获取微服务列表,而是Ribbon自己独立配置可用微服务列表,要如何来做呢?

  • 订单微服务application配置中增加

『互联网架构』软件架构-深入理解Ribbon(93)

  • .ribbon.listOfServers:可用微服务列表

    见示例: 05-ms-consumer-order-ribbon-without-eureka

『互联网架构』软件架构-深入理解Ribbon(93)

PS:Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法。像nginx可以使用负载均衡分配流量,ribbon为客户端提供负载均衡,dubbo服务调用里的负载均衡等等,很多地方都使用到了负载均衡。

>>原创文章,欢迎转载。转载请注明:转载自,谢谢!>>原文链接地址:上一篇:

已是最新文章


以上所述就是小编给大家介绍的《『互联网架构』软件架构-深入理解Ribbon(93)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Designing Data-Intensive Applications

Designing Data-Intensive Applications

Martin Kleppmann / O'Reilly Media / 2017-4-2 / USD 44.99

Data is at the center of many challenges in system design today. Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, w......一起来看看 《Designing Data-Intensive Applications》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码