Nacos 性能报告

目录

一、测试目的

二、测试工具

 三、测试环境

1. 环境

服务端

客户端

2. 启动参数

服务端

客户端

四、测试场景

1. 大规模服务注册后达到稳定状态

场景描述

2. 大规模服务注册达到稳定状态后,部分实例频繁发布

场景描述

五、测试数据

1. 大规模服务注册后达到稳定状态

​编辑 结果分析

2. 大规模服务注册达到稳定状态后,部分实例频繁发布

结果分析

六、测试结论


一、测试目的

Nacos2.0 对连接模型、服务发现的数据模型及运作模式进行了大范围的重构,因此需要在相同或类 似的场景下,了解 Nacos2.0 的服务发现性能负载和容量与 Nacos1.X 的区别,帮助用户更快的运 用评估 Nacos 系统负荷。
本次测试不再仅关注某⼀接口或能力的性能区别,而是期望模拟较真实的大规模使用场景下,Nacos1.X 和 Nacos2.0 服务发现模块的性能区别,提供更加准确的参考。

二、测试工具

我们使用自研的 PAS 性能评估服务平台进行压测,其原理是基于利用 JMeter 引擎,使用 PAS 自动生成的 JMeter 脚本,进行智能压测。

 三、测试环境

1. 环境

服务端

客户端

 

2. 启动参数

服务端

${JAVA_HOME}/bin/java -DembeddedStorage=true -server -Xms10g -Xmx10g -Xmn4g -XX:Met
aspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapD
umpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/nacos/logs/java_heapdump.hpr
of -XX:-UseLargePages -Dnacos.member.list= -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA
_HOME}/lib/ext -Xloggc:/home/admin/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetai
ls -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:Number
OfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/home/admin/nacos/plugins/health, /home/admin/nacos/plugins/cmdb -Dnacos.home=/home/admin/nacos -jar /home/admin/n
acos/target/nacos-server.jar --spring.config.additional-location=file:/home/admin/nacos/conf/
--logging.config=/home/admin/nacos/conf/nacos-logback.xml --server.max-http-header-size=
524288 nacos.nacos

# Nacos1.4.1 的 application.properties 添加下列参数
server.tomcat.max-http-post-size=-1
server.tomcat.max-connections=20000
server.tomcat.max-threads=1000
server.tomcat.accept-count=1000
注意: Nacos2.0.0-BETA 服务端关闭升级用的双写。

客户端

${JAVA_HOME}/bin/java -Xms4g -Xmx4g -Xmn2g

四、测试场景

1. 大规模服务注册后达到稳定状态

场景描述

启动 200 台施压机,每台施压机 500 个线程,每个线程模拟⼀个 nacos 客户端,每个客户端从服务池中随机选择 5 个服务进行注册,随后随机订阅 5 个服务池中的服务;共 10w 个客户端,10w个服务,50w 服务实例,观察注册过程中的服务端性能指标及推送 SLA。
注册完成后放置,达到稳定状态后再观察服务端性能指标,整个过程持续 20min。
之后所有施压机关闭,观察集群注销的服务端性能指标。

2. 大规模服务注册达到稳定状态后,部分实例频繁发布

场景描述

再次运行上述测试场景,当注册服务达到稳定状态后, 对其中 10~20% 的实例,每隔 10 秒进行 ⼀次变更(重新注册或注销再注册)。
测试服务端在频繁发布/上下线场景下的系统指标和推送情况。持续进行 30min。

五、测试数据

1. 大规模服务注册后达到稳定状态

 结果分析

 

Nacos2.0 注册时,有大量的并发注册,因此有大量的推送任务需要同时执行,即使服务端有 500 ms 推送等待并将 500ms 内该服务的变化进行合并,但仍然有大量推送同时推送到客户端中,对 客户端施压机造成比较大的压力,因此推送出现了超时现象,但推送有重试机制,最终会推送成功。由于有部分推送任务发生了重试,且施压机在接受推送时的延迟较高,因此平均 SLA 和 90% SLA 均超过 1s。最大 SLA 出现了超过 10s 的情况, 原因是该客户端推送⼀直超时,重试了很多次, 最终才推送成功。
注销时,由于大量订阅者随着链接断开⼀起被注销,因此推送任务大减,推送 SLA 及失败率均大幅降低。
整个过程中 CPU 和 LOAD 均处于较低水位,且过程中完全没有 Full GC。
整体符合预期。
Nacos 1.X 规模在 200 台机器*大于 200 线程时,服务端无法达到稳定状态,在 500 线程和 250 线程时,Full GC 非常频繁,服务端出现节点间无法正常通信的情况。 大致推算每台服务端 TPS 至少 50w/10/5=1w(单纯心跳),显然有些超出处理能力(最大 tomcat 线程只有 1k,CPU 只 有 8C)。在该场景下,CPU 几乎都是 GC 消耗,因此抖动很大;推送由于 FullGC 几乎全部超时, 客户端测大量连接超时,可以理解为无法支撑这个量级的客户端数和实例数。
当 200 台机器* 100 线程时,服务端处于可用状态,Full GC 不是那么频繁,但实例数达不到稳定 状态,⼀直有实例被移除。推测为心跳无法及时处理,类似 ISSUE 。由于⼀直在摘除实例,又⼀直 由心跳注册实例,因此 CPU ⼀直抖动且数值不低;推送方面,虽然实例⼀直在变更,但是相对比 较分散,所以推送量不大,平均 20~30 次/s,推送是可以成功的。
当 200 * 60 时,服务端很快达到稳定状态,也没有触发 Full GC,CPU 和 LOAD 也都处于低水 位,但是平均每台服务端 6k 个实例,相比 Nacos2.0,仅有约 10%。所以推送也没有太大压力。
稳定状态时依旧有 10% 的 CPU 损耗,主要是心跳请求和客户端每 10s 查询⼀次订阅服务的轮训 请求导致。
总的来说,Nacos2.0,在稳定场景的能力至少是 Nacos1.X 的 9 倍,达到稳定状态后,Nacos2.0 的表现也更加优秀,在客户端和实例数约 10 倍数量的情况下,却有更小的 CPU 消耗。

2. 大规模服务注册达到稳定状态后,部分实例频繁发布

结果分析

Nacos2.0 频繁变更场景的系统指标和批量启动时没有太大的区别,但是推送方面则有很大改善,主 要是不会出现瞬时的单台客户端推送风暴,客户端不会有处理积压和延迟,不再出现推送超时,推送失败率归 0。SLA 主要耗时均在服务端的延迟合并队列中。

 

Nacos1.X 由于 200 * 500 等场景无法达到稳态,因此频繁变更场景直接使用 200 * 60 的压力规 模。
同样,频繁变更场景的系统指标和批量启动时没有太大的区别,比稳态时略高,符合预期。过程中 无 Full GC。
由于 UDP 推送的不可靠性,在推送数量增加后,开始出现无 ack 回复的情况。可见客户端的轮询 查询保证数据⼀致性是非常必要的。
总的来说,Nacos2.0,在频繁变更的场景也能在较大的规模下稳定支撑,能力至少是 Nacos1.X 的9 倍。

六、测试结论

  • Nacos2.0 能够较无压力的支撑 10w 级的客户端和 50w 级的服务实例,在模拟实际场景上有较 大的优化,特别是针对 dubbo 的接口级服务发现的单客户端注册多服务的场景,有更大的优化 幅度,符合预期;
  • Nacos1.X 能够支撑万级的客户端和数万级的服务实例,平均每台节点的真实场景容量上限约在 6000~7000 实例。符合预期;
  • Nacos1.X 和 Nacos2.0 在容量上有较大的差别,Nacos2.0 承载能力至少是 Nacos1.X 的 9 倍;
  • 在达到稳态后的频繁变更场景,Nacos1.X 和 Nacos2.0 都没有太大问题。但是 Nacos2.0 在规 模上更大,实际的频繁变更幅度也更大,可见在该场景 Nacos2.0 的性能依旧是 Nacos1.X 的 9 倍。

注意:本次只测试临时实例,未涉及持久实例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/10039.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试基础

软件测试的定义、软件测试的目的 IEEE:The process of running or testing the system manually or automatically by using tools, in order to verify whether it satisfies the requirements or to make clear the differences between the actual outcome and…

DDoS攻击实验笔记

DoS&DDoS简介 DoS(Denial of Service),拒绝服务攻击是通过一些方法影响服务的可用性,比如早期主要基于系统和应用程序的漏洞,只需要几个请求或数据包就能导致长时间的服务不可用,但易被入侵检测系统发现。 DDoS(Distributed D…

日撸 Java 三百行day28-30

文章目录说明day28-30 Huffman 编码 (节点定义与文件读取)1.建树过程(以图为例)2.哈夫曼树特点3.分析代码过程3.1 抽象成员变量3.2结合文章梳理思路1.读文本2.解析文本内容:3.建树4.生成哈夫曼编码5.编码6.解码4.其他4.1 java 类型强转4.2 ja…

linux线程调度策略

系统中既有分时调度,又有时间片轮转调度和先进先出调度 学习这个主要为了在linux多线程中,解决几条指令间延时在1-2ms内; 1.比如之前处理过:给一个板子发送一个can指令,接着需要给另外一个模块发送移动指令&#xff0c…

用ChatGPT怎么赚钱?普通人用这5个方法也能赚到生活费

ChatGPT在互联网火得一塌糊涂,因为它可以帮很多人解决问题。比如:帮编辑人员写文章,还可以替代程序员写代码,帮策划人员写文案策划等等。ChatGPT这么厉害,能否用它来赚钱呢?今天和大家分享用ChatGPT赚钱的5…

关键词数据分析-搜索词和关键词分析工具

要搜索热门关键词获取,可以采用以下几种方法: 使用百度指数:百度指数是一个实用的工具,可用于查看关键词的热度趋势、搜索量等数据。在百度指数中,您可以输入您要搜索的关键词,并查看近期的相关数据。这可以…

短视频矩阵怎么玩?抖音短视频矩阵运营详细攻略!

短视频矩阵的工作包括确定目标受众和平台、制定短视频内容策、短视频制作与发布,私信评论维护,短视频数据分析等。传统短视频矩阵需要大量的人力物力,操作起来比较复杂,使用短视频矩阵工具则可以提供极大的便利。      1、确定…

Vue项目中关于全局css的处理

Vue项目中关于全局css的处理步骤一:定义声明全局CSS的样式文件(common.scss)步骤二:挂载到全局封装一:对common.scss拆分封装二:新建index.scss,对elementPlus或者element-ui样式进行覆盖封装三:variable.s…

GitLab CI/CD 新书发布,助企业降本增效

前言 大家好,我是CSDN的拿我格子衫来, 昨天我的第一本书《GitLab CI/CD 从入门到实战》上架啦,这是业内第一本详细讲解GitLab CI/CD的书籍。 历经无数个日夜,最终开花结果。感触良多,今天就借这篇文章来谈一谈这本书的…

Java基础(十五):异常处理

Java基础系列文章 Java基础(一):语言概述 Java基础(二):原码、反码、补码及进制之间的运算 Java基础(三):数据类型与进制 Java基础(四):逻辑运算符和位运算符 Java基础(五):流程控制语句 Java基础(六)&#xff1…

Linux内核设备驱动设备树概念与使用

一、设备树概念以及作用 1.1设备树概念 设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(DeviceTree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比…

python入门:cl.exe‘ failed with exit status 2错误通用解决方案

文章目录 错误一错误二pypi.org独立安装正确安装错误一 error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ 这个错误在windows系统上安装python工…

Spring《三》DI依赖注入

🍎道阻且长,行则将至。🍓 上一篇:Spring《二》bean的实例化与生命周期 下一篇:敬请期待 目录一、setter注入🍉1.注入引用数据类型2.注入简单数据类型二、构造器注入🍊1.注入引用数据类型2.简单数…

Spring 源码分析(二)——GenericBeanDefinition 分析

BeanDefinition 中存储着 Bean 的定义信息,它具有属性值、构造函数参数值以及具体实现 Bean 提供的进一步信息,在学习 Spring 的 Bean 初始化流程之前,还是非常有必要先了解一下 BeanDefinition。 一、注册 Bean 示例 首先,本文…

SpringCloud微服务技术栈之网关服务Gateway

文章目录SpringCloud微服务技术栈之网关服务Gateway前言网关服务Gateway的基本概念Gateway的体系结构Gateway的主要功能网关服务Gateway的架构设计架构设计方案示例代码网关服务Gateway的实践操作1. 创建工程2. 配置路由规则3. 实现过滤器4. 集成服务注册中心5. 启动网关服务器…

2020年11月信息系统项目管理师真题(综合+案例)

请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 1、( )使系统的描述及信息模型的表示与客观实体相对应,符合人们的思维习惯,有利于系统开发过程中用户与开发人员的…

Redhat6.7离线安装rabbitmq

一、下载资源文件(.rpm文件) 链接: https://pan.baidu.com/s/1j2Ze_Jjm0oMrP-r95PPCtA?pwdv3is 提取码: v3is 复制这段内容后打开百度网盘手机App,操作更方便哦 创建rabbit文件夹Mkdir rabbit 三、通过ftp上传文件 四、安装erlang环境 …

强大到让人无法想象的ChatGPT-5即将发布,上千名人士却紧急叫停

目录 【ChatGPT 5简介】 【ChatGPT 5的潜在应用】 【ChatGPT 5的潜在危险】 ChatGPT4还没有好好体验,比GPT4强大1000倍的ChatGPT5又即将发布!届时将彻底改变人工智能领域,并改变我们现有的世界 【ChatGPT 5简介】 OpenAI计划在2023年12月发…

面试了上百位性能测试后,我发现了一个令人不安的事实...

在企业中负责技术招聘的同学,肯定都有一个苦恼,那就是招一个合适的测试太难了!若要问起招哪种类型的测试最难时,相信很多人都会说出“性能测试”这个答案。 每当发布一个性能测试岗位,不一会就能收到上百份简历&#…

kafka-4 生产者和消费者

kafka的生产者和消费者四、 生产者4.1 分区分配策略4.2 副本和消息消费4.2.1 副本(AR、ISR、OSR)4.2.2 HW与LEO4.2.3 ISR 集合和 HW、LEO的关系五、消费者5.1 分区分配策略5.2 消费者offset的存储四、 生产者 4.1 分区分配策略 (1&#xff…