喜马拉雅KV存储系统演进之路

喜马拉雅KV存储系统演进之路--杨力
展开查看详情

1.喜⻢马拉雅KV存储系统演进之路路 系统架构 杨⼒力力 2018.11

2.KV存储系统演进之路路 » redis主从模式 » codis-redis集群 » codis-pika集群 » 分布式缓存系统

3.redis主从模式 » redis介绍 » 使⽤用场景 » 经验总结 » 存在的缺陷

4.redis主从模式 什什么是redis » NoSQL数据库,存储Key-Value键值对 » 内存数据库, 读写性能出⾊色 » ⽀支持多种数据类型,⽀支持String、List、Hash、Set和Sort set » 单进程、C语⾔言编写 » 开源

5.redis主从模式 使⽤用场景 » 数据容量量⼩小,访问量量不不⾼高 clients redis redis master slave

6.redis主从模式 经验总结 » 单个redis实例例容量量不不宜太⼤大 bgsave时redis请求将会被阻塞更更⻓长的时间 主从同步耗时更更⻓长,增加了了失败率 » master禁⽤用bgsave,slave上做数据持久化 » 设置正确的redis模式(cache模式和存储模式) 错误的使⽤用cache模式导致redis达到最⼤大容量量后开始丢数据

7.redis主从模式 经验总结 » bgsave内存翻倍 在slave上使⽤用默认RDB持久化策略略 遇到的问题: 服务器器经常出现不不可预期的内存使⽤用100% 原因: 单个服务器器多个redis实例例同时触发bgsave,导致redis内存翻倍 解决: 控制slave持久化时间,使多个slave不不同时触发持久化

8.redis主从模式 存在的缺陷 » 单个实例例容量量受限,不不能灵活扩容缩容 » 业务扩容成本⾼高,需要在客户端进⾏行行sharding

9.codis-redis集群 » codis集群介绍 » 经验总结 » 存在的缺陷

10.codis-redis集群 什什么是codis » ⼀一个redis集群解决⽅方案 » ⽀支持动态扩容缩容 » proxy上做sharding、客户端不不需要做任何修改 » 豌⾖豆荚开源

11.codis-redis集群 codis集群架构

12.codis-redis集群 codis集群架构 zookeeper client web proxy proxy proxy dashboard sentinel redis redis redis

13.codis-redis集群 codis集群架构 clients CRC32(key)%1024 proxy slot0 slot511 slot512 slot1023 conn1 conn2 redis redis redis redis master slave master slave slot 0-511 slot 512-1023 group1 group2

14. codis-redis集群 codis扩容与缩容 » codis扩容缩容都是以slot为单位 » codis默认使⽤用CRC32将key分配到1024个slot proxy slot512 slot767 slot768 slot1023 slot256 slot511 slot768 slot1023 slot0 slot255 slot256 slot511 slot 0-255 slot 512-767 slot 256-511 slot 768-1023 group1 group2 group3 group4

15.codis-redis集群 经验总结 » 复杂数据类型单个key的value不不能太⼤大 ⽐比如:zset中member数量量不不能太多,否则可能导致数据迁移失败 » proxy连接数不不能太过多 每个proxy实例例分配 4个CPU,连接数超过2W 当QPS较⾼高时,可能间歇性出现⼤大量量请求超时

16.codis-redis集群 经验总结 » 单个proxy连接数过多 使⽤用场景: 多个业务使⽤用同⼀一个集群时,多个客户端的jodis都会连接到每⼀一个proxy, 导致proxy连接数据太多 解决⽅方案: 对⼀一个集群中的proxy进⾏行行划分,同⼀一个集群中的不不同业务连接到不不同的 proxy,⽽而不不是连接到每⼀一个proxy

17.codis-redis集群 经验总结 » 客户端jodis不不停地和proxy断开重连(业务⽅方⼤大量量离线请求) JedisPool优化前配置: JedisPool优化后配置:

18.codis-redis集群 存在的缺陷 » 集群中每个group,⾄至少需要主从两个redis实例例,消耗⼤大量量内存 » 业务数据规模较⼤大时,redis实例例较多,运维成本⾼高 » 不不适合数据量量⼤大但QPS要求不不⾼高的业务

19.codis-redis集群 存在的缺陷 » 内存 VS SSD 100RMB/G VS 3RMB/G 30倍以上差距

20.codis-pika集群 » pika介绍 » 对pika改造 » 对codis改造 » 经验总结 » 存在缺陷

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

22.codis-pika集群 pika模块架构 Network Proxy(Redis Protocol) RedisCmd RedisReply Pika Process Layer RedisCmd Nemo API NemoReply BinLog Nemo Storage Rocksdb API RocksdbReply Rocksdb Storage

23.codis-pika集群 pika多线程模型 worker client worker client dispatch client worker worker pika

24.codis-pika集群 对pika改造 » ⽀支持codis集群:增加slot相关操作 » ⽀支持redis和pika之间进⾏行行数据迁移 » ⽀支持多线程异步数据迁移 » 对pika进⾏行行性能优化

25.codis-pika集群 codis-pika架构 zookeeper client web proxy proxy proxy dashboard sentinel pika pika pika

26.codis-pika集群 codis-pika架构 clients CRC32(key)%1024 proxy slot0 slot511 slot512 slot1023 conn conn conn conn pika pika pika pika master slave master slave slot 0-511 slot 512-1023 group1 group2

27.codis-pika集群 对codis改造 » 增加历史数据查看功能,将历史数据保存到influxdb

28.codis-pika集群 对codis改造 » 增加了了实例例⾃自动部署功能

29.codis-pika集群 对codis改造 » 增加权限管理理