Go 服务开发高手课
徐逸
头部大厂资深 Go 技术专家、前腾讯资深工程师
973 人已学习
新⼈⾸单¥59
Go 服务开发高手课
15
15
1.0x
00:00/00:00
登录|注册

12|分布式缓存:大促抢购,不知热点咋防热Key?

你好,我是徐逸。
通过上节课的学习,我们知道了提升服务吞吐的数据库架构方案。
不过在实践中,除了在数据库层面做优化之外,我们还可以通过搭配缓存的方式,来减轻数据库的访问压力,避免数据库成为性能瓶颈点。例如电商大促的商品详情页,由于商品的名称、图片链接、价格等数据会被频繁访问,因此一般会被缓存,以便提升系统的性能。
今天我们就来聊聊,在大促抢购期间,有些商品访问 QPS 突然大幅度增高时,我们如何才能保障 Redis 访问的性能不受影响呢?

什么是热 Key 问题

在讨论具体方案之前,你不妨先想一想:要是 Redis 中某个 Key 的访问 QPS 突然变得很高,会给我们的系统带来怎样的影响?
就像下面的图展示的一样,当从 Redis 读取数据时,Redis 代理服务会基于 Key 进行 Hash 计算,以此定位到 Redis 中实际存放数据的后端 Redis Server。所以,要是某个 Key 的访问 QPS 突然大幅攀升,那么这个 Key 所在的 Redis Server 就会有部分请求被迫排队,进而导致延迟升高,严重时还会出现超时失败的状况。这便是我们平常所说的热 Key 问题,而那些被高频率访问的 Key 就是热 Key
图1 Redis 分片架构
在应对突发热 Key 所引发的性能难题时,各个公司所采用的解决方案可谓是各有千秋。不过,它们的核心思路却殊途同归,那便是借助更多的机器资源,来分担热 Key 的访问流量。这些方案大致能够归为以下两类。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 热 Key 问题对系统性能的影响:突发热 Key 访问会导致 Redis Server 延迟升高和超时失败,成为性能瓶颈点。 2. 业务层解决方案:通过本地缓存全量数据或部分数据,以及使用热 Key 探测框架进行热 Key 的判断与推送,来解决热 Key 问题。 3. Redis层解决方案:采用读写分离架构或利用 Proxy 来缓存热 Key 数据,承担热 Key 访问所带来的压力,从而解决热 Key 问题。 4. Proxy 热 Key 承载方案:利用 Proxy 来缓存热 Key 数据,承担热 Key 访问所带来的压力,避免资源浪费。 5. 业务层解决方案的核心思路:借助更多的机器资源,来分担热 Key 的访问流量,包括本地缓存全量数据、本地缓存部分数据和热 Key 探测框架。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 服务开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)