如何解决高并发下缓存被击穿的问题

来源:互联网 发布:国密 java 编辑:程序博客网 时间:2024/06/05 11:46

背景:
  在某些电商促消活动中需要搞活动,对某些页面的访问量(QPS)往往会非常高。如果直接读数据库,肯定DB会承受不住。那比较常见的方案就是让大部分相同信息的请求都尽可能压在cache上来缓解DB的压力,从而尽可能去满足高并发访问的需求
image.png
在一次具体的促销过程中,当运营同学给广大的消费者推了一条消息:10点准时抢购一批远低于市场价而且数量有限制促销商品。(比如3K块抢一台苹果手机之类的)。那用户一收到这条短信就会在10点集中进入抢购页面,结果持续几分钟内很多用户就会进入会场,发现页面异常并且服务器疯狂报警。
报警内容:cache异常。
由于cache有问题,直接走DB,结果导致DB压力难以支撑,整个业务集群处于雪崩
image.png
现在问题来了,什么我们的cache会出问题?我们应该要如何避免cache出问题呢?
来看看cache出问题的原因
原因可能有这么几个:
1、缓存服务器自身有限流保持
缓存服务器数量 * 单机能够承受的qps > 用户最大的QPS  就会触发限流保护
针对这个原因:可以做横向扩容。加机器即可
2、用户访问过来cache服务器集中打到一台上面了。大流量并没有按预期的那样分摊到不同的cache机器上
导致出现单机热点。(热点数据)
针对这个原因:只要计算cache-hash算法不出问题,那基本上可以做到缓存的随机分布均匀的
3、缓存里面的value过大,导致虽然QPS不高,但网络流量(qps * 单个value的大小)还是过大,触发了cache机器单台机器的网络流量限流;
针对这个原因:需要把大value进行精简,部分可以放在本机内存而不需要走远程获取这种方式的。
这里面有一个问题需要引点关注
1、如何避免热点数据的问题
其实我们在做分库分表设计的时候也要考虑这个问题,比如某些大的商家可能会占到80%的数据量,如果用商家ID进行分库分表,必然会出现热点数据问题。这跟上面提到的原因2其实是一样的。有些热点key都跑到一台机器上面了。所以简单的对key进行hash还不行。
我们在做设计之前,要先考虑一下
a. 是否存在热点key ?
b. 如果存在热点key ,那如何避免这些热点key落在同一机器上面
2、要考虑缓存的包大小
如果缓存的包过大,会导致堵塞网络的风险。


解决这两个问题的一个比较好的办法:

1、针对cache中元素key的访问监控。一旦发现cache有qps限流或网络大小限流时,能够通过监控看到到底是哪个key并发访问量过大导致,或者哪些key返回的value大小较大,再结合cache散列算法,通过一定的规则动态修改key值去平摊到各个cache机器上去。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 遇到一个新手买家恶意拍下怎么办 淘宝卖螃蟹有什么要求美工怎么办 淘宝衣服吊牌剪了想退货怎么办修 用图片在淘宝搜衣服搜不到怎么办 汽车黑塑料水砂纸磨的不平怎么办 sat报名要你填10位电话怎么办 手绘板连接电脑绘画有点迟钝怎么办 走路不小心滑了一下特尴尬怎么办 小孩子头撞了头发长不出来怎么办 小孩子头磕破了不长头发怎么办 晚上洗了冷水头早上头痛怎么办 头发洗了一天就油了怎么办 米诺地尔搽剂喷了头皮油怎么办 头发可以种植吗如果是秃顶怎么办 前额头发少怎么办如何使头发增多 头发又细又软又少怎么办 宝宝一岁了头发又少又黄怎么办 生完孩子头发掉的厉害怎么办 洗完头发后头发很蓬松怎么办 头发掉的厉害怎么办吃什么好得快 头发掉的很厉害怎么办吃什么好 我头发掉的厉害怎么办吃什么药 头发干枯毛躁掉发怎么办吃什么 最近洗头时头发掉的厉害怎么办 生完小孩头发掉的厉害怎么办 生完小孩后头发掉的厉害怎么办 生完孩子后严重掉头发怎么办 生过孩子后掉头发严重怎么办 孩孑16岁了高中没考上怎么办 小孩的嘴巴里有点点该怎么办 小孩从出生哭笑嘴巴有点歪怎么办 儿童耳朵受伤后嘴巴歪了怎么办 手机锁屏图案忘了怎么办求解锁 忘给仓鼠买吃的了怎么办 两岁宝宝不爱吃饭只喝奶粉怎么办 下载百度云压缩包要提取密码怎么办 微信表情包图片过大无法添加怎么办 管理员吧群员全部踢了群主怎么办 微信笑脸表情斗图文字没有了怎么办 钨珠钢笔头用完笔墨了怎么办 暴走大事件被禁六一红鼻子节怎么办