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

原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
原文链接地址:『互联网架构』软件架构-深入理解Ribbon(93)

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

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

  • 服务端的负载均衡

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

  • 客户端侧负载均衡

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

image.png

(二)Ribbon基本概念及使用

Ribbon是一个实现了客户端负载均衡的组件,Netflix(美国是一家在线影片租赁提供商,开源了很多比较牛X的技术)开源的,其主要功能是提供【客户端侧负载均衡】。
Ribbon客户端组件提供一系列完善的配置项,如连接超时,重试等配置。简单来说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中列出负载均衡后面所有的机器,Ribbon会自动的帮助你基于某种规则(轮询,随机等)去连接这些机器,我们也可以使用自定义Ribbon实现自己的负载均衡算法。

  • 官网

https://github.com/Netflix/ribbon

(三)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在一起的。

(四)Eureka集成Ribbon-回顾

  • 增加Ribbon依赖

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

  • 负载均衡代码

  • 源码演示

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

启动:eurekaserver,端口8761

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

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

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

  • 访问order查看走向

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

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

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

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

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

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

访问定制化策略的order,随机的。每次刷新都是随机的。
http://localhost:8010/user/getIpAndPort

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

  1. 再启动两个用户微服务 serviceid和port不同
  2. 请求microservice-user微服务,会使用自定义的CustomRibbonConfig 作为负载均衡策略(随机)
  3. 请求microservice-user-2微服务,会使用默认的负载均衡策略(轮询)
  • 上边这种写死的方式很土鳖,使用Ribbon属性配置实现指定微服务负载均衡策略
    1.在订单微服务的application.yml中增加配置


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

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

(六)Ribbon脱离Eureka独立使用

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

  • 订单微服务application配置中增加
  • <client>.ribbon.listOfServers:可用微服务列表
    见示例: 05-ms-consumer-order-ribbon-without-eureka

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 1 为什么需要服务发现 简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基...
    谦小易阅读 25,094评论 4 93
  • 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥...
    java菜阅读 2,949评论 0 6
  • Ribbon 是netflix 公司开源的基于客户端的负载均衡组件,是Spring Cloud大家庭中非常重要的一...
    亦山札记阅读 14,600评论 10 47
  • 【压岁钱数量<2000】 必备:定期保到30岁重疾(多重赔付优于单次赔付)80万保额+百万医疗险100万保额 可选...
    安然8阅读 501评论 0 1
  • 晚上九点多的地铁,一如既往的人潮汹涌。 叶落有些累,靠在车厢的小角落里。 “怎么突然有一股浓浓的肥皂味?” 地铁车...
    book君阅读 487评论 0 0