day06-SpringCloud Ribbon
SpringCloud Ribbon
1.Ribbon介绍
1.1Ribbon是什么?
- SpringCloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具
- Ribbon 主要功能是提供客户端负载均衡算法和服务调用
- Ribbon 客户端组件提供一系列完整的配置项如连接超时,重试等
- Ribbon 会基于某种规则(如简单轮询,随机连接等)去连接指定服务
- 程序员很容易使用 Ribbon 的负载均衡软法实现负载均衡
一句话:Ribbon = 负载均衡 + RestTemplate 调用
Ribbon 目前进入维护模式,未来替换方案 是 Spring Cloud LoadBalancer
1.2LB(Load Balance)-负载均衡
负载均衡(LB)的分类:
集中式LB
即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如Nginx),由该设施负责把访问的请求通过某种策略转发至服务的提供方。
进程内LB
将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后再从这些地址中选择出一个合适的服务地址。Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
前面 member-consumer 轮询负载访问 10000/10002 底层就是 Ribbon 默认的轮询负载算法
2.Ribbon原理
2.1Ribbon架构图&机制

Ribbon 机制:
- 消费者先选择 EurekaServer,它优先选择在同一个区域内负载较少的 server
- 再根据程序员指定的策略,在从 server 取到的服务注册列表中选择一个地址
- Ribbon 提供了多种策略∶ 比如轮询、随机和根据响应时间加权。
2.2Ribbon常见负载算法
| 策略名 | 描述 |
|---|---|
| BestAvailableRule | 选择一个最小并发请求的server。逐个考察server,如果server被tripped(跳闸)了,则忽略,再选择其中ActiveRequestsCount最小的Server |
| AvailabilityFilteringRule | 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的后端server(active connections超过配置的阈值) |
| WeightedResponseTimeRule | 根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低 |
| RetryRule | 对选定的负载均衡策略机上重试机制。在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的server |
| RoundRobbinRule | 轮询index,选择index对应位置的server |
| RandomRule | 随机选择一个server,在index上随机,选择index对应位置的server |
| ZoneAvoidanceRule | 复合判断server所在区域的性能和server的可用性,来选择server |
3.切换负载均衡算法-应用实例
需求:将默认的轮询算法改为随机算法RandomRule,浏览去访问消费方,要求消费方访问服务方端口是随机的
(1)创建消费方的RibbonRule.java,指定负载均衡的策略
package com.li.springcloud.config;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author 李
* @version 1.0
* 配置自己的负载均衡算法
*/
@Configuration
public class RibbonRule {
//注入指定的均衡算法
@Bean
public IRule myRibbonRule(){
//这里指定RandomRule
return new RandomRule();
}
}
(2)在主程序中使用注解指定Ribbon的配置
在上面RibbonRule的配置是全局的,不在主程序中配置也可以使用,这里在主程序中指定只是更加明确

day06-SpringCloud Ribbon的更多相关文章
- springcloud Ribbon学习笔记二
之前介绍了如何搭建eureka服务并开发了一个用户服务成功注册到了eureka中,接下来介绍如何通过ribbon来从eureka中获取用户服务: springcloud ribbon提供客户端的负载均 ...
- 客户端实现负载均衡:springCloud Ribbon的使用
Netfilx发布的负载均衡器,是一个基于http.tcp的客户端负载均衡工具,具有控制http.tcp客户端的行为,为ribbon配置服务提供者的地址后,ribbon就 可以经过springClou ...
- springcloud ribbon的 @LoadBalanced注解
在使用springcloud ribbon客户端负载均衡的时候,可以给RestTemplate bean 加一个@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载 ...
- springcloud Ribbon学习笔记一
上篇已经介绍了如何开发eureka服务并让多个服务进行相互注册,接下来记录如何开发一个服务然后注册到eureka中并能通过ribbon成功被调用 开发一个用户服务并注册到eureka中,用户服务负责访 ...
- SpringCloud Ribbon 负载均衡 通过服务器名无法连接的神坑一个
一,问题 采取eureka集群.客户端通过Ribbon调用服务,Ribbon端报下列异常 java.net.UnknownHostException: SERVICE-HI java.lang.Ill ...
- springcloud ribbon Finchley 版本,自定义算法
引用上一个项目,在原有的基础上进行更改,添加springcloud的内荣. eureka-server 和上一个springcloud eureka的一样,没有改动. 添加cloud-api pack ...
- SpringCloud Ribbon的分析(二)
上文我们分析到 loadBalancer 根据具体的算法选择相应的server. protected Server getServer(ILoadBalancer loadBalancer) { if ...
- SpringCloud Ribbon的分析
Spring Cloud Ribbon主要用于客户端的负载均衡.最基本的用法便是使用RestTemplate进行动态的负载均衡.我们只需要加入如下的配置便能完成客户端的负载均衡. @Configura ...
- springcloud ribbon 客户端负载均衡用法
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...
- SpringCloud Ribbon组成和负载均衡规则
Ribbon饥饿加载 默认情况下Ribbon是懒加载的.当服务起动好之后,第一次请求是非常慢的,第二次之后就快很多. 解决方式:开启饥饿加载 ribbon: eager-load: enabled: ...
随机推荐
- python基础简记
pyhon 2 兼容 python 3 : 导入__future__包: 一些命名规定:以单划线开头的表示不能直接访问类属性,需要访问接口:以双划线开头的表示类的私有成员:以双划线开头和结尾的表示py ...
- NODEJS的误打误撞
我接触nodejs 纯属是误打误撞,之前在做一个房地产项目的时候,客户提出了一个需求,我大概整理一些"我们需要员工只能在公司登陆房管系统并进行操作,回家是不允许进行登录的",其实对 ...
- cv2安装
pip install opencv-contrib-python
- Hadoop警告信息:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform.
when键入命令: hadoop fs -ls / 若出现以下警告信息: Hadoop警告问题:WARN util.NativeCodeLoader: Unable to load native-ha ...
- mysql-连接路径url参数(随时补充及改错)
1.基本驱动连接url jdbc:mysql://127.0.0.1:3306/demo 2.参数 参数 缺省值 说明 粘贴 useSSL 是否使用ssl加密连接mysql,一般指定false就行,除 ...
- zyb
- 用猿大师办公助手已经在Chrome网页中打开了Office Word,再用桌面Office打开其他Word打不开怎么办?
我们发现用猿大师办公助手在Chrome网页中已经打开了Word文档,但是再用本地的Word打开其他文档,却直接显示在网页中了,本地打不开Word怎么办? 猿大师办公助手默认新打开文件是在内嵌网页off ...
- 修改linux服务器时间
date -s "20220104 11:07:05" &&hwclock --systohc
- 关于Go语言的底层,你想知道的都在这里!
目录 1. GoLang语言 1.1 Slice 1.2 Map 1.3 Channel 1.4 Goroutine 1.5 GMP调度 1.6 垃圾回收机制 1.7 其他知识点 2. Web框架Gi ...
- MySQL Mock大量数据做查询响应测试
上个迭代版本发布后,生产环境业务同事反馈仓配订单查询的页面加载时间过长. 因为页面原来是有的,这次开发是在原来基础上改的,因此没有额外做性能.测试环境只调用接口请求了少量数据去验证功能.在对比该迭代添 ...