简介: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 通过升级通信协议和框架、数据模型的方式将性能提升了约 10 倍,解决继 Nacos 1.0 发布逐步暴露的性能问题。本文通过压测 Nacos 1.0,Nacos 1.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 提供的一键升级功能,客户端的升级会使用分批次轮流重启的方式进行。

压测过程

Nacos1.X Server + Nacos1.X Client

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

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

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

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

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

Nacos2.X Server + Nacos1.X Client

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

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

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

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

Nacos2.X Server + Nacos2.X Client

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

压测结果

如上所述,我们能够得到 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 端,然后在逐步升级客户端释放红利。最后从整个压测视角的监控,来直观的感受一下不同版本在不同阶段的性能表现:

更多信息

​点击https://www.aliyun.com/product/aliware/mse,了解更多 MSE Nacos 2.0 相关信息。

原文链接:https://developer.aliyun.com/article/785090?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

Nacos 2.0 升级前后性能对比压测相关推荐

  1. ufs2.0测试软件,最新的UFS2.0闪存性能对比,小米MIX亮了

    原标题:最新的UFS2.0闪存性能对比,小米MIX亮了 智能手机配置上,用户最关注的就是处理器,而对于内存组合,基本上都是大一点就行了,但是对于厂商来说,内存组合很重要,因为要靠它们进行标准版.高配版 ...

  2. TiDB v5.4.0 与 v6.0.0 的 sysbench 性能对比

    作者:张能凤 原文来源: https://tidb.net/blog/aa843cf0 测试说明 因资源有限,用的 3 台 SAS 盘低配机器混布的TiDB集群,先安装 TiDB v5.4.0 集群做 ...

  3. PolarDB-X 1.0和RDS性能对比之吞吐量对比(三)

    测试环境: PolarDB-X 标准版:16C64G(1台) RDS MySQL5.7: 16C64G(4台) ECS 压测机: 8C16G(1台) sysbench 0.5 通过前期的测试,Pola ...

  4. PolarDB-X 1.0和RDS性能对比之吞吐量对比(二)

    测试环境: PolarDB-X 标准版:16C64G(1台) RDS MySQL5.7: 16C64G(4台) ECS 压测机: 8C16G(1台) sysbench 0.5 通过阿里云官方文档,找到 ...

  5. locust2.0+教程:007 - 分布式压测执行

    前言: locust2.0+教程:001 - 安装和目录结构 locust2.0+教程:002 - 快速使用 locust2.0+教程:003 - headless无界面模式 locust2.0+教程 ...

  6. 从0到1构建美团压测工具

    背景 美团内部的RPC服务大多构建在Thrift之上,在日常开发服务的过程中,需要针对这些服务进行压力测试(以下简称压测)来发现潜在问题.常用的方法有: 使用一些脚本语言如:Python.Ruby等, ...

  7. Mysql5.1 , Mysql5.5, Mysql5.7, Mysql8.0各个版本性能对比

    Mysql5.5 特性,相对于Mysql5.1 性能提升 默认InnoDB plugin引擎.具有提交.回滚和crash恢复功能.ACID兼容. 行级锁(一致性的非锁定读 MVCC). 表与索引存储在 ...

  8. jmeter 5.5+influxdb 2.0+grafana v9.3.2 - 压测看板setup

    Docker set up 安装docker应用 https://docs.docker.com/desktop/install/mac-install/,在官网下载docker安装包,和安装其他的m ...

  9. lamda 对比两个list_正式支持多线程!Redis 6.0与老版性能对比评测

    前天晚上不经意间看到 Redis 作者 Salvatore 在 RedisConf 2019 分享,其中一段展示了 Redis 6 引入的多线程 IO 特性对性能提升至少是一倍以上,内心很是激动,迫不 ...

最新文章

  1. PHP中self和static的区别,php中self与static的区别
  2. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动最大值(rolling max)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额最大值
  3. windows共享wifi
  4. linux iscsi 服务端,Linux的iscsi磁盘服务
  5. Windows驱动开发学习笔记(六)—— Inline HOOK
  6. linux常见分区格式,linux 分区格式
  7. javax.cache_新的Java缓存标准(javax.cache)
  8. 精简指令和复杂指令计算机,CPU精简指令集和复杂指令集的区别
  9. 创业者需要广泛了解市场中相关产品的基本情况
  10. 解决安装Discuz!插件时提示“对不起,您安装的不是正版应用,安装程序无法继续执行”的方法...
  11. linux系统能运行iis吗,Linux 下可以安装 IIS 吗
  12. 计算机二级的图片尺寸,2021计算机二级照片是几寸 大小千万要记住咯
  13. java使用pdfbox将PDF转化为图片
  14. 2009.9.13 网摘总结
  15. Update Strategy小记
  16. 【题解】codeforces 1023G. Pisces 最长反链 数据结构维护差分 启发式合并
  17. 云存储平台——Seafile搭建
  18. Oracle常见授权与回收权限——grant和revoke
  19. jeecg中高级查询的写法
  20. MySQL-8.0 RESTART命令远程重启mysqld

热门文章

  1. Hyper-V 和Ubuntu Server 16.04 配置静态IP
  2. Python 协程 asyncio 极简入门与爬虫实战
  3. B 站硬件大佬在 GitHub 上开源了一款神器
  4. 【Git笔记3】关于撤销、删除、恢复的那些事儿
  5. 程序员最讨厌的9句话,你可有补充? 1
  6. 如何在Windows系统上使用Object Detection API训练自己的数据?
  7. 活动执行手册_1-200家门店,标准化不等于手册!而是标准+训练+督导,缺一不可!...
  8. 通过doi可以检索到文献_怎么查看中外文献的期号和卷号?
  9. python定义函数计算斐波那契公式前20的项_Python3算法之二:斐波那契函数
  10. canvas 实现图片局部模糊_JavaScript中的图片处理与合成(四)