栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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

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

文章目录

Spring Cloud 版本注册中心Spring Cloud LoadBalancer 负载均衡器新的选择缓存问题解决方式总结

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/751059.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号