https://mp.weixin.qq.com/s/wzTfo5qCuc9gmI5Srnpdyg
陈凯玲(“KL博主”):TapTap infra 工程师。开源项目 kkFileView 等 kk 系列项目作者,Apollo 配置中心项目 PMC 。
优化成果
2023 年,通过切换低成本的 Redis ESSD 实例、实施流量压缩方案、清理无效数据、治理实例 TTL、下线无用实例等措施,自研了 Redis 流量复制 & 流量放大、Redis 数据迁移、Redis 数据在线压缩 & 解压缩、Redis 数据定向清理 & 定向指定 TTL、Redis 扫描分析 Key 最后访问时间等工具辅助方案落地。实现 Redis 费用降本 46 万 / 月。
PS:文中所述 Redis , 均为阿里云的 Redis 相关产品。
以下优化措施没有优先顺序,在我司的大致的优化比例如下表:
| 优化措施 | 优化比例 |
|---|---|
| 1、清理未使用的实例 | 5% |
| 2、实例降配:提高内存使用率 | 15% |
| 3、使用场景打标,允许部分场景内存用满 | 1% |
| 4、合理设置 TTL | 8% |
| 5、清理历史数据 | 6% |
| 6、改进 kv 结构 | 1% |
| 7、定期 scan, 释放已过期的内存 | 1% |
| 8、降低可用性 | 3% |
| 9、压缩 value | 32% |
| 10、迁移到兼容 Redis 协议的磁盘存储项目 | 28% |
有的业务下线了,实例还在,需要清理这类实例。
这个是最容易实现的,最快能优化的,通过采集 Redis Metrics 数据,筛出长期 QPS 非常低的实例(集群版本 Redis, 自身也会有 ping 等保活访问),观测连接数据等,和业务确认并释放
各种因素,导致实际使用的内存,和申请的内存差别较大,导致使用率上不去,存在内存浪费。比如:
这些场景需要通过降配,将使用率至少稳定在 70% 左右。
降配时,需要注意如下:
集群降配到主从,注意业务端的链接模式是否兼容
大集群降配到小集群,注意是否有大 key 限制