热点Key问题的发现与解决
https://help.aliyun.com/document_detail/67252.html
缓存击穿、失效以及热点key问题
https://www.jianshu.com/p/d5a3668d4dad
2017双11技术揭秘—分布式缓存服务Tair的热点数据散列机制
https://my.oschina.net/yunqi/blog/1596732
- 缓存穿透
- 解决:写空值,布隆过滤
- 缓存并发
- 解决:分布式锁,异步更新
- 缓存雪崩
- 解决:过期时间中增加随机时间片
热点key的解决方案:
- 客户端热点key缓存:将热点key对应value并缓存在客户端本地,并且设置一个失效时间。对于每次读请求,将首先检查key是否存在于本地缓存中,如果存在则直接返回,如果不存在再去访问分布式缓存的机器。
- 将热点key分散为多个子key,然后存储到缓存集群的不同机器上,这些子key对应的value都和热点key是一样的。当通过热点key去查询数据时,通过某种hash算法随机选择一个子key,然后再去访问缓存机器,将热点分散到了多个子key上。
架构中各节点的作用如下:
-
SLB层做负载均衡
-
Proxy层做读写分离自动路由
-
Master负责写请求
-
ReadOnly节点负责读请求
-
Replica节点和Master节点做高可用
实际过程中Client将请求传到SLB,SLB又将其分发至多个Proxy内,通过Proxy对请求的识别,将其进行分类发送。例如,将同为Write的请求发送到Master模块内,而将Read的请求发送至ReadOnly模块。而模块中的只读节点可以进一步扩充,从而有效解决热点读的问题。读写分离同时具有可以灵活扩容读热点能力、可以存储大量热点Key、对客户端友好等优点。