高并发场景下实现系统稳定运行
微服务网关常见限流方案
客户端限流
服务端限流
网关限流
应用层限流
微服务网关限流
详情页入口流量保护,黑订单,限制一个IP访问频率。
基于Redis + Lua的脚本限流
RequestRateLimiter过滤工厂。算法:令牌桶。
初始化令牌数量。每次请求过来获取一个令牌,请求完成后,令牌返回桶。
网关整合 Sentinel Route & API维度限流
主要功能:
根据API流控,根据热点参数进行流控。
流控规则配置在Sentinel后台,分发到网关各节点。网关加入Sentinel jar包。
在接受请求时候,通过SlotChain记录并计算流控的结果。
Sentinel 生产环境引入
- 2个维度
- API维度。api流控。
- Route维度。整个为服务进行流控
- 持久化
改造Senitnel支持Nacos持久化。规则从nacos分发到微服务网关。
下单引入Sentinel熔断
- 秒杀确认页,配置排队等待。匀速器设置。
- 热点参数限流。进行流控。
- 商品ID进行流控。
- 用户ID为参数,针对一段时间频繁访问的用户ID进行限制。
PS:
热点参数规则需要使用@SentinalResource(“resourceName”)进行注解。
参数必须是7中基本数据类型才行。
电商系统自适应保护方案
降级
系统容量达到一定程度时,限制或者关闭系统的某些非核心功能。把有限的资源保留给核心业务。
降级方案例子:
- 当秒杀流量达到5w/s时,把成交记录的获取从展示20条降级到只展示5条。从20 到5,通过开关来配置实现。
降级的核心目标是,牺牲次要的功能和用户体验来保证核心业务流程的稳定。不得已为之的举措。例如:在双11时如果优惠券
系统扛不住,可能会临时降级商品详情的优惠券信息展示。把有限的资源用在保障交易系统正确展示优惠信息上。既保证用户
整整下单时的价格是正确的。
服务降级的策略
熔断
对返回失败的借口,或者借口请求返回慢的。进行降级熔断。直接返回。不请求到后端服务。降低服务端的压力。