netflix ribbon概述
LB方案分类
目前主流的LB方案可分成两类:一种是集中式LB, 即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;另一种是进程内LB,将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。Ribbon就属于后者,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
1. Ribbon是什么?它解决了什么问题?
Ribbon is a client side IPC library that is battle-tested in cloud. It provides the following features
- Load balancing
- Fault tolerance
- Multiple protocol (HTTP, TCP, UDP) support in an asynchronous and reactive model
- Caching and batching
2.它的模块有哪些?功能分别是什么?
- ribbon: APIs that integrate load balancing, fault tolerance, caching/batching on top of other ribbon modules and Hystrix
- ribbon-loadbalancer: Load balancer APIs that can be used independently or with other modules
- ribbon-eureka: APIs using Eureka client to provide dynamic server list for cloud
- ribbon-transport: Transport clients that support HTTP, TCP and UDP protocols using RxNetty with load balancing capability
- ribbon-httpclient: REST client built on top of Apache HttpClient integrated with load balancers (deprecated and being replaced by ribbon module)
- ribbon-example: Examples
- ribbon-core: Client configuration APIs and other shared APIs
3.哪些模块应用到生产了?
- ribbon-core: deployed at scale in production
- ribbon-eureka: deployed at scale in production
- ribbon-evcache: not used
- ribbon-guice: not used
- ribbon-httpclient: we use everything not under com.netflix.http4.ssl. Instead, we use an internal solution developed by our cloud security team
- ribbon-loadbalancer: deployed at scale in production
- ribbon-test: this is just an internal integration test suite
- ribbon-transport: not used
- ribbon: not used
4.主要类及其层次结构

说明:
DynamicServerListLoadBalancer:A LoadBalancer that has the capabilities to obtain the candidate list of servers using a dynamic source. i.e. The list of servers can potentially be changed at Runtime. It also contains facilities wherein the list of servers can be passed through a Filter criteria to filter out servers that do not meet the desired criteria.
IClientConfig:Defines the client configuration used by various APIs to initialize clients or load balancers and for method execution. The default implementation is {@link DefaultClientConfigImpl}
IRule:Interface that defines a "Rule" for a LoadBalancer. A Rule can be thought of as a Strategy for loadbalacing. Well known loadbalancing strategies include Round Robin, Response Time based etc.
IPing:Interface that defines how we "ping" a server to check if its alive
ServerList:Interface that defines the methods sed to obtain the List of Servers
ServerListFilter:This interface allows for filtering the configured or dynamically obtained List of candidate servers with desirable characteristics.
ServerListUpdater:strategy for {@link com.netflix.loadbalancer.DynamicServerListLoadBalancer} to use for different ways of doing dynamic server list updates
与Eureka结合使用
当与Eureka组合使用Ribbon时,
server使用DiscoveryEnabledServer实现,Servers that were obtained via Discovery and hence contain meta data in the form of InstanceInfo。
ServerList接口会使用DiscoveryEnabledNIWSServerList实现,The server list class that fetches the server information from Eureka client. ServerList is used by {@link DynamicServerListLoadBalancer} to get server list dynamically.
ServerListFilter使用DefaultNIWSServerListFilter实现,The Default NIWS Filter - deals with filtering out servers based on the Zone affinity and other related properties。
ServerListUpdater使用EurekaNotificationServerListUpdater,A server list updater for the {@link com.netflix.loadbalancer.DynamicServerListLoadBalancer} that utilizes eureka's event listener to trigger LB cache updates。封装了LegacyEurekaClientProvider:A legacy class to provide eurekaclient via static singletons。
IPing使用NIWSDiscoveryPing实现,"Ping" Discovery Client,i.e. we dont do a real "ping". We just assume that the server is up if Discovery Client says so。
参考文章
【1】https://github.com/Netflix/ribbon
【2】http://blog.csdn.net/neosmith/article/details/53967330
netflix ribbon概述的更多相关文章
- SpringCloud Netflix Ribbon(负载均衡)
⒈Ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负 ...
- Netflix Ribbon源码设计错误的证据(附正确示例)
我在之前一篇博客里https://www.cnblogs.com/yangfeiORfeiyang/p/9644254.html 里对Netflix Ribbon的Loadbalancer类源码设计的 ...
- SpringCloud学习笔记(四、SpringCloud Netflix Ribbon)
目录: Ribbon简介 Ribbon的应用 RestTemplate简介 Ribbon负载均衡源码分析 Ribbon简介: 1.负载均衡是什么 负载均衡,根据其字面意思来说就是让集群服务具有共同完成 ...
- SpringCloud系列之客户端负载均衡Netflix Ribbon
1. 什么是负载均衡? 负载均衡是一种基础的网络服务,它的核心原理是按照指定的负载均衡算法,将请求分配到后端服务集群上,从而为系统提供并行处理和高可用的能力.提到负载均衡,你可能想到nginx.对于负 ...
- Spring Cloud Netflix Ribbon详细介绍及自定义规则策略
之前文章我们介绍了如何配置具有Ribbon轮询机制的负载均衡策略的消费者,这次来具体了解一下Ribbon的一些细节,以及如何自定义负载均衡策略等. 说一下Ribbon实现负载均衡的大致思路.它通过用@ ...
- SpringCloud Netflix Ribbon
Eureka客户端的负载均衡:从Eureka server拿到节点列表,客户端自己使用负载均衡的算法确定要使用的节点: Eureka服务端的负载均衡:服务端使用负载均衡的算法,从节点列表中确定要使用的 ...
- 对Netflix Ribbon的Loadbalancer类源码设计合理性的一点质疑
首先,这只是我个人的一点质疑,可能是因为我自己菜没有领悟到作者的意思,也正因此,想发出来跟大家一起探讨. 在昨晚,我因为在编写自己的开源项目的负载均衡模块(这是我开源项目的介绍:https://www ...
- netflix turbine概述
1.turbine是什么?它的作用是什么? Turbine is a tool for aggregating streams of Server-Sent Event (SSE) JSON data ...
- netflix feign概述
1.什么是feign?feign的作用是什么? Feign is a java to http client binder inspired by Retrofit, JAXRS-2.0, and W ...
随机推荐
- SQLSERVER TRUE、FALSE、UNKNOWN
null和其他值比较都是unknown 在SQL中逻辑表达式的可能值包括TRUE.FALSE.UNKNOWN.他们被称为三值逻辑.三值逻辑是SQL所特有的.大多数的变成语言的逻辑表达式 只有TRUE或 ...
- Spring MVC之RequestMapping
第一部分.概述 /**映射URL到控制器类或处理程序*/@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolic ...
- cordova环境搭建
首先,需要了解一下cordova 和 phonegap 的关系.phoneGap是原先的名字,Cordova是phoneGap被捐给apache之后 用的项目名,phoneGap的名字也被保留了. 1 ...
- python3自动下载优酷视频小程序
我们一般都在优酷里看一些好玩的视频,有时候看到精彩的就想下载到本地保存起来留作纪念,在win下可以用维棠等软件下载,但苦了用linux的孩子们.尽管chrome和firefox的一些插件可以下载,但有 ...
- Python的lambda匿名函数
lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x):return x**2print f(4) Python中使用lambda的话,写成这样 g = lam ...
- 如何使用Grunt(好文)
Grunt 是什么? Grunt 基于Node.js之上,是一个以任务处理为基础的命令行工具,可以减少优化开发版本为发布版本所需的人力和时间,从而加速开发流程.它的工作原理是把这 些工作整合为不同的任 ...
- centos 6.5下安装文件上传下载服务
centos 6.5下安装文件上传下载服务 由于每次在CentOS中要下载一些配置文件到物理机,和上传一些文件到服务器,导致来回的开启ftp软件有点麻烦,这里我们可以使用文件上传下载服务,来解决上传和 ...
- iOS 准备
iOS 编程知识点 iOS 基础知识点 iOS 之 系统机制 Xcode 使用技巧 Mac 使用技巧 iOS 之 英语 iOS 之 编外知识点 iOS 知识库链接
- JVM 参数设置
YGC FGC 都会影响程序的运行,中断程序,JVM参数调整比较复杂,现在记录了一下平时常用的JVM参数: jar 包启动: usr/java/bin/java -jar -Xms2560m -Xmx ...
- HTML 表单和输入
HTML 表单 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中输入内容,比如:文本域(textarea).下拉列表.单选框(radio-buttons).复选框(checkboxes)等等 ...