cover_image

KeeWiDB性能压测

邓亚运 三七互娱技术团队
2023年01月09日 11:42

背景:

1. 当前数据部存在较多的pika服务是采用cvm自建,由于pika这个产品官方许久没有维护,加上一致的想法是能尽量全部使用云产品,故需要有新的产品能够替换pika。同时需要低成本。

2. 当前数据部广告投放采用redis cluster集群,成本居高不下,也急需新产品能够替换redis cluster,达到节约成本的目的。

基于上述2点,测试腾讯云新的产品:KeeWiDB


官网介绍:https://cloud.tencent.com/document/product/1520

云数据库 KeeWiDB(TencentDB for KeeWiDB,KeeWiDB)是腾讯云自研的兼容 Redis 协议的分布式 KV 数据库,使用持久化内存技术,拥有亚毫秒级的响应延迟、数百Gb/s的吞吐、冷热数据分级存储,100TB级的存储规模,数据持久化、高性能读写,可广泛应用于低成本大容量 KV 存储、缓存 + 存储方案的替换、实时高性能存储等多种业务场景,助力企业提升生产效率,降低运营成本。


什么是云数据库 KeeWiDB

开源 Redis 使用内存存储介质,能够在计算和缓存场景提供超高并发和超低延迟。然而 Redis 的使用场景早已经突破了缓存的边界,在存储场景中的应用越来越多。Redis 作为存储数据库,面临海量数据和极致用户体验的双重挑战,为彻底解决 Redis 在存储场景所面临的性能、成本、持久化、规模限制等方面存在的问题,腾讯云研发了兼容 Redis 协议的 KV(key-value)存储数据库 KeeWiDB。

云数据库 KeeWiDB(TencentDB for KeeWiDB,KeeWiDB)是腾讯云自研的兼容 Redis 协议的分布式 KV 数据库,使用持久化内存技术,拥有亚毫秒级的响应延迟、数百Gb/s的吞吐、冷热数据分级存储,100TB级的存储规模,数据持久化、高性能读写,可广泛应用于低成本大容量 KV 存储、缓存 + 存储方案的替换、实时高性能存储等多种业务场景,助力企业提升生产效率,降低运营成本。


为什么选择云数据库 KeeWiDB

云数据库 KeeWiDB 在简单易用、持久化存储、大容量、低成本、弹性扩容、数据可靠性、高性能、智能监控等方面均体现出自己独有的优势


压测环境:

图片


施压机:24核98G

压测工具:

YCSB,https://github.com/brianfrankcooper/YCSB


工作负载

各个数据类型2千万。数据分布方法为zipfian,具体测试场景如下:

  • Load:100%的写操作。

  • Workload C:100%的读操作。

  • Workload A:50%的更新操作与50%的读操作。


测试命令

workload=a./bin/ycsb load redis -s -P workloads/workload${workload} -p "redis.host=${server_ip}" -p "redis.port=${port}" -p "redis.password=${password}" -p "recordcount=${recordcount}" -p "operationcount=${operationcount}" -p "redis.timeout=30000" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads} -p "redis.password=$password"
#运行Workload C#workload=c./bin/ycsb run redis -s -P workloads/workload${workload} -p "redis.host=${server_ip}" -p "redis.port=${port}" -p "redis.password=${password}" -p "recordcount=${recordcount}" -p "operationcount=${operationcount}" -p "redis.timeout=30000" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads} -p "redis.password=$password"
#运行Workload A#workload=a./bin/ycsb run redis -s -P workloads/workload${workload} -p "redis.host=${server_ip}" -p "redis.port=${port}" -p "redis.password=${password}" -p "recordcount=${recordcount}" -p "operationcount=${operationcount}" -p "redis.timeout=30000" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads} -p "redis.password=$password"

重要参数说明:

recordcount: 数据装载阶段准备的数据量。
operationcount: 执行操作的数据量。
command_group: 测试的数据结构,string,hash,set,zset
fieldcount:字段或元素个数,本案例中,String数据结构配置为1,其他数据结构配置为10。
fieldlength:值长度,根据测试需求配置
threads:YCSB线程数,统一 128个并发。


测试结果
测试指标

图片


Load场景测试结果(纯写)

1. String数据结构

Value长度(字节)

QP

(次/秒)

INSERT Average Latency(微秒)

INSERT 99th Percentile Latency(微秒)

1281271709773833
25611883210604219
10249702813026067

2. Hash数据结构

Key中的Field数量

Value长度(字节)

QPS(次/秒)

INSERT Average Latency(微秒)

INSERT 99th Percentile Latency(微秒)

101287648016507991
1025660679208010935
10102414110885531439

3. Set数据结构

Key中的Member数量

Value长度(字节)

QPS(次/秒)

INSERT Average Latency(微秒)

INSERT 99th Percentile Latency(微秒)

101287637216448383
1025652076241510567
101024108371174940447

4. Sorted Set数据结构

Key中的Element数量

Value长度(字节)

QPS(次/秒)

INSERT Average Latency(微秒)

INSERT 99th Percentile Latency(微秒)

101284686413496135
1025624776513122543
10102419495723428651


Workload C场景测试结果(100%的读操作)

1. String数据结构

Value长度(字节)

QPS(次/秒)

READ AverageLatency(微秒)

READ 99thPercentileLatency(微秒)

1281491208283651
2561485968463695
10241380258974151


2. Hash数据结构

Key中的Field数量

Value长度(字节)

QPS(次/秒)

READ AverageLatency(微秒)

READ 99thPercentileLatency(微秒)

101281203589243895
102566853314474035
1010241923355088423


3. Set数据结构

Key中的Member数量

Value长度(字节)

QPS(次/秒)

READ AverageLatency(微秒)

READ 99thPercentileLatency(微秒)

101281121959053785
102563829821744069
10102411234798514407


4. Sorted Set数据结构

Key中的Element数量

Value长度(字节)

QPS(次/秒)

READ AverageLatency(微秒)

READ 99thPercentileLatency(微秒

101286514515446291
102562769132178751
1010241231022679865


Workload A场景测试结果(50%的更新操作与50%的读操作)

1. String数据结构

Value长度(字节)

QPS(次/秒)

READ AverageLatency(微秒)

READ 99thPercentileLatency(微秒)

UPDATE AverageLatency(微秒)

UPDATE 99thPercentileLatency(微秒)

12812834495246999774775
256124091999510310325187
10241014531201807512648407


2. Hash数据结构

Key中的Field数量

Value长度(字节)

QPS(次/秒)

READ AverageLatency(微秒)

READ 99thPercentileLatency(微秒)

UPDATE AverageLatency(微秒)

UPDATE 99thPercentileLatency(微秒)

101281084711146621111766371
10256943571246770714247995
1010243847930551100723349327


3. Set数据结构

Key中的Member数量

Value长度(字节)

QPS(次/秒)

READ AverageLatency(微秒)

READ 99thPercentileLatency(微秒)

UPDATE AverageLatency(微秒)

UPDATE 99thPercentileLatency(微秒)

10128118021906365411264728
10256423012236476222635751
101024228052267578533676782



4. Sorted Set数据结构

Key中的Element数量

Value长度(字节)

QPS(次/秒

READ AverageLatency(微秒)

READ 99thPercentileLatency(微秒)

UPDATE AverageLatency(微秒)

UPDATE 99thPercentileLatency(微秒)

1012856507175110439272912975
1025648253229211647295413055
10102426891336118769336323098


总结:

1. 对于string类型性能最好,在value 128字节左右的时候QPS可以跑到12w。
2. 对于大value,比如1024字节长度写入触发入流量限流,导致性能较差。瓶颈在带宽。询问腾讯答复暂时不会放开限制。当前网络最大吞吐:1920Mb/s
3. cpu没有瓶颈,其余的数据类型性能没有string好猜测和底层实现有关系。


流量限流:

图片




图片



继续滑动看下一个
三七互娱技术团队
向上滑动看下一个