0
点赞
收藏
分享

微信扫一扫

Spring Cloud落地之Spring Cloud LoadBalancer 线上优化方案

野见 2022-03-11 阅读 69

文章目录

Spring Cloud 版本

Spring Cloud 目前选用的是官方推荐的最新稳定版本:2020.0.1

注册中心

首先我们选用的注册中心是Zookeeper,和Eureka不同的是Spring Cloud Zookeeper 客户端获取服务信息客户端本地是没有缓存的,每次都需要去Zookeeper拉取节点信息。相关源码如下

所以存的问题是:

  1. 每次服务调用都会去Zookeeper获取节点信息对Zookeeper的压力较大
  2. 如果Zookeeper集群宕机将导致服务之间的调用不可用,严重影响高可用
    所以从这里来看CP型的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

禁用导致的问题也如上面所说:

  1. Zookeeper挂掉服务调用完全不可用
  2. 对Zookeeper的压力较大,每次都需要去Zookeeper获取节点信息

对于测试环境我们可以完全禁用
对于正式环境我们可以修改为2s左右的缓存

spring:
  cloud:
    loadbalancer:
      cache:
        ttl: 2

总结

目前算是简单的优化了Spring Cloud LoadBalancer的客户端缓存时间,需要平滑处理服务上下线问题还是有很多优化空间的,后续会继续优化。

举报

相关推荐

0 条评论