云服务器内容精选

  • 测试脚本 ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=${连接地址} acks=1 batch.size=16384 linger.ms=10 --topic ${Topic名称} --num-records 10000000 --record-size 1024 --throughput -1 --producer.config ../config/producer.properties bootstrap.servers:购买Kafka实例后,获取的Kafka实例的地址。 acks:消息主从同步策略,acks=1表示异步复制消息,acks=-1表示同步复制消息。 batch.size:每次批量发送消息的大小(单位为字节)。 linger.ms:两次发送时间间隔。 topic:创建Topic中设置的Topic名称。 num-records:总共需要发送的消息数。 record-size:每条消息的大小。 throughput:每秒发送的消息数。
  • 测试结果 测试场景一(实例是否开启SASL):相同的Topic(30分区、3副本、异步复制、异步落盘),实例分为开启SASL和未开启SASL,测试结果如下: 表3 测试结果 实例规格 磁盘类型 代理数量 TPS(开启SASL) TPS(未开启SASL) kafka.2u4g.cluster 超高I/O 3 100000 280000 kafka.4u8g.cluster 超高I/O 3 170000 496000 kafka.8u16g.cluster 超高I/O 3 200000‬ 730000 kafka.12u24g.cluster 超高I/O 3 320000 790000 kafka.16u32g.cluster 超高I/O 3 360000 1000000 测试场景二(同步/异步复制):相同的实例(超高I/O、3个代理、未开启SASL),不同复制机制的Topic,生产者进程数为3时,测试结果如下: 表4 测试结果 实例规格 是否同步落盘 副本数 分区数 TPS(同步复制) TPS(异步复制) kafka.2u4g.cluster 否 3 30 100000 280000 kafka.4u8g.cluster 否 3 30 230000 496000 kafka.8u16g.cluster 否 3 30 342000 730000 kafka.12u24g.cluster 否 3 30 383000 790000 kafka.16u32g.cluster 否 3 30 485000 1000000 测试场景三(是否同步落盘):相同的实例(超高I/O、3个代理、未开启SASL),不同落盘机制的Topic,测试结果如下: 表5 测试结果 实例规格 是否同步复制 副本数 分区数 TPS(同步落盘) TPS(异步落盘) kafka.2u4g.cluster 否 3 30 30000 280000 kafka.4u8g.cluster 否 3 30 32500 496000 kafka.8u16g.cluster 否 3 30 36100 730000 kafka.12u24g.cluster 否 3 30 37400 790000 kafka.16u32g.cluster 否 3 30 40400 1000000 测试场景四(不同磁盘类型):相同的Topic(30分区、3副本、异步复制、异步落盘),不同磁盘类型的实例,测试结果如下: 表6 测试结果 实例规格 代理数量 是否开启SASL TPS(高I/O) TPS(超高I/O) kafka.2u4g.cluster 3 否 110000 250000 kafka.4u8g.cluster 3 否 135000 380000 kafka.8u16g.cluster 3 否 213000 480000 kafka.12u24g.cluster 3 否 240000 577000 kafka.16u32g.cluster 3 否 280000 840000 测试场景五(不同分区数):相同的实例(超高I/O、3个代理、未开启SASL),不同分区数的Topic,测试结果如下: 表7 测试结果 实例规格 是否同步落盘 是否同步复制 副本数 TPS(3分区) TPS(12分区) TPS(100分区) kafka.2u4g.cluster 否 否 3 250000 260000 250000 kafka.4u8g.cluster 否 否 3 330000 280000 260000 kafka.8u16g.cluster 否 否 3 480000 410000 340000 kafka.12u24g.cluster 否 否 3 570000 750000 520000 kafka.16u32g.cluster 否 否 3 840000 1000000 630000
  • 测试环境 进行TPS测试前,您需要先构建如下的测试环境: 购买如表1所示实例,购买步骤请参考购买Kafka实例。 表1 实例参数 名称 代理数量 规格 是否开启SASL 磁盘类型 kafka-01 3 kafka.2u4g.cluster 是 超高I/O kafka-02 3 kafka.4u8g.cluster 是 超高I/O kafka-03 3 kafka.8u16g.cluster 是 超高I/O kafka-04 3 kafka.12u24g.cluster 是 超高I/O kafka-05 3 kafka.16u32g.cluster 是 超高I/O kafka-06 3 kafka.2u4g.cluster 否 超高I/O kafka-07 3 kafka.4u8g.cluster 否 超高I/O kafka-08 3 kafka.8u16g.cluster 否 超高I/O kafka-09 3 kafka.12u24g.cluster 否 超高I/O kafka-10 3 kafka.16u32g.cluster 否 超高I/O kafka-11 3 kafka.2u4g.cluster 否 高I/O kafka-12 3 kafka.4u8g.cluster 否 高I/O kafka-13 3 kafka.8u16g.cluster 否 高I/O kafka-14 3 kafka.12u24g.cluster 否 高I/O kafka-15 3 kafka.16u32g.cluster 否 高I/O 购买完成后,在实例详情页获取Kafka实例的内网明文连接地址。 购买实例后,创建如表2所示Topic,创建步骤请参考创建Kafka Topic。 表2 Topic参数 名称 是否同步复制 是否同步落盘 副本数 分区数 topic-01 否 否 3 30 topic-02 是 否 3 30 topic-03 否 是 3 30 topic-04 否 否 3 3 topic-05 否 否 3 12 topic-06 否 否 3 100 获取测试工具。 获取Kafka命令行工具2.7.2版本。 购买客户端服务器。 购买1台E CS 服务器(区域、可用区、虚拟私有云、子网、安全组与Kafka实例保持一致,Linux系统),具体步骤请参考购买弹性云服务器。 购买完成ECS后,需要在ECS中完成以下配置: 安装Java JDK,并配置JAVA_HOME与PATH环境变量。 export JAVA_HOME=/root/jdk1.8.0_231 export PATH=$JAVA_HOME/bin:$PATH 下载Kafka命令行工具2.7.2版本,并解压。 tar -zxf kafka_2.12-2.7.2.tgz
  • 测试结果 测试场景一(实例规格):相同Exchange、队列、生产者数量、消费者数量、不同的实例规格 测试参数如下: Exchange:类型为“direct”,非持久化,不会自动删除。 队列:类型“经典队列”,数量为“3”,非持久化,会自动删除。 生产者:数量为“3”。 消费者:数量为“3”。 表2 测试结果 实例规格 磁盘类型 代理数量 生产速率 消费速率 rabbitmq.2u4g.cluster 超高I/O 3 32052 25219 rabbitmq.4u8g.cluster 超高I/O 3 53774 47370 rabbitmq.8u16g.cluster 超高I/O 3 54727 45730 rabbitmq.16u32g.cluster 超高I/O 3 66896 51061 通过上表的测试结果,得出以下结论,仅供参考:实例规格越大,实例性能越高。
  • 测试脚本 测试脚本自动创建的Exchange类型为“direct”,队列特性为非持久化、自动删除,在测试fanout类型Exchange和仲裁队列时,需要在脚本后增加“--predeclared”,表示使用自己定义的Exchange和队列参数。 测试开启SSL的实例时,需要将“amqp://”修改为“amqps://”,表示以加密形式传输数据。 单队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z ${运行时间} 参数说明如下: 实例用户名:购买实例时设置的用户名。 实例密码:购买实例时设置的密码。 内网连接地址:购买实例后获取的内网连接地址。 队列名称:队列的名称。 生产者个数:生产者的数量。 消费者个数:消费者的数量。 运行时间:脚本的运行时间,单位为秒。 多队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -x ${生产者个数} -y ${消费者个数} -z ${运行时间} --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x 参数说明如下: 实例用户名:购买实例时设置的用户名。 实例密码:购买实例时设置的密码。 内网连接地址:购买实例后获取的内网连接地址。 生产者个数:生产者的数量。 消费者个数:消费者的数量。 运行时间:脚本的运行时间,单位为秒。 queue-%d:表示多个队列,队列名称前缀为queue-,%d表示变量,取值为从--queue-pattern-from数值到--queue-pattern-to数值的连续整数。例如 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3,表示3个队列,队列名称为queue-1、queue-2、queue-3。
  • 测试环境 进行性能测试前,您需要先构建如下的测试环境: 购买如表1所示RabbitMQ 3.8.35版本的集群实例,购买方法请参考购买RabbitMQ实例。 设置连接RabbitMQ密码时,建议不要使用特殊字符。如果使用特殊字符,在使用测试脚本时,需要对特殊字符进行转义处理,否则会报错。 购买“rabbitmq-2u4g”实例时,请开启公网访问,并在安全组中入方向规则中放通15672端口,以便在浏览器中访问WebUI界面。 表1 实例参数 名称 代理数量 规格 是否开启SSL 磁盘类型 rabbitmq-ssl 3 rabbitmq.2u4g.cluster 是 超高I/O rabbitmq-2u4g 3 rabbitmq.2u4g.cluster 否 超高I/O rabbitmq-4u8g 3 rabbitmq.4u8g.cluster 否 超高I/O rabbitmq-8u16g 3 rabbitmq.8u16g.cluster 否 超高I/O rabbitmq-16u32g 3 rabbitmq.16u32g.cluster 否 超高I/O 购买完成后,在实例详情页获取RabbitMQ实例的内网连接地址,并记录购买实例时设置的用户名和密码。如果是“rabbitmq-2u4g”实例,除了内网连接地址、用户名和密码外,还需要记录Web界面UI地址,此地址在后续登录WebUI界面设置镜像队列和惰性队列时需要使用。 在“rabbitmq-2u4g”实例中,登录WebUI,并设置镜像队列、惰性队列和仲裁队列。 在“rabbitmq-2u4g”实例的“/”Vhost下,创建“fanout”类型的Exchange,具体步骤请参考创建RabbitMQ Exchange。 获取测试工具rabbitmq-perf-test-2.18.0-bin.tar.gz。 购买客户端服务器。 购买区域、可用区、虚拟私有云、子网、安全组与RabbitMQ实例保持一致,规格为16U32G,Linux系统的ECS服务器,具体步骤请参考购买弹性云服务器。 购买完成ECS后,需要在ECS中完成以下配置: 安装Java JDK,并配置JAVA_HOME与PATH环境变量。 export JAVA_HOME=/root/jdk1.8.0_231 export PATH=$JAVA_HOME/bin:$PATH 下载rabbitmq-perf-test-2.18.0-bin.tar.gz,并解压。 tar -zxvf rabbitmq-perf-test-2.18.0-bin.tar.gz
  • 测试步骤 登录客户端服务器,进入“rabbitmq-perf-test-2.18.0/bin”目录下。 运行以下脚本,测试并记录不同实例规格下的生产速率和消费速率。 ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x 3 -y 3 -z 300 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 3 -y 3 -z 300 运行以下脚本,测试并记录rabbitmq-ssl实例在不同生产者数量、消费者数量、队列数量的生产速率和消费速率。 单队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqps://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z 300 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqps://test:******@192.168.0.150:5671 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300 多队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqps://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqps://test:******@192.168.0.150:5671 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3 运行以下脚本,测试并记录rabbitmq-2u4g实例在不同生产者数量、消费者数量、队列数量的生产速率和消费速率。 单队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z 300 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300 多队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -x ${生产者个数} -y ${消费者个数} -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3 运行以下脚本,测试并记录rabbitmq-2u4g实例在不同生产者数量、消费者数量、队列数量、队列类型的生产速率和消费速率,其中队列类型分别为“惰性”、“镜像”和“仲裁”。 单队列测试脚本(不包括仲裁队列): ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z 300 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300 多队列测试脚本(不包括仲裁队列): ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -x ${生产者个数} -y ${消费者个数} -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3 单队列测试脚本(仲裁队列): ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z 300 --predeclared 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -u queue-1 -x 1 -y 1 -z 300 --predeclared 多队列测试脚本(仲裁队列): ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -x ${生产者个数} -y ${消费者个数} -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to x --predeclared 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-direct -s 1024 -x 3 -y 3 -z 300 --queue-pattern 'queue-%d' --queue-pattern-from 1 --queue-pattern-to 3 --predeclared 运行以下脚本,测试并记录rabbitmq-2u4g实例的Fanout Exchange在不同消费者数量、队列数量的生产速率和消费速率。 单队列测试脚本: ./runjava com.rabbitmq.perf.PerfTest -h amqp://${实例用户名}:${实例密码}@${内网连接地址} -e ${Exchange名称} -s 1024 -u ${队列名称} -x ${生产者个数} -y ${消费者个数} -z 300 --predeclared 示例如下: ./runjava com.rabbitmq.perf.PerfTest -h amqp://test:******@192.168.0.150:5672 -e exchange-fanout -s 1024 -u queue-1 -x 1 -y 3 -z 300 --predeclared
  • 测试命令 生产命令: sh producer.sh -n "${连接地址}" -t ${Topic名称} -s ${消息大小} -w ${生产者线程数} 连接地址:购买RocketMQ实例后,获取实例的连接地址。 Topic名称:创建Topic时设置的Topic名称。 消息大小:1KB 生产者线程数:256 消费命令: sh consumer.sh -n "${连接地址}" -t ${Topic名称} -g ${消费组名称} 连接地址:购买RocketMQ实例后,获取实例的连接地址。 Topic名称:创建Topic时设置的Topic名称。 消费组名称:创建消费组时设置的消费组名称。
  • 测试结果参考 表4 测试结果参考 性能指标 rocketmq.b2.large.4 rocketmq.b2.large.8 rocketmq.b2.large.12 实例生产速率 1008.500 Count/s 2019.710 Count/s 3011.640 Count/s 实例消费速率 1008.520 Count/s 2019.710 Count/s 3010.590 Count/s 平均生产时延 26.336 ms 8.788 ms 5.876 ms
  • 测试环境 进行测试前,您需要先构建如下的测试环境: 购买如表1所示实例,购买步骤请参考购买实例。 表1 实例参数 名称 规格 存储空间 ACL访问 公网访问 rocketmq-01 rocketmq.b2.large.4 超高I/O 300GB 关闭 关闭 rocketmq-02 rocketmq.b2.large.8 超高I/O 300GB 关闭 关闭 rocketmq-03 rocketmq.b2.large.12 超高I/O 300GB 关闭 关闭 创建如表2所示Topic,创建步骤请参考创建Topic。 表2 Topic参数 名称 消息类型 topic-01 普通 创建如表3所示消费组,创建步骤请参考创建消费组。 表3 消费组参数 名称 最大重试次数 是否允许以广播模式消费 是否顺序消费 group-01 16 否 否 购买1台ECS服务器(区域、可用区、虚拟私有云、子网、安全组与RocketMQ实例保持一致,Linux系统),具体步骤请参考购买弹性云服务器。 在ECS中安装Java JDK,并配置JAVA_HOME与PATH环境变量。 export JAVA_HOME=/root/jdk1.8.0_231 export PATH=$JAVA_HOME/bin:$PATH 下载测试工具。 wget https://dms-demos.obs.cn-north-1.myhuaweicloud.com/rocketmq-tutorial.zip 解压测试工具。 unzip rocketmq-tutorial.zip
  • 测试步骤 创建Redis缓存实例。 创建3台弹性云服务器(ECS),ECS选择与实例相同可用区、VPC、子网和安全组。 如果是测试单机或主备实例,创建1台ECS即可。 在每台ECS上安装redis-benchmark。可通过以下两种方式安装Redis-server,安装Redis-server的同时,会同步安装benchmark。 安装方法一: 下载redis客户端,此处以redis-6.0.9版本为例。 wget http://download.redis.io/releases/redis-6.0.9.tar.gz 解压客户端压缩包。 tar xzf redis-6.0.9.tar.gz 进入redis-6.0.9的src目录下。 cd redis-6.0.9/src 编译源码。 make 编译完成后,工具一般在redis-x.x.x的src目录下。 查看是否有redis-benchmark可执行文件。 ls 将工具安装到系统中。 make install 安装方法二: 根据ECS的不同的操作系统直接安装Redis-server,下面以ubuntu和CentOS系统为例: ubuntu系统 sudo apt update sudo apt install redis-server CentOS系统 sudo yum install epel-release sudo yum update sudo yum -y install redis 每台ECS上执行测试命令。 redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connect_number} -d {datasize} -t {command} 参数参考值:-c {connect_number}:200,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32。 -h表示实例的 域名 连接地址或IP地址。 -p表示实例的端口,默认为6379。 -a表示实例的连接密码,免密连接的实例无需输入-a {password}。 -t表示执行具体测试命令合集。例如只测试set命令时,使用-t set;如果要测试ping、get、set命令,则使用 -t ping,set,get,命令间使用“,”分隔。 -c表示客户端连接数。 -d表示单条数据大小,单位Byte。 -n表示测试包数量。 -r表示使用随机key数量。 不断调整客户端连接数,执行4,得到最大的QPS(Query Per Second,表示每秒处理的读写操作数,单位:次/秒)。 取3台测试ECS得到的每秒操作数总和,即为对应规格的性能数据。 如果测试Redis集群,建议每台测试ECS各开启两个benchmark客户端。 redis-benchmark 测试cluster集群实例时需要加 --cluster 参数,其他实例类型不需要加。 如果想对cluster集群的最大连接数进行性能压测,但是压测到1万连接时程序退出,或者报错 Cannot assign requested address。这说明是测试用的ECS本机性能不足,请先检查自己是否只用了1台ECS进行压测。想要对集群压测,建议准备3台ECS,每台ECS起3个redis-benchmark来测试redis实例的最大连接数。
  • redis-benchmark常用命令举例 单机、主备、读写分离和proxy集群的测试命令: ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} -t {command} cluster集群测试命令: ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} --cluster -t {command} 测试短连接: ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} -k 0 -t {command} 测试空闲连接: ./redis-benchmark -h {IP或域名} -p 6379 -a {pwd} -c {clients} -I
  • redis-cli常用命令举例 连接实例: ./redis-cli -h {IP} -p 6379 指定连接某个DB: ./redis-cli -h {IP} -p 6379 -n 10 连接cluster集群实例: ./redis-cli -h {IP} -p 6379 -c 测试时延(原理是发ping命令): ./redis-cli -h {IP} -p 6379 --latency 执行scan扫描匹配指定模式的key: ./redis-cli -h {IP} -p 6379 --scan --pattern '*:12345*'
  • redis-cli常用命令举例 连接实例: ./redis-cli -h {IP} -p 6379 指定连接某个DB: ./redis-cli -h {IP} -p 6379 -n 10 连接cluster集群实例: ./redis-cli -h {IP} -p 6379 -c 测试时延(原理是发ping命令): ./redis-cli -h {IP} -p 6379 --latency 执行scan扫描匹配指定模式的key: ./redis-cli -h {IP} -p 6379 --scan --pattern '*:12345*'
  • 获取redis-cli和redis-benchmark 创建弹性云服务器(ECS),根据不同的操作系统直接安装Redis-server,下面以ubuntu和CentOS系统为例: 直接编译安装Redis或者使用yum,apt安装Redis-server,安装Redis-Server的同时,会同步安装benchmark。 ubuntu系统 sudo apt update sudo apt install redis-server CentOS系统 sudo yum install epel-release sudo yum update sudo yum -y install redis 也可以直接下载安装包,进行解压和编译,以下载redis-6.0.9版本为例: 下载redis-6.0.9客户端。 wget http://download.redis.io/releases/redis-6.0.9.tar.gz 解压客户端压缩包。 tar xzf redis-6.0.9.tar.gz 进入redis-6.0.9的src目录下。 cd redis-6.0.9/src 编译源码。 make 编译完成后,工具一般在redis-x.x.x的src目录下。