vlambda博客
学习文章列表

Nacos 2.0 升级前后性能对比压测




Nacos 2.0  通过升级通信协议和框架、数据模型的方式将性能提升了约 10 倍,解决继 Nacos 1.0 发布逐步暴露的性能问题。 本文通过压测 Nacos 1.0,Nacos 1.0 升级 Nacos 2.0 过程中,Nacos 2.0 进行全面性能对比,直观的展示 Nacos 2.0 所带来的性能提升。
 

Nacos 2.0 升级前后性能对比压测

压测准备




环境准备




为了方便 Nacos 部署升级和展示核心性能指标,我们是从阿里云微服务引擎 MSE( https://cn.aliyun.com/product/aliware/mse )中购买的一个 2 核 CPU+4G 内存的三节点 Nacos 集群。

压测模型




为了展示不同规模下的系统表现,我们采用逐步增压的方式进行压测,将压力分为 3个批次进行逐步启动,并观察每个批次下集群的运行表现。同时会在压力集群之外,再增加一个 Dubbo 服务的 Demo ,并使用 Jmeter 以 100 TPS 的压力不停的调用,以模拟不同压力下,对实际业务调用存在的可能影响。
 
压测过程中,会在适当的时候对服务端和客户端进行升级;服务端的升级将直接使用 MSE 提供的一键升级功能,客户端的升级会使用分批次轮流重启的方式进行。
 


Nacos 2.0 升级前后性能对比压测



压测过程




Nacos1.X Server + Nacos1.X Client
 
首先启动第一批施压集群,对 MSE Nacos1.2.1 进行施压,在 6000 个 Providers 的压力下,集群稳定时 CPU 大约 25% ,能够稳定保持 6000 实例。
 


Nacos 2.0 升级前后性能对比压测


Nacos 2.0 升级前后性能对比压测



随后启动第二批施压集群,增加 4000 个 Provider ,合集 10000 个 Provider 。此时集群峰值 CPU 已经达到 60% ,稳定运行时大约在 45% 左右,集群能够稳定运行。
 


Nacos 2.0 升级前后性能对比压测


Nacos 2.0 升级前后性能对比压测



在前两批的压力下,集群没有出现稳定性问题,所以 Dubbo 的调用保持正常,没有错误发生。
 


Nacos 2.0 升级前后性能对比压测



当第三批施压集群启动之后,压力总计 14000 个 Provider 。此时集群先是短暂的注册到 13000 个实例,之后很快出现实例数下跌,CPU 跑满的问题。并且缩小时间范围可以看到,下跌后的实例仍然在小范围抖动。
 


Nacos 2.0 升级前后性能对比压测




Nacos 2.0 升级前后性能对比压测




Nacos 2.0 升级前后性能对比压测



同时 Dubbo 的调用出现错误,从 Consumer 的日志可以看出,是由于服务端无法支撑这个级别的压力,导致 Dubbo Provider 被摘除,所以调用的时候出现了 No provider 的错误。
 


Nacos 2.0 升级前后性能对比压测


Nacos 2.0 升级前后性能对比压测





Nacos2.X Server + Nacos1.X Client
 
由于服务端升级期间,会进行实例的双写操作,因此在升级过程中服务端存储的实例数会是实际实例值的两倍。根据上述测试结果,需要先将实例数回滚回第一批 6000 实例之后,或是升级配置扩容机器之后再尝试升级。本文使用回滚压力的方式,先停止后启动的施压集群。让集群恢复正常后再执行升级。
 


Nacos 2.0 升级前后性能对比压测




Nacos 2.0 升级前后性能对比压测


Nacos 2.0 升级前后性能对比压测



从监控图中可以看出,在停止后两批压力后,集群很快就恢复到了正常,运行稳定,Dubbo 调用也恢复正常。之后使用 MSE 的升级功能,进行升级。升级过程中由于双写的性能损耗,导致 CPU 有较大的抖动;而且因为双写导致的实例数翻倍,实际上相当于 12000 实例的极限压力,服务端仍然有一定的抖动,因此导致了些许 Dubbo 的错误。若是在非极限压力下升级,将不会有此影响。
 


Nacos 2.0 升级前后性能对比压测




Nacos 2.0 升级前后性能对比压测


Nacos 2.0 升级前后性能对比压测



随着服务端升级完成停止双写,消除了双写带来的性能损耗,CPU 使用降低并趋于稳定,同时实例数也不再抖动,Dubbo 调用完全恢复;如同 1.X 服务端一样,分两个批次启动施压集群,对比两个版本间在相同压力下的性能表现。
 


Nacos 2.0 升级前后性能对比压测


Nacos 2.0 升级前后性能对比压测


Nacos 2.0 升级前后性能对比压测





由于客户端依旧使用的是 1.X 的客户端,服务端的使用水位依然非常高,在全部压力启动后,CPU 几乎达到 100% ;虽然没有像 1.X 服务端一样,出现大规模实例下跌,但是运行一段时间后依旧有少量的实例抖动,说明仅升级 Nacos 服务端到 2.0 版本能有一定的改善,但是没有彻底解决性能问题。
 


Nacos 2.0 升级前后性能对比压测



Nacos2.X Server + Nacos2.X Client
 
为了完全释放 Nacos 2.0 的性能,还需要将施压集群的客户端也升级到 2.0 以上版本。同样将分 3 个批次进行替换,期间由于 Provider 进行了重启,服务端有出现实例的下跌再恢复属于正常现象。随着施压集群的升级,可以发现 CPU 有了非常明显的下降,最终达到稳定时,CPU 由最初的接近 100% ,降低到 20%,集群稳定运行 14000 个实例。
 


Nacos 2.0 升级前后性能对比压测




Nacos 2.0 升级前后性能对比压测


Nacos 2.0 升级前后性能对比压测





压测结果




如上所述,我们能够得到 2 核 CPU+4G 内存的三节点集群在不同版本下的性能差异:


服务端版本
客户端版本
压力规模
集群稳定性
CPU使用
Nacos1.X
Nacos1.X
14000
完全不稳定
100%
Nacos2.X(升级中)
Nacos1.X
6000
有一定抖动
100%
Nacos2.X
Nacos1.X
14000
有一定抖动
100%
Nacos2.X
Nacos2.X
14000
稳定
20%


 
由此可见,Nacos 2.0 确实对性能有较大的提升,新用户建议直接全部采用 Nacos 2.0,老用户建议先升级 Server 端,然后在逐步升级客户端释放红利。最后从整个压测视角的监控,来直观的感受一下不同版本在不同阶段的性能表现: