什么是ribbon?

Ribbo是一个基于HTTP和TCP的客户端负载均衡器

什么是客户端负载均衡?

客户端负载均衡和服务端负载均衡最大的区别在于服务清单所存储的位置。
在客户端负载均衡中,所有的客户端节点都有一份自己要访问的服务端清单,客户端在发起请求的时候会先自行选择一个服务端,向该服务端发起请求,从而实现负载均衡

ribbon的职能主要有两个:

1、维护所有的服务实例SeverList(新增、更新、删除等)
2、当需要请求Server实例时,从SeverList中找到最合适的Server实例并返回

维护server列表

1、基于定时任务拉取服务列表方式,然后将最新的服务列表更新到ServerList之中(默认30s一次从Eureka服务端拉取)
2、基于Eureka服务事件通知的方式,来更新ServerList(例如:有新服务注册,或有服务down机,会有事件通知)

选择服务实例的流程

1、通过ServerList获取当前可用的服务实例列表

2、使用ServerListFilter过滤器过滤出符合要求的服务实例列表
(Ribbon默认采取了区域优先的过滤策略,即从ServerList中过滤出和当前实例所在的区域(zone)一致的serverList) 3、应用Rule规则,结合服务实例的统计信息,返回满足规则的某一个服务实例 说明:在服务实例列表选择的过程中,有两次过滤的机会
第一次是首先通过ServerListFilter过滤器
另外一次是用过Rule的选择规则进行过滤

rule规则

1、RoundRobinRule	线性轮询
2、RandomRule 随机
3、WeightedResponseTimeRule 权重
4、BestAvailableRule 选出最空闲的实例
5、RetryRule 线性轮询重试
6、ZoneAvoidanceRule
计算出哪个区域的服务最差,将此zone的服务从服务列表中剔除
再过滤掉正处于熔断状态的服务
然后通过RoundRobinRule线性轮询的方式从列表中挑选一个服务

ribbon的理解的更多相关文章

  1. 【一起学源码-微服务】Ribbon 源码一:Ribbon概念理解及Demo调试

    前言 前情回顾 前面文章已经梳理清楚了Eureka相关的概念及源码,接下来开始研究下Ribbon的实现原理. 我们都知道Ribbon在spring cloud中担当负载均衡的角色, 当两个Eureka ...

  2. 浅谈SpringCloud (三) Ribbon负载均衡

    什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃.为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力. 我们 ...

  3. Spring Cloud - 切换Ribbon的负载均衡模式

    Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模 ...

  4. Spring Cloud Ribbon说明

    浅谈Spring Cloud Ribbon的原理 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Clo ...

  5. SpringCloud(二)之Ribbon的实现负载均衡的基本应用

    一 Ribbon简介     Ribbon是Netflix发布的负载均衡器,它是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装 ...

  6. 【一起学源码-微服务】Ribbon源码五:Ribbon源码解读汇总篇~

    前言 想说的话 [一起学源码-微服务-Ribbon]专栏到这里就已经全部结束了,共更新四篇文章. Ribbon比较小巧,这里是直接 读的spring cloud 内嵌封装的版本,里面的各种config ...

  7. 【一起学源码-微服务】Eureka+Ribbon+Feign阶段性总结

    前言 想说的话 这里已经梳理完Eureka.Ribbon.Feign三大组件的基本原理了,今天做一个总结,里面会有一个比较详细的调用关系流程图. 说明 原创不易,如若转载 请标明来源! 博客地址:一枝 ...

  8. Ribbon详解

    转自Ribbon详解 简介 ​ Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装,可以让 ...

  9. 使用XML定制Ribbon的一点小前奏(稍微再进一步的理解XML)

    定制文档级Ribbon界面的实现思路: 1.excel的文件使用rar+xml的形式保存在本地. 2.用压缩软件打开文件,以规范的格式直接编缉或添加xml文件 3.使用excel文件时,主程序会解析x ...

随机推荐

  1. PHP 二维数组去重(保留各个键值的同时去除重复的项)

    对于如下二维数组,要求对其进行去重: $arr = array( '=>array( 'name'=>'james', , ), '=>array( 'name'=>'susu ...

  2. postgre级联更新

    常规写法 update t_table_copy a set content=( select content from t_table b where a.id = b.id ); 这些法,数据少了 ...

  3. zabbix使用fping监控任意两个节点之间的网络质量、丢包率和响应时间

    zabbix使用fping监控任意两个节点之间的网络质量.丢包率和响应时间 之前的博文 使用zabbix3..4的ICMP Ping模版实现对客户端网络状态的监控 https://www.cnblog ...

  4. 六、postman做ui测试

    一.思路 发请求去拿到网站的响应——>html 解析html标签,判断一些元素是否显示 二.目的 快速检查ui是否正确 三.用到的库 Cheerio https://cheerios.js.or ...

  5. 我非要捅穿这 Neutron(二)上层资源模型篇

    目录 文章目录 目录 Neutron 的资源模型 Network 运营商网络和租户网络 创建运营商网络 创建租户网络 创建外部网络 Network 小结 Subnet IP 核心网络服务 Subnet ...

  6. ES6深入浅出-13 Proxy 与 Reflect-1.Reflect 反射

    阮一峰  http://es6.ruanyifeng.com/#docs/reflect MDN有一些简陋的介绍 https://developer.mozilla.org/zh-CN/docs/We ...

  7. 报错:org.apache.sqoop.common.SqoopException Message: CLIENT_0001:Server has returned exception NoClassDefFoundError: org/codehaus/jackson/map/JsonMappingException

    报错背景: CDH集成sqoop2服务之后,创建好link和job之后,执行job的时候报错. 报错现象: sqoop:> start job -j Exception has occurred ...

  8. Delphi : TStringList的Find,IndexOf和Sort

    关键:Find要事先Sort排序,Indexof不用排序. TStringList内部查找相关的数据.待调试代码时才知道痛苦,浪费无数时间后,只得一步步跟踪,才发 现Find方法返回的Index总是错 ...

  9. git切换到某个tag, 从tag切换回当前分支

    git clone 整个仓库后使用,以下命令就可以取得该 tag 对应的代码了 git checkout tag_name 但是,这时候 git 可能会提示你当前处于一个“detached HEAD& ...

  10. JSON和JSONP具体是干神马的呢? (含jQuery实例)

    说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服 ...