Spring Cloud 版本
Spring Cloud 目前选用的是官方推荐的最新稳定版本:2020.0.1
注册中心
首先我们选用的注册中心是Zookeeper
,和Eureka
不同的是Spring Cloud Zookeeper
客户端获取服务信息客户端本地是没有缓存的,每次都需要去Zookeeper
拉取节点信息。相关源码如下


所以存的问题是:
-
每次服务调用都会去Zookeeper获取节点信息对Zookeeper的压力较大 -
如果Zookeeper集群宕机将导致服务之间的调用不可用,严重影响高可用 所以从这里来看CP型的 Zookeeper
并不是特别适合作注册中心
当然如果服务规模较小还是可以使用
Zookeeper
,毕竟还是非常稳定的
Spring Cloud LoadBalancer 负载均衡器新的选择
在2019年7月3日,在Hoxton.M1
的发布会上,Spring
已经宣布用Spring Cloud LoadBalancer
来代替 Netfix Ribbon
了
缓存问题
Spring Cloud LoadBalancer
在获取服务列表时候默认是有缓存的,并且缓存时间为 35s

由于我们使用了 com.github.ben-manes.caffeine:caffeine
缓存依赖,所以我们 Spring Cloud LoadBalancer
缓存所以使用的缓存管理器也变成了 CaffeineBasedLoadBalancerCacheManager
导致的问题就是如果我们系统上下线的时候,服务列表可能缓存的是旧列表。导致服务调用报错,影响服务可用
解决方式
权衡利弊 最简单的方式是禁用掉Spring Cloud LoadBalancer
的本地缓存,禁用方式也很简单,只需要加如下配置
spring:
cloud:
loadbalancer:
cache:
enabled: false
禁用导致的问题也如上面所说:
-
Zookeeper挂掉服务调用完全不可用 -
对Zookeeper的压力较大,每次都需要去Zookeeper获取节点信息
对于测试环境我们可以完全禁用 对于正式环境我们可以修改为2s左右的缓存
spring:
cloud:
loadbalancer:
cache:
ttl: 2
总结
目前算是简单的优化了Spring Cloud LoadBalancer
的客户端缓存时间,需要平滑处理服务上下线问题还是有很多优化空间的,后续会继续优化。
原文始发于微信公众号(小奏技术):Spring Cloud落地之Spring Cloud LoadBalancer 线上优化方案
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/30053.html