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

Spring Cloud 版本

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

注册中心

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

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

所以存的问题是:

  1. 每次服务调用都会去Zookeeper获取节点信息对Zookeeper的压力较大
  2. 如果Zookeeper集群宕机将导致服务之间的调用不可用,严重影响高可用 所以从这里来看CP型的Zookeeper并不是特别适合作注册中心

当然如果服务规模较小还是可以使用Zookeeper,毕竟还是非常稳定的

Spring Cloud LoadBalancer 负载均衡器新的选择

在2019年7月3日,在Hoxton.M1的发布会上,Spring已经宣布用Spring Cloud LoadBalancer 来代替 Netfix Ribbon

缓存问题

Spring Cloud LoadBalancer 在获取服务列表时候默认是有缓存的,并且缓存时间为 35s

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

由于我们使用了 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的客户端缓存时间,需要平滑处理服务上下线问题还是有很多优化空间的,后续会继续优化。


原文始发于微信公众号(小奏技术):Spring Cloud落地之Spring Cloud LoadBalancer 线上优化方案

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/30053.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!