前言
业务大促备战是企业必做功课之一,今天趁着99大促来袭前,谈一谈如何利用 MSE 的服务自治能力提前发现潜在风险,通过可观测能力了解引擎内部运行状态,并提供自建 Nacos/ZooKeeper 一键迁移上云服务,帮助业务顺利应对大促
如何发现潜在风险直播链接:
https://yqh.aliyun.com/live/detail/29401
微服务的挑战
单体到微服务的变化
随着互联网的业务快速增长,进而导致系统的架构也在不断的发生着变化,由最初的单体形态演变到现在最流行的微服务架构;软件架构设计里面没有银弹,享受着微服务带来的扩展性和性能提升,必然要承受它带来的一些副作用,总的来说,主要有以下几点的变化:
1、调用链路增加了多跳:
单体应用的业务逻辑在一个节点进程里面闭环执行完成,微服务架构改造后,不同功能属性的逻辑拆分成一个个服务部署在独立的节点之上,要完成一段完整的业务逻辑,需要每个独立节点互相配合,A->B 变成了 A->B1->B2->B3。
2、增了复杂中间件的依赖:
微服务架构里面,RPC是最基本的技术引入,它包含了:RPC客户端(Dubbo/Spring Cloud),注册中心(Nacos/ZooKeeper/Eureka),如果有事务要求的,还需要依赖一些分布式事务组件如Seata。
3、从单兵作战到多团队协作
微服务架构的升级,除了应用系统层面的变化,生产关系也可能产生了变化,以前一个系统由一个人负责,变成了多个服务团队协作开发,互相支持
带来的挑战
面对微服务架构带来的变化,给开发者和运维同学带来了不少挑战:
在日常开发和运维过程中,经常会遇到一些如下的典型问题:
- 场景一:服务调用失败,Consumer日志显示没有可用服务,可明明Provider进程正常运行着,是服务没注册上去呢?还是注册中心没把地址推送到客户端呢?
- 场景二:Nacos客户端在某种极端场景下,出现了异常,排查了半天,是Nacos客户端已知Bug导致,需要升级到xx稳定版本,但是作为开发/运维的你,每天业务需求那么多,如何搞定对客户端版本迭代保持着时刻的关注呢?
- 场景三:业务大促即将来临,客户端热火朝天的扩容以应对激增的流量,突然间注册配置中心不工作了,原来是达到注册配置中心额定容量了,需要扩容了,每次都是出现问题才后知后觉,然后提前做好容量规划呢?
- 场景四:线上注册配置中心出现FullGC,重启又缓解一下,每隔一段时间又出现,排查同学反馈是可能是有客户端错用,大量的读写数据导致内存吃不消,但是又苦于难以找出到底是谁在“捣乱”?
服务自治能力
云原生微服务仍然是目前最热门的技术架构(《40%的云原生开发者专注于微服务领域》),因此解决这部分群体的痛点,能够给企业带来最大的价值,这也是MSE的初衷;
阿里巴巴从08年开始单体架构演进走到现在,有着十几年的踩坑经验,也总结出了一套打法;MSE 的服务自治能力 ,目标是帮助用户快速发现问题,定位问题,解决问题,它主要围绕以下3个方面提供一系列的功能和工具:
可观测性
可观测性(Observability)是帮助微服务稳健运行的重要一环:
“系统是否还是正常的?”,
“终端用户的体验是否符合预期?”,
“如何在系统快要出问题之前主动发现系统的风险?”。
如果说监控可以告诉我们系统出问题了,那么可观测就可以告诉我们系统哪里出问题了,什么原因导致的问题。可观测不但可以判断系统是否正常,还可以在系统出现问题之前,主动发现系统风险。
监控大盘
MSE提供了丰富的监控大盘,无缝集成ARMS,免费为大家提供了丰富的可观测能力,可以借助这些指标,窥探容量情况,尽早发现问题,定位问题:
基础大盘
提供了基础设施的一些核心指标,主要如下:
- JVM监控
- 内存/CPU
- 网络流量
针对这些基础核心指标,建议至少要把内存/CPU的预警给加上,阀值设置到60%。
如果你的应用是时延敏感的,需要重点关注下JVM监控中的FullGC指标,这个会导致进程响应变慢。
网络流量指标,可以用来观测SLB的网络问题,例如流量突然涨到某个点,然后一直横盘,这时你的客户端也相应出现链接失败异常,这个就可能是达到了流量阀值。
概览大盘
概览大盘的指标,主要的目的是给大家快速展示一些核心的指标,能够有一个全局的视角:
- 客户端分布
- 当前配置/服务水位
- 链接数
- 配置/服务数
其中,客户端分布指标,可以帮助你看到系统中各种客户端版本的分布情况,结合Nacos的版本使用限制,找到高危版本,推动解决掉客户端带来的稳定性风险。
例如:近期Nacos发布了最新的版本使用约束,Nacos 1.4.1版本有严重的DNS解析异常问题,可以通过客户端分布指标,找到该客户端分布的情况,通知对应的业务进行升级。
业务大盘
Nacos服务/配置大盘
MSE提供的业务大盘里面的指标,都是精挑细选出来具有代表性的,能够帮助你全面了解注册配置中心的内部业务规模;大促来临,公司要求你评估注册配置中心当前容量规模,你可以通过这些指标数据进行一个全面的分析。Nacos的使用场景分为注册中心和配置中心,MSE根据这2个场景单独设置了大盘:
配置中心指标:
- 配置数量
- 配置监听数量
- 配置的TPS/QPS
- 读写RT
注册中心服务指标:
- 服务提供者/订阅者数量
- 注册中心QPS/TPS
- 注册中心读写RT
- 推送成功率/耗时/TPS
ZooKeeper TopN大盘
TopN大盘,对外部因素导致了服务端出现异常类的问题定位是非常高效的:
- Znode的大小Top N排序
- 客户端对ZooKeeper的读写TPS/QPS Top N
- 热点数据的TPS/QPS Top N
- 热点数据的监听数Top N
在日常开发中,你大概率遇到过ZooKeeper FullGC的场景,但是又不知道是具体什么原因引起的GC,可能是ZooKeeper在推送大量数据导致,又不确定是哪个热点数据被订阅导致的,也可能是有客户端往ZooKeeper里面写大数据,又找不到是哪个客户端写的?
我们看下2个客户端典型错用的场景:
1、客户端错用写入了大数据,订阅者非常多,导致ZooKeeper推送大量数据引起了FullGC:
往/99testWriteBig路径下面写入了大数据,可以通过Znode 大小TopN发现大数据节点
2、客户端错用频繁读某ZK,导致集群性能压力增加,响应延时,需要找到这个客户端:
一个SessionId为:0x1030871c8ed0004的客户端,频繁读取/99testRead节点,通过客户端 QPS TopN大盘,可以找到它,同时也能看到这个当前Server中最频繁读取的是哪个数据
指标预警
MSE给注册配置中心提供了核心指标的预警能力,建议把如下的指标都配置上:
- Nacos建议配置:
- 服务读写平均耗时:可以发现性能问题
- 配置长轮训链接数:可以发现容量问题
- 服务数/配置数:可以发现容量问题/客户端错用
- ZooKeeper建议配置:
- Znode数:可以发现客户端错用
- 连接数变化率:突降的话服务端节点可能出现了故障
- 单服务端链接数:可以发现容量问题/客户端错用
链路追踪
推送轨迹
推送轨迹,是指注册配置中心从 server 端到 client 端的一次推送链路上的相关信息展示。推送轨迹可以让用户非常方便的查询到,当开发过程中,出现如下问题,都可以通过推送轨迹快速定位到,极大的提高问题的排查效率:
- 客户端未收到服务推送
- 服务间调用出现异常
- 配置发布异常了
- 配置修改完发现某台机器不生效
- 需要查看配置中心变更及推送事件
MSE - Nacos 注册中心推送轨迹查询页面
MSE - Nacos 配置中心推送轨迹配置维度查询页面
集群诊断
一键诊断
如果说MSE提供的各种监控大盘,是辅助你去发现,定位问题,那么MSE即将提供的一键诊断功能,就是自动帮你去扫描发现风险,2者互相配合辅助,它目前主要从下面3个方面去做评估:
下图是一键诊断的功能页面,从上面可以看到目前你当前购买的引擎存在的风险,这些都是根据内置规则给自动扫描出来的,你不用再去人肉进行排查了,并且提供了合理的建议给到你进行改进:
平滑迁移MSE
上面给大家介绍的MSE服务自治功能,后续将继续完善打磨,提供更多的自治能力,包括事件统计、健康审计等功能,降低注册和配置中心的问题排查难度、提升可用性。
如果你现在还是自建的注册配置中心,建议尽快迁移上云,享受这些企业级服务,MSE提供了高效的迁移工具MSE Sync,提供双向同、自动服务获取、一键同步全部服务等能力,帮助用户更好的完成 Nacos、Zookeeper 注册配置中心的迁移。
MSE的官网文档,提供了详细的Step by Step的迁移操作文档:
《自建Dubbo ZooKeeper迁移到MSE ZooKeeper》
《自建Dubbo ZooKeeper注册中心迁移到MSE Nacos》
《自建Dubbo Nacos注册中心迁移到MSE Nacos》
如果迁移过程遇到问题或者需要定制,可以联系我们提供专家一对一的迁移支持。
购买MSE享受企业级服务
MSE 提供了 高可用、高性能、安全易用等核心竞争力!