简介: 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 内存的三节点集群在不同版本下的性能差异:

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

原文链接
本文为阿里云原创内容,未经允许不得转载。

Nacos 2.0 升级前后性能对比压测的更多相关文章

  1. Nacos 2.0 正式发布,性能提升 10 倍!!

    3月20号,Nacos 2.0.0 正式发布了! Nacos 简介: 一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. 通俗点讲,Nacos 就是一把微服务双刃剑:注册中心 + 配置中 ...

  2. 018 磁盘 IO 性能监控/压测工具(sar、iotop、fio、iostat)

    1 sar 命令查看当前磁盘 IO 读写 sar(System Activity Reporter 系统活动情况报告)是 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告 ...

  3. Nacos 2.0 正式发布,性能提升了 10 倍!!

    前不久,在3月20号,Nacos 2.0.0 正式发布了!我简单看了下官方的介绍,可能nacos未来逐渐会成为各大公司作为服务治理和配置中心的主要中间件. Nacos 简介:一个更易于构建云原生应用的 ...

  4. jmeter 之性能分布式压测

    背景: 当并发量达到一定数量时,单台测试设备不足以支撑,甚至会出现内存溢出等情况,解决这个问题就可用分布式测试,使用多台测试设备来达到更大的用户并发数. 原理: 1.一台设备作为调度机(master) ...

  5. 聊一聊和Nacos 2.0.0对接那些事

    前言 nacos 2.0.0 已经发布了 alpha1, alpha2 和 beta 三个版本了,部分测试报告也已经出来了. Nacos2.0.0-ALPHA2 服务发现性能测试报告 Nacos 2. ...

  6. 性能工具之Jmeter压测Hprose RPC服务

    概述 Hprose(High Performance Remote Object Service Engine),国人开发的一个远程方法调用的开源框架.它是一个先进的轻量级的跨语言跨平台面向对象的高性 ...

  7. <转>二十问全链路压测干货汇总(上)

    本文转载自:微信公众号-数列科技<二十问全链路压测干货汇总(上)> 最近几年全链路压测无疑成为了一个热门话题,在各个技术峰会上都可以看到它的身影. 一些大型的互联网公司,比如阿里巴巴.京东 ...

  8. 压测:celey backend为rabbitmq pk redis

    使用celery的backend异步获取结果,本文使用rabbitmq 和 redis分别作为backend,代码对比如下 from celery import Celery, platforms i ...

  9. jmeter(二十七)分布式压测注意事项

    之前的博客:jemter(二十三):分布式测试简略的介绍了利用jmeter做分布式测试的方法,当时只是介绍了背景和原因,以及基本的配置操作,有同学说写得不够详细. 正好今年双十一,我司的全链路压测,也 ...

  10. jmeter进行分布式压测过程与 注意事项

    jmeter命令行运行但是是单节点下的, jmeter底层用java开发,耗内存.cpu,如果项目要求大并发去压测服务端的话,jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式 ...

随机推荐

  1. 面试官:SpringBoot如何优雅停机?

    优雅停机(Graceful Shutdown) 是指在服务器需要关闭或重启时,能够先处理完当前正在进行的请求,然后再停止服务的操作. 优雅停机的实现步骤主要分为以下几步: 停止接收新的请求:首先,系统 ...

  2. 记录--Vue2屎山之 Table 屎山

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 Vue2 将在 2023 年年底停止维护了,但是 Vue2 的代码却不会在 2023 年消失,还会越来越多:难以想象几十万行或者几百 ...

  3. ES6常用数组方法及模拟实现

    这里给大家分享下我搜索到的几个ES6常用数组方法及模拟实现,废话不多说,上代码 Array.from 可以将一个类数组转换成数组 在出现Array.from这个方法之前,我们转换类数组的方法: Arr ...

  4. 从静态到动态化,Python数据可视化中的Matplotlib和Seaborn

    本文分享自华为云社区<Python数据可视化大揭秘:Matplotlib和Seaborn高效应用指南>,作者: 柠檬味拥抱. 安装Matplotlib和Seaborn 首先,确保你已经安装 ...

  5. 什么是HSV色彩空间

    BGR色彩空间是基于三基色而言,即红色.绿色.蓝色.而HSV色彩空间则是基于色调.饱和度和亮度而言的. 色调(H)是指光的颜色,例如,彩虹中的赤,橙,黄,绿,青,蓝,紫分别表示不同的色调.在OpenC ...

  6. 索引与查询使用的 collate 不一致导致无法使用索引

    索引与表的collate 不一致的情况下,会导致表上的索引不可用,这时要想使用索引,必须在SQL 语句指定建索引所用的collate. 数据库默认collate : test=# \l List of ...

  7. 探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较

    1. 数据格式介绍 数据格式是用于组织和存储数据的规范化结构,不同的数据格式适用于不同的场景.常见的数据格式包括JSON.YAML.XML.CSV等. 数据可视化 | 一个覆盖广泛主题工具的高效在线平 ...

  8. C#添加自定义控件

    1.vs 控件工具箱添加选项卡 2.输入选项卡名称 我这里是Emgucv 3.点击选择项 4.点击浏览 找到Emgu.CV.Platform.NetFramework.dll 这是emgucv的C#控 ...

  9. #cdq分治,树状数组#洛谷 5459 [BJOI2016]回转寿司

    题目 求 \[\sum_{i=1}^n\sum_{j=i}^{n}[L\leq \sum_{k=i}^j a_k\leq R] \] 分析(树状数组) 考虑前缀和,改为是否有两个数的差在\([L\si ...

  10. XML 简介及用法详解

    XML 是一种用于存储和传输数据的与软件和硬件无关的工具. 什么是XML? XML代表eXtensible Markup Language(可扩展标记语言).XML是一种与HTML非常相似的标记语言. ...