小红书缓存服务多云建设之路
如果无法正常显示,请先停止浏览器的去广告插件。
1. 小红书缓存服务多云建设之路
吴成超
小红书 数据库缓存组负责人
2.
3. 大纲
• Redis集群现状
• Redis编排与内核优化
• 多云架构演进
4. Redis集群现状
slot = CRC16(key) % 16384
Proxy
Redis Cluster
• 标准缓存
• 内存DB
• 数据排序
Master • 推荐特征存储
Slave1 • 分布式锁
• ... ...
Slot
0
1
2
... ...
16383
Slave2
Gossip Protocol
5. Redis集群现状
488
内存/TB
412
QPS/M
90
Pod/K
100
% k8s
6. 集群编排
Why K8S ?
• 运维简单、自动化程度高
• 屏蔽多云机器差异
• 复用K8S丰富的调度能力
• 方便资源拆借、混部
• ... ...
7. 集群编排
K8S
... ...
VM-2
VM-1
VM-3
M S S
S S M
S M S
... ... ... ... ... ...
VM-1 VM-2 VM-3
Proxy server group
... ...
VM-X
Redis server group
8. 集群编排
• IP漂移
• 磁盘满导致节点被驱逐
• 资源碎片
• 单k8s规模过大 (>4000 node)
• 宿主机快速重启导致数据丢失
• ... ...
9. Redis内核优化
• Gossip分治
• Cluster功能裁剪
• Time Window Rank
• 全局Scan
• ... ...
10. Redis内核优化
• 去中心化
• 架构简单
• 鲁棒性好
VS
• 网络风暴
• 选主收敛慢
11. Redis内核优化
LAN Gossip
WAN Gossip
12. Redis内核优化
13. Redis内核优化
14. Redis内核优化
优化前 优化后 变化
内存 2.166TB 1.513TB -30.1%
CPU 40.93C 27.15C -33.6%
业务报错 每天一次 不再报错 /
响应时间P99
(灌数据时段) 75ms~100ms <20ms
(几乎无波动) -80%
15. Redis内核优化
Read
Write
归并计算
ts Zset
ts - w Zset
ts - 2w Zset
... ... ... ...
ts - nw Zset
ts – (n+1)w Zset
ts – (n+2)w Zset
• 搜索词出现频率TopN
• 统计窗口: 1s / 10s / 1min
• 实时动态刷新(延迟<10s)
归并计算
实时写入
TopN统计窗口
待GC数据
16. Redis内核优化
记录Key搜索事件
zincryby twrank:search-key camping 1
获取Key搜索频率Top 100
zrevrange twrank:search-key 0 100 withscores
17. Redis内核优化
• 全局 Scan
• Cluster 拓扑 缓存
• 实时大Key检测
• 亚健康节点自动隔离
• 实时热Key检测
• Rehash 内存分配异步化
• ... ...
18. 多云架构演进
Why
• 单机房故障
• 单云入口层异常
• 更强大的灰度和容量管理能力
• 上海机房资源受限
• 单供应商议价能力差
• 地域级故障
19. 多云架构演进
• 同城双活
• 跨云多活 1.0
• 跨云多活 2.0
20. 多云架构演进
• 上海同城双机房( Ping<2ms, 带宽几乎无限制)
• 核心业务场景(标准缓存用法)
• 单机房异常/专线异常时 核心用户体验不受影响
21. 多云架构演进
Zone A
Zone B
CDC
22. 多云架构演进
User Cmd Repl Cmd
Mem Dict Mem Dict
X
Redis CDC
23. 多云架构演进
• Full Sync Without RDB
• Slot同步延迟校验
• 数据一致性校验
24. 多云架构演进
• 华东跨省多机房( Ping:10ms, 带宽受限)
• 业务侧场景复杂(Redis As Cache & DB)
• 业务层做单元化改造
• 单机房异常/专线异常时 核心用户体验不受影响
25. 多云架构演进
Cloud A
Cloud B
Cloud C
Redis Master
Redis Slave
26. 多云架构演进
User Cmd
Redis
Disk
Mem Dict
RDB
User Cmd
Repl Cmd
Mem Dict
binlog.001-099
binlog.100-199
binlog.xxx-yyy
Simba
Data Loader
Replicate Server
Replicate Client
27. 多云架构演进
• 自定义ReplCmd, 引入Clsuter ID 避免循环复制
• 不做冲突处理
• 复制位点存储Redis ,无中心存储依赖
• 默认关闭全同步,由人工触发
• 外部组件检查&调整 复制链路
28. 多云架构演进
• 链路管理复杂 ( 4机房 -> 6条链路)
• 业务层无法实现单元化
• 读多写少,写入Latency要求不高
• 不要求“写后读”
29. 多云架构演进
group 1
group 2
Cloud A
group 3
group 4
Cloud B
group 5
Redis Master
Redis Slave
Cloud C
30. 多云架构演进
User Cmd Master Cmd
Mem Dict Mem Dict
binlog.001-099
binlog.100-199
binlog.xxx-yyy
31. 多云架构演进
• 强一致性、强写后读场景
• 专线带宽管理
• 异步RDB全同步
• 单机房/专线故障时的处理预案
• 双活 VS 三活
32.
33. THANKS
xueying@xiaohongshu.com