什么是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. winform使用委托和事件在窗体之间传值

    定义委托和事件,并且触发这个事件 //定义委托 public delegate void ShowOutStockDelegate(List<OutStockResultDto> outS ...

  2. 转 mysql 存储过程初探

    https://www.cnblogs.com/qmfsun/p/4838032.htmlMySQL命令执行sql文件的两种方法 https://www.cnblogs.com/mark-chan/p ...

  3. c# Invoke的新用法

    在C# 3.0及以后的版本中有了Lamda表达式,像上面这种匿名委托有了更简洁的写法..NET Framework 3.5及以后版本更能用Action封装方法.例如以下写法可以看上去非常简洁: voi ...

  4. CSS3动画框架 Animate.css

    CSS3的动画应用越来越多了,Animate.css一个从名字上就知道干什么的动画框架. github上的访问地址:http://daneden.github.io/animate.css/ 使用方法 ...

  5. 00点睛Spring4.1-环境搭建

    转载:https://www.iteye.com/blog/wiselyman-2210250 0.1 前置条件 Spring 4.1提倡基于Java Config和注解的配置,所以本教程通篇不会采用 ...

  6. Visual Studio 2019 社区版本离线安装

    官方指导 :https://docs.microsoft.com/en-us/visualstudio/install/create-an-offline-installation-of-visual ...

  7. SQL网页端在线自定义查询工具

    TreeSoft数据库管理系统,是用JAVA开发,基于网页的数据库SQL查询工具.功能包括:数据库的展示,库表的展示,表字段结构的展示,SQL语句的在 线编辑批量执行,表结构的在线设计维护,数据的在线 ...

  8. 【计算机视觉】车牌识别开源框架EasyPR介绍

    之前学习了一个GitHub开源的框架,GitHub地址为: https://github.com/liuruoze/EasyPR  希望通过此篇博客详细阐述如何一步步实现车牌的识别过程.  车牌识别分 ...

  9. mysql order by rand() 优化方法

    mysql order by rand() 优化方法 适用于领取奖品等项目<pre>mysql> select * from user order by rand() limit 1 ...

  10. 1、Tensorflow 之 saver与checkpoint

    1.Tensorflow 模型文件 checkpoint model.ckpt-200.data-00000-of-00001 model.ckpt-200.index model.ckpt-200. ...