- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
喜马拉雅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算法。