高并发常规手段:扩容、静态化、限流、缓存、队列
概要:guava的RateLimit、Nginx + redis + lua、sentinel
1、过度设计失败案例:
生成订单号—扣库存—生成订单—付款,扣完库存通知mq,mq没立刻返回,卡在生成订单上,阻塞
2、guava的RateLimit限流(令牌桶)
1)每次请求获1个token,2s才可从桶中获取10个,每秒只能5个并发
2)应对突发流量:一次拿完5个,等1s,因为放5个要1s。
acquire前休眠1s,限流效果变化,因为已经放入足够。
3)从慢速过渡到平均:设置缓冲时间
3、Nginx + redis + lua实现限流限流
1)开启Nginx限流
2)每个Nginx节点都对应着独立的redis节点。
redis节点存限流配置:限流名单、错误码、提示、阈值、开关。
请求来临,Nginx向redis发起evalsha命令,执行lua脚本,验证是否超过阈值:
(1)目标url作为key,调用redis的incrby增加访问次数,expire设置过期时间
(2)最后根据阈值判定走向,ps:阈值到,要等key过期再重新计算
4、sentinel限流及其他
轻量级,低侵入,熔断降级
其他:分段秒杀、答题、验证码
mq部分:https://www.jianshu.com/p/886552f434d4
网友评论