1 负载均衡
调用微服务时,在集群服务器中,轮询发送请求
@LoadBalanced 注解添加到RestTemplate
修改请求路径,写服务id, rt.getForObject(“http://item-service/{1}”)
底层是RestTemplate
在微服务中是必须有的
2 重试
- MaxAutoretries
单台服务器的重试次数
2) MaxAutoretriesNextServer
向后重试几台服务器
3) Connecttimeout
连接超时时间 ; 会引起重试
4) ReadTimeout
等待接收响应的超时时间 ; 会引起重试
5) OkToRetryOnAllOperations
是否对所有类型请求都重试 ; 默认只对get请求重试
两个超时参数在yml配置中配置无效,需要在代码中配置
3 微服务中必须使用负载均衡么? 微服务中必须使用重试么?重试优缺点是什么?
在微服务架构中,负载均衡是必须使用的技术,通过它来实现系统的高可用、集群扩容等功能。负载均衡可以分为两种:服务端负载均衡和客户端负载均衡。通常所说的负载均衡指服务器负载均衡,
服务器集群时才需要做负载均衡,单台服务器谈不上负载均衡
重试
优点:避免因为网络阻塞导致的连接失败
缺点:可能发生重复的请求操作
微服务中可以不使用负载均衡 缺点:一处爆炸处处爆炸 优点:省钱
微服务中不是必须使用重试 不使用重试优点:速度快 缺点:浪费资源 重试优点:不浪费资源 缺点:浪费时间
负载均衡我觉得是有必要的,因为雨露均沾,不能一家独大。
在微服务架构中,负载均衡是必须使用的技术,通过它来实现系统的高可用、集群扩容等功能.但是此负载均衡不是用nginx实现的服务端的技术,乃是ribbon实现的客户端的技术,将面向服务的 REST 模板请求自动转换成客户端负载均衡的服务调用
负载均衡不一定要用ribbon
4 ribbon 服务消费者
ribbon 提供了负载均衡和重试功能, 它底层是使用 RestTemplate 进行 Rest api 调用
5 ribbon 负载均衡
1) 添加 ribbon 起步依赖(可选)
eureka 依赖中已经包含了 ribbon
2) RestTemplate 设置 @LoadBalanced
@LoadBalanced 负载均衡注解,会对 RestTemplate 实例进行封装,创建动态代理对象,并切入(AOP)负载均衡代码,把请求分发到集群中的服务器
3) 访问路径设置为服务id
4) 访问测试
访问测试,ribbon 会把请求分发到 8001 和 8002 两个服务端口上
http://localhost:3001/item-service/34
6 ribbon 重试
1) pom.xml 添加 spring-retry 依赖
2) application.yml 配置 ribbon 重试
(1) OkToRetryOnAllOperations=true
对连接超时、读取超时都进行重试
(2)MaxAutoRetriesNextServer
更换实例的次数
(3)MaxAutoRetries
当前实例重试次数,尝试失败会更换下一个实例
3) 主程序设置 RestTemplate 的请求工厂的超时属性
4) item-service 的 ItemController 添加延迟代码,以便测试 ribbon 的重试机制
5) 访问,测试 ribbon 重试机制
通过 ribbon 访问 item-service,当超时,ribbon 会重试请求集群中其他服务器
http://localhost:3001/item-service/35
ribbon的重试机制,在 feign 和 zuul 中进一步进行了封装,后续可以使用feign或zuul的重试机制
来源:CSDN
作者:Cv小码农
链接:https://blog.csdn.net/weixin_43694465/article/details/103885682