喜马拉雅kv存储实践-杨力

1.在pika中增加redis cache模块,降低热key的响应时间。
2.解决pika中value较大时compact引起的写放大问题。
3.在pika中实现hash结构field字段设置过期时间。
4.解决pika在某些环境下出现40ms延迟的问题。

展开查看详情

1.喜⻢马拉雅KV存储实践 系统架构 杨⼒力力 2019.07

2.喜⻢马拉雅kv存储实践 » pika中增加cache » pika写放⼤大问题解决 » hash field字段⽀支持过期时间设置 » pika 40ms延迟问题解决

3.pika中增加cache » 什什么是pika » pika模块架构 » pika线程模型 » pika中cache操作流程

4.pika中增加cache pika是什什么 » 类redis存储系统、完全兼容redis协议 » 兼容string、hash、list、zset、set的绝⼤大多数接⼝口 » 使⽤用磁盘存储数据( RocksDB SSD ) » 多线程⼯工作模型 » 360开源、社区活跃 » 适合数据量量较⼤大但QPS要求不不⾼高的业务

5.pika中增加cache pika模块架构 Network Proxy(Redis Protocol) RedisCmd RedisReply Pika Process Layer RedisCmd Nemo API NemoReply BinLog Nemo Storage Rocksdb API RocksdbReply Rocksdb Storage

6.pika中增加cache pika多线程模型 worker client worker client dispatch client worker worker pika

7.pika中增加cache pika原有写数据流程 1 2 workerThread SSD-store(Rocksdb) read or write pika

8.pika中增加cache cache操作流程 1 4 1 3 cache cache workerThread 2 3 2 workerThread SSD-store SSD-store read pika write pika

9.pika中增加cache cache操作流程 worker worker … worker worker key sharding cache cache … cache SSD-store

10.pika写放⼤大问题解决 » rocksdb写放⼤大问题 » 业务场景 » key value分离存储

11.pika写放⼤大问题解决 rocksdb写放⼤大问题

12.pika写放⼤大问题解决 业务场景 » 业务⽅方使⽤用string类型,value平均⼤大⼩小为1KB,每个实例例平均写 QPS 5000,读QPS 8000时,读请求出现⼤大量量超时 » intel S3610 800G raid5

13.pika写放⼤大问题解决 业务场景

14.pika写放⼤大问题解决 key value分离存储 » 解决⽅方案: 将key和value分离存储,通过将 value 从 LSM-Tree 分离出的⽅方法 来达到降低写放⼤大的⽬目的。 » 参考: WiscKey、TiTan

15.pika写放⼤大问题解决 key value分离存储 » kv分离存储基本架构

16.pika写放⼤大问题解决 key value分离存储 » Rocksdb写⼊入流程

17.pika写放⼤大问题解决 key value分离存储 » sst⽂文件格式

18.pika写放⼤大问题解决 key value分离存储 » BlobFile⽂文件结构 »

19.pika写放⼤大问题解决 key value分离存储 » compact触发GC

20.pika写放⼤大问题解决 key value分离存储 » 磁盘IO⽐比较:

21.pika写放⼤大问题解决 key value分离存储 » 响应时间TP999延迟⽐比较:

22.hash field字段⽀支持过期时间设置 » 业务需求 » 实现原理理 » 存在缺陷

23.hash field字段过期时间设置 业务需求 » 需求 hash中不不同field需要设置不不同的过期时间。

24.hash field字段过期时间设置 实现原理理 » pika中原有hash类型实现⽅方式: hash表meta_key和meta_value落盘⽅方式: hash表data_key和data_value的落盘⽅方式:

25.hash field字段过期时间设置 实现原理理 » 修改后的hash实现⽅方式: hash表的meta_key和meta_value落盘⽅方式不不变: hash表中data_key和data_value的落盘⽅方式,在原有的data_value 前增加过期时间的⼀一个时间戳字段:

26.hash field字段过期时间设置 存在缺陷 » 存在的缺陷: hlen不不能准确返回hash中元素数量量。 » 解决⽅方式: 增加⼀一个单独命令,实时扫hash对应的所有field。

27.pika 40ms延迟问题解决 » 业务现状 » 原因分析 » 优化效果

28.pika 40ms延迟问题解决 业务现状 » 线上codis-pika集群,在QPS不不⾼高的情况下,经常出现40ms延时 »

29.pika 40ms延迟问题解决 原因分析 » 根本原因: proxy机器器使⽤用delay ack机制,pika机器器使⽤用了了Nagel算法。