(3)限流-削峰填谷<架构解决方案>

高并发常规手段:扩容、静态化、限流、缓存、队列

概要:guava的RateLimit、Nginx + redis + lua、sentinel

1、过度设计失败案例:

生成订单号—扣库存—生成订单—付款,扣完库存通知mq,mq没立刻返回,卡在生成订单上,阻塞

2、guava的RateLimit限流(令牌桶)

    1)每次请求获1个token2s才可从桶中获取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,调用redisincrby增加访问次数expire设置过期时间

    (2)最后根据阈值判定走向,ps:阈值到,要等key过期重新计算

4、sentinel限流及其他

轻量级,低侵入,熔断降级

其他:分段秒杀、答题、验证码

mq部分:https://www.jianshu.com/p/886552f434d4

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容