Spring-Cloud Ribbon
2018-08-21 本文已影响17人
Jimhou
Ribbon的功能
Ribbon是Netflix发布的负载均衡器,有助于控制HTTP和TPC客户端的行为。为Ribbon配置了服务的提供者地址列表后,Ribbon就可以基于某种负载均衡算法,自动帮助服务消费者请求。Ribbon默认提供了很多负载均衡算法,比如:轮询、随机、加权等,当然,我们也可以利用Ribbon实现我们自己的负载均衡算法。
Ribbon是客户端负载均衡器,不是一个单独的服务。需要依赖Spring Cloud 中的服务来使用。在Spring Cloud中,当Ribbon与Eureka配合使用,Ribbon能够自动从Eureka Server中获取服务提供者地址列表,并基于负载均衡算法,请求服务的提供者实例(因为Eureka Client 中已经整合Ribbon,只要开启Ribbon功能即可)。
服务架构
在一个SpringCloud 集群中,一个服务实例既是服务的提供者、也是服务的消费者,因为Ribbon是消费端负载均衡器,所以每个服务的实例都可以使用Ribbon。
假如一个Spring Cloud集群内有服务A(实例A1、A2、A3)和服务B(B1、B2),B需要调用A,那么使用Ribbon之后架构以及调用顺序如下图。
ribbon.png
Ribbon的使用
Step1 引入依赖
Step2 启用Ribbon
Step3 RestTemplate 调用
Ribbon中组件
接口 | spring容器中Bean名称 | 实现类 | 功能 |
---|---|---|---|
IClientConfig | ribbonClientConfig | DefaultClientConfigImpl | 客户端配置 |
IRule | ribbonRule | ZoneAvoidanceRule | 一个逻辑规则,决定到底将要调用哪个服务实例 |
IPing | ribbonPing | DummyPing | 一个后台运行的组件,用来检测服务实例是否可用 |
ServerList<Server> | ribbonServerList | ConfigurationBasedServerList | 服务列表 |
ServerListFilter<Server> | ribbonServerListFilter | ZonePreferenceServerListFilter | 服务列表过滤器,将可用服务列表精确到最佳 |
ILoadBalancer | ribbonLoadBalancer | ZoneAwareLoadBalancer | (Ribbon)负载均衡入口 |
ServerListUpdater | ribbonServerListUpdater | PollingServerListUpdater | 服务列表更新器 |
参考文档
https://github.com/Netflix/ribbon/wiki/Working-with-load-balancers#components-of-load-balancer