云服务器内容精选

  • 独享型实例测试列表 表1 读写模式测试数据(X86架构多AZ场景) 模型 表数量 表数据量 线程 规格 TPS QPS 读写模式 25 250000 64 2c8g 1708.43 34168.62 64 2c16g 1645.88 32917.69 128 4c16g 4470.64 89412.78 128 4c32g 4927.94 98558.88 64 8c32g 8073.66 161473.22 64 8c64g 8570.03 171400.69 256 16c64g 14815 296300.07 256 16c128g 15975.88 319517.62 512 32c128g 21080.55 421611.01 512 32c256g 22612.02 452240.5 512 60c256g 24033.17 480663.46 512 64c512g 23644.1 472882.17
  • 测试指标 本次模拟的广告业务场景(RTA)业务规模大致抽象为:1TB数据量、160w QPS、1.5Gbit/s带宽。 数据样本 本次测试使用的数据样本主要分为以下三种: 类型 Key Value Hash 34位字符 10对field(10位)-value(20-80位) String 68位字符 32位随机字符 String 19位字符 500 – 2000位随机字符 其中,需要存储在Redis中的Key总数约为40亿条。各类型数据占比约为2:7:1,高频访问的数据约占总体的50%。 评估指标 对于上述测试模型及场景,记录各数据库操作的如下测试指标: 指标缩写 指标描述 QPS 每秒执行的请求数,单位为次/秒。 Avg Latency(ms) 请求的平均时延,代表GeminiDB Redis整体性能表现。 P99 Latency(ms) 请求的P99时延,是比较严格的时延指标,表示99%的请求执行时间都小于该值。 P9999 Latency(ms) 请求的P9999时延,是非常严格的时延指标,表示99.99%的请求执行时间小于该值,仅少量尾部请求超过该值。
  • 测试环境 本次测试使用的GeminiDB Redis集群规格和弹性云服务器(Elastic Cloud Server,简称E CS )规格如下: GeminiDB Redis规格 局点 上海一 可用区类型 可用区一/二/三混合部署 节点CPU规格 16 vCPUs 节点数量 20 实例总容量 2 TB ECS规格: 可用区类型 AZ1 规格 c7.4xlarge.2,3台 CPU 16vCPUs 内存 32GiB 操作系统 CentOS 8.2 64bit
  • 测试步骤 注入测试数据 测试前,生成并注入数据库测试数据。基于测试模型三种类型的分布,对三种数据类型进行如下配置: hash类型 key:34位字符,使用字符串前缀+9位数字,数字由1亿-9亿连续,以控制数据总量和热数据分布。 field-value共注入10对,其中field为10位字符,value为20-80位随机字符,注入测试数据时取均值50位。 构造并注入约8亿个key: memtier_benchmark -s ${ip} -a $(passwd} -p ${port} -c 20-t20 -n7500000 -d 32 -key-maximum=3 800000000 -key-minimum =1000000000 --key-pr efix ='cefkljrithuir123894873h4523blj4b2jkjh2iw13b nfdhsbnkfhsdjkh' --key-pattern=P:P--ratio=1:0 -pipelire=100 string类型 key:68位字符,使用字符串前缀+10位数字,数字由10亿-38亿连续,以控制数据总量和热数据分布。 value:注入32位随机字符。 构造并注入约28亿个key: memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 20 -t 20 -n 2500000 --command='hset __key__ mendke398d __data__ mebnejkehe __data__ fmebejdbnf __data__ j3i45u8923 __data__ j43245i908 __data__ jhiriu2349 __data__ 21021034ji __data__ jh23ui45j2 __data__ jiu5rj9234 __data__ j23io45u29 __data__' -d 50 --key-maximum=900000000 --key-minimum=100000000 --key-prefix='ewfdjkff43ksdh41fuihikucl' --command-key-pattern=P --pipeline=100 string类型 key:19位字符,使用字符串前缀+9位数据,数字由1亿到3亿连续,以控制数据总量和热数据分布。 value:500 – 2000位随机字符,注入测试数据时取均值1250位。 构造并注入约4亿个key: memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 20 -t 20 -n 520000 -d 1250 --key-maximum=300000000 --key-minimum=100000000 --key-prefix='miqjkfdjiu' --key-pattern=P:P --ratio=1:0 --pipeline=100 数据注入完成后,观察其key个数为3,809,940,889个key(约38亿)。观察GeminiDB Redis控制台中使用数据总量,计算GeminiDB Redis的数据压缩比。压缩后的存储容量约为155GB,即压缩比约为13.8%。 受memtier_benchmark数据平铺时数据生成影响,生成数据在40亿条左右,各类型间数据分布不受影响。 memtier_benchmark工具构造随机字符串中连续字符较多,因此压缩比偏低。根据经验,实际生产数据压缩比一般在30%-50%左右,仍可以达到很好的压缩效果。 压测命令 在三台ECS上对GeminiDB Redis实例执行多个压测任务,压测任务分别为: ECS1上,对类型一进行hgetall查询操作,通过key范围控制仅访问部分高频数据: memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 20 -t 30 --test-time 1200 --random-data --randomize --distinct-client-seed --command='hgetall __key__' --key-maximum=600000000 --key-minimum=200000000 --key-prefix='ewfdjkff43ksdh41fuihikucl' --out-file=./output_filename 对类型二进行get查询操作,通过key范围控制仅访问部分高频数据: memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 70 -t 30 --test-time 1200 --random-data --randomize --distinct-client-seed --key-maximum=2400000000 --key-minimum=1000000000 --key-prefix='cefkljrithuin123894873h4523bhj4b2jkjh2iu13bnfdhsbnkfhsdjkh' --ratio=0:1 --out-file=./output_filename 对类型三进行get查询操作,通过key范围控制仅访问部分高频数据: memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 10 -t 30 --test-time 1200 --random-data --randomize --distinct-client-seed --key-maximum=300000000 --key-minimum=100000000 --key-prefix='miqjkfdjiu' --ratio=0:1 --out-file=./output_filename 其中,连接数(c、t两个参数乘积)通过调整各个压测实例的client数量及配置使整体达到160w QPS,同时读请求流量1.5Gb/s。保持该业务流量,评估GeminiDB Redis的性能表现。
  • PERF04-04 资源性能数据收集 风险等级 中 关键策略 每个华为云提供的云服务都有一组特定于资源功能的指标,用于呈现有关资源的使用情况。通过收集资源性能数据,可以深入了解工作负载的运行状况和行为。 指标作用: 帮助你了解资源的运行状况和性能, 在 云监控 平台上配置对应的告警策略和配置指标看板。 通过跟踪分析网络路径上的流量来优化网络性能。 相关云服务和工具 云监控服务 CES 父主题: 性能数据采集
  • PERF04-05 应用性能数据采集 风险等级 中 关键策略 应用程序的性能数据(吞吐量、延迟和完成时间),通常需要通过代码采集,例如嵌入代码片段或将工具集成到应用程序代码中。通过应用的性能数据,可以识别性能瓶颈、评估系统行为、识别可用性风险、规划容量等指标。 常用应用性能监控策略有: APM 工具:可用使用云上APM 工具或者开源的APM工具和分析性能数据(指标、日志、调研链) 使用基于日志调用链框架:这些框架具备日志生成、日志格式化、日志上下文关联分析登能力。 通过框架引入到代码库中,可以在运行时采集相关的性能数据。 自定义检测:仅当平台指标不足时,才建议开发人员可以添加自定义代码采集独有的性能指标。 使用业界可观测的标准。请考虑使用围绕业界标准构建的工具,例如OpenTelemetry。 建议:使用分布式的调用链技术,可以识别多个服务和组件之间请求链路;通过收集调用链数据实现数据流端到端的分析,产品阻塞瓶颈点或者效率低下的请求片段,从而进行针对性的优化。 相关云服务和工具 应用运维管理 AOM 应用性能管理 APM 云日志服务LTS 父主题: 性能数据采集
  • 性能测试结果 基于上述样本,预先注入1TB+数据并进行压力测试,测试结果如下: 数据压缩率: 写入1.1TB数据(约38亿条),压缩后数据占用约为155GB,数据压缩比约为13.8%; 性能表现: 维持业务总QPS达到约160w,此时读请求总流量约为1.5Gb/s,实例CPU利用率在60%-70%。 平均时延约为0.7ms,P99长尾时延约为1.77ms。 本次测试结果表明,在大规模RTA场景,GeminiDB Redis有稳定的时延性能,同时基于数据压缩和支持计算/存储独立选配的特性,非常适合作为广告业务的KV数据库选型。 父主题: GeminiDB Redis接口广告RTA场景性能数据
  • 测试环境 区域:华北-北京四 可用区:可用区1 弹性云服务器(Elastic Cloud Server,简称ECS):规格选择c6.4xlarge.2,16U32GB,操作系统镜像使用CentOS 7.5 64位版本。 被测试实例的配置:每个实例均包含3个节点。 被测试实例的规格:覆盖以下规格类型,详见表1。 表1 实例规格 编号 规格 cluster1 4U*3节点 cluster2 8U*3节点
  • 测试工具 本次测试采用Redis Labs推出的多线程压测工具memtier_benchmark,具体使用方法请参见memtier_benchmark。下面就使用到的memtier_benchmark的部分功能进行简单介绍。 Usage: memtier_benchmark [options] A memcache/redis NoSQL traffic generator and performance benchmarking tool. Connection and General Options: -s, --server=ADDR Server address (default: localhost) -p, --port=PORT Server port (default: 6379) -a, --authenticate=PASSWORD Authenticate to redis using PASSWORD -o, --out-file=FILE Name of output file (default: stdout) Test Options: -n, --requests=NUMBER Number of total requests per client (default: 10000) -c, --clients=NUMBER Number of clients per thread (default: 50) -t, --threads=NUMBER Number of threads (default: 4) --ratio=RATIO Set:Get ratio (default: 1:10) --pipeline=NUMBER Number of concurrent pipelined requests (default: 1) --distinct-client-seed Use a different random seed for each client --randomize Random seed based on timestamp (default is constant value) Object Options: -d --data-size=SIZE Object data size (default: 32) -R --random-data Indicate that data should be randomized Key Options: --key-prefix=PREFIX Prefix for keys (default: memtier-) --key-minimum=NUMBER Key ID minimum value (default: 0) --key-maximum=NUMBER Key ID maximum value (default: 10000000)
  • 测试步骤 以4U*3节点数据库实例为例: 1.首先进行总数据量小于内存大小场景下的写入,读取,以及同时写入和读取操作,并记录各操作的QPS、Avg Latency、P99 Latency。各个workload模型的性能指标的方法如下所示: 测试模型:100% Write模型 使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发写入60,000,000次长度为100字节的数据,其中数据为各client采用不同seed在[1, 60,000,000]范围内随机生成。基于key的给定范围,本次写入总数据大小小于数据库集群的内存容量。 ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 1000000 --random-data --randomize --distinct-client-seed -d 100 --key-maximum=60000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./output_filename 测试模型:100% Read模型 使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发均匀随机读取60,000,000次数据,读取key范围在[1, 60,000,000]内。 ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 1000000 --random-data --randomize --distinct-client-seed --key-maximum=60000000 --key-minimum=1 --key-prefix= --ratio=0:1 --out-file=./output_filename 测试模型:50% Read+50% Write模型 使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发写入和读取60,000,000次的数据,写入和读取key范围在[1, 60,000,000]内,同时写入和读取操作比例为1:1。基于key的给定范围,本次写入和读取总数据大小小于数据库集群的内存容量。 ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 1000000 --random-data --randomize --distinct-client-seed -d 100 --key-maximum=60000000 --key-minimum=1 --key-prefix= --ratio=1:1 --out-file=./output_filename 2. 在数据库中增加超过数据库集群内存容量的数据:使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发写入20,000,000次长度为100字节的数据,其中数据为各client采用不同seed在[60,000,001, 780,000,000]范围内随机生成,同时通过设置pipeline参数,增加数据写入效率。基于key的给定范围以及总共写入次数,本次写入总数据大小大于数据库集群的内存容量。 ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 20000000 --random-data --randomize --distinct-client-seed -d 100 --key-maximum=780000000 --key-minimum=60000001 --pipeline=100 --key-prefix= --ratio=1:0 --out-file=./output_filename 3. 数据库存储数据量大于数据库集群内存容量条件下,进行写入、读取、同时写入和读取操作,并记录各操作的QPS、Avg Latency、P99 Latency。各个workload模型的性能指标的方法如下所示: 100% Write模型 使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发写入500,000次长度为100字节的数据,其数据为各client随机生成,key范围在[1, 780,000,000]内。 ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 500000 --random-data --randomize --distinct-client-seed -d 100 --key-maximum=780000000 --key-minimum=1 --key-prefix= --ratio=1:0 --out-file=./output_filename 100% Read模型 使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发均匀随机读取500,000次数据,key范围在[1, 780,000,000]内。 ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 500000 --random-data --randomize --distinct-client-seed --key-maximum=780000000 --key-minimum=1 --key-prefix= --ratio=0:1 --out-file=./output_filename 50% Read+50% Write模型 使用30个线程,每个线程创建3个client连接,即总共建立的90个连接并发写入和读取500,000次的数据,其数据为各client随机生成,key范围在[1, 780,000,000]内。 ./memtier_benchmark -s ${ip} -a ${passwd} -p ${port} -c 3 -t 30 -n 500000 --random-data --randomize --distinct-client-seed -d 100 --key-maximum=780000000 --key-minimum=1 --key-prefix= --ratio=1:1 --out-file=./output_filename
  • 测试模型 workload模型 表3 workload模型 workload模型编号 测试模型 100% Write 100%写操作(string set)。 100% Read 100%读操作(string get),采用均匀随机访问模型,按照严苛场景测试读性能。 50% Read+50% Write 50%读操作(string get)+ 50%写操作(string set)。 数据模型 表4 数据模型 数据模型编号 数据模型 value length 随机生成value,长度为100字节。
  • 独享型实例测试列表 表1 只写模式测试数据 模型 表数量 表数据量 线程 规格 TPS QPS 只写模式 250 25000 128 X86|2核|8GB 4972.9 29837.37 128 X86|2核|16GB 4848.42 29090.52 128 X86|4核|16GB 15117.9 90707.38 128 X86|4核|32GB 17651.49 105908.94 256 X86|8核|32GB 31456.27 188737.65 256 X86|8核|64GB 34088.75 204532.49 512 X86|16核|64GB 58271.73 349630.37 512 X86|16核|128GB 60286.91 361721.43 512 X86|32核|128GB 81209.8 487258.82 512 X86|32核|256GB 85428.83 512573 512 X86|60核|256GB 81580.39 489482.33 512 X86|64核|512GB 81922.84 491537.02