
sentinel限流参数说明
- 流控规则
- 资源名:
- 场景:在一个电商系统中,有一个
/productList
接口用于获取商品列表。资源名就填写/productList
。当大量用户同时访问商品列表页时,通过对这个资源名对应的接口进行流量控制,防止系统因过多请求而崩溃。
- 场景:在一个电商系统中,有一个
- 针对资源:
- 场景:可以选择具体的微服务、接口或方法。例如,在一个包含用户服务、商品服务、订单服务的系统中,若只想对商品服务下的
/productDetail
接口进行流量控制,就在“针对资源”中明确选择该接口。
- 场景:可以选择具体的微服务、接口或方法。例如,在一个包含用户服务、商品服务、订单服务的系统中,若只想对商品服务下的
- 阈值类型:
- QPS(每秒查询率):
- 场景:对于一个提供新闻资讯的接口
/news
,假设服务器性能最多支持每秒处理100个新闻查询请求,就将阈值类型设为QPS,单机阈值设为100。这样,当每秒请求数超过100时,就会触发流量控制。
- 场景:对于一个提供新闻资讯的接口
- 并发线程数:
- 场景:在一个图像识别服务中,每个识别任务需要占用一定的线程资源。对于接口
/imageRecognition
,已知服务器最多能同时处理10个识别任务线程,将阈值类型设为并发线程数,单机阈值设为10。当同时处理的识别任务线程数超过10时,就进行流量控制。
- 场景:在一个图像识别服务中,每个识别任务需要占用一定的线程资源。对于接口
- QPS(每秒查询率):
- 单机阈值:
- 场景:对于一个提供天气查询的接口
/weather
,经过性能测试发现服务器在稳定状态下每秒能处理50个查询请求,那么单机阈值就设为50。当每秒请求数超过这个值时,就会采取流量控制措施。
- 场景:对于一个提供天气查询的接口
- 流控模式:
- 直接:
- 场景:对于一个简单的登录接口
/login
,直接对该接口的请求进行流量控制。当请求量超过设定的阈值时,直接拒绝多余的请求,这种方式简单直接,适用于对单个接口进行独立的流量控制。
- 场景:对于一个简单的登录接口
- 关联:
- 场景:在一个电商系统中,购买商品的接口
/placeOrder
和查询购物车的接口/cart
有关联。当用户频繁查询购物车(/cart
)且请求量超过一定阈值时,可能会对购买商品(/placeOrder
)的接口进行流量控制,因为购物车的频繁查询可能意味着用户正在大量操作购物车,即将进行购买行为,关联模式可以根据/cart
的流量情况对/placeOrder
进行合理的流量控制。
- 场景:在一个电商系统中,购买商品的接口
- 链路:
- 场景:在一个分布式系统中,有多个微服务组成的链路。从用户请求到商品详情展示,经过了用户认证服务、商品服务等多个环节。对于商品服务中的
/productDetail
接口,通过链路模式可以根据整个链路中的流量情况,如用户认证服务的流量,来对/productDetail
接口进行更精准的流量控制,考虑到整个请求链路的负载情况。
- 场景:在一个分布式系统中,有多个微服务组成的链路。从用户请求到商品详情展示,经过了用户认证服务、商品服务等多个环节。对于商品服务中的
- 直接:
- 流控效果:
- 快速失败:
- 场景:对于一个不太重要的辅助功能接口,如
/feedback
(用户反馈接口),当请求超过流量控制阈值时,直接返回错误信息给用户,让用户稍后再试,这种方式简单直接,对用户体验的影响相对较小,因为反馈功能不是核心业务流程。
- 场景:对于一个不太重要的辅助功能接口,如
- Warm Up(预热):
- 场景:对于一个刚启动的服务接口,如一个新上线的促销活动接口
/promotion
,设置Warm Up效果。开始时流量阈值较低,随着时间慢慢增加到设定的正常阈值,这样可以避免服务刚启动就被大量请求冲击,给服务一个预热的过程,让系统资源(如数据库连接池等)有一个逐渐适应的阶段。
- 场景:对于一个刚启动的服务接口,如一个新上线的促销活动接口
- 排队等待:
- 场景:对于一个订单处理接口
/processOrder
,当请求超过流量控制阈值时,让请求排队等待,而不是直接拒绝。适用于对请求顺序有要求且业务允许一定延迟的场景,比如订单处理有先后顺序,不能直接拒绝用户的订单请求,通过排队等待可以在系统可承受范围内逐步处理订单。
- 场景:对于一个订单处理接口
- 快速失败:
- 资源名:
- 熔断规则(降级规则)
- 资源名:
- 场景:在一个支付系统中,有一个
/payment
接口用于处理支付请求。资源名填写/payment
,当这个接口出现异常情况时,通过熔断规则对其进行降级处理。
- 场景:在一个支付系统中,有一个
- 熔断策略:
- 慢调用比例:
- 场景:对于一个查询数据库获取用户信息的接口
/getUserInfo
,如果超过60%的调用响应时间超过1秒(可自定义),就触发熔断。这意味着当数据库查询过慢,影响系统整体性能时,通过熔断来保护系统,避免大量慢调用导致系统卡顿。
- 场景:对于一个查询数据库获取用户信息的接口
- 异常比例:
- 场景:在一个调用第三方接口获取物流信息的
/getLogistics
接口中,当第三方接口返回异常的比例超过40%(可自定义)时,触发熔断。这样可以防止因第三方接口不稳定而导致系统出现大量错误,及时切断与不稳定外部接口的连接,保护系统内部的稳定性。
- 场景:在一个调用第三方接口获取物流信息的
- 异常数:
- 场景:对于一个文件上传接口
/uploadFile
,当连续出现5次(可自定义)上传文件失败的异常时,触发熔断。这种方式可以针对频繁出现同一类型异常的情况,快速采取熔断措施,避免系统在有问题的功能上浪费资源。
- 场景:对于一个文件上传接口
- 慢调用比例:
- 阈值:
- 场景:根据不同接口的重要性和性能要求设置不同的阈值。对于核心业务接口,如
/placeOrder
(下单接口),异常比例阈值可以设得较低,如30%,以保证系统的稳定性;对于非核心接口,如/getBanner
(获取广告横幅接口),异常比例阈值可以设得较高,如60%。
- 场景:根据不同接口的重要性和性能要求设置不同的阈值。对于核心业务接口,如
- 最小请求数:
- 场景:对于一个新上线的接口
/newFeature
,设置最小请求数为20。这意味着至少要有20次请求调用这个接口后,才会根据熔断策略去判断是否熔断。这样可以避免新接口在刚开始少量调用时,因偶然的异常或慢调用就触发熔断。
- 场景:对于一个新上线的接口
- 熔断时长:
- 场景:对于一个可能会出现短暂波动的接口
/priceUpdate
(价格更新接口),熔断时长可以设为30秒。当触发熔断后,在30秒内快速失败,30秒后重新尝试调用,观察接口是否恢复正常。如果接口恢复正常,就恢复正常访问;如果仍然异常,可能会再次触发熔断。
- 场景:对于一个可能会出现短暂波动的接口
- 统计窗口时长:
- 场景:对于一个有一定时间规律的接口,如
/dailyReport
(每日报表接口),统计窗口时长可以设为24小时。在这24小时内统计接口的慢调用比例、异常比例或异常数等指标,根据这些指标来判断是否触发熔断,这样可以更好地结合接口的使用周期来进行熔断规则的设置。
- 场景:对于一个有一定时间规律的接口,如
- 资源名:
- 热点规则
- 资源名:
- 场景:在一个视频网站中,有一个
/videoPlay
接口用于播放视频。资源名填写/videoPlay
,针对这个接口的热点参数(如热门视频的ID)进行流量控制。
- 场景:在一个视频网站中,有一个
- 参数索引:
- 场景:对于
/videoPlay
接口,它的参数列表可能是(视频ID,播放分辨率)。如果视频ID是第一个参数,参数索引就设为0。通过这个索引,Sentinel可以准确地定位到要进行热点参数控制的参数位置。
- 场景:对于
- 单机阈值:
- 场景:对于一个热门视频网站的
/videoPlay
接口,假设热门视频(如视频ID为1234的视频)每秒最多允许1000人同时播放,就将单机阈值设为1000。当对这个视频ID的播放请求每秒超过1000次时,就会触发热点参数流量控制。
- 场景:对于一个热门视频网站的
- 统计窗口时长:
- 场景:对于一个体育赛事直播的
/liveStream
接口,统计窗口时长可以设为比赛时长,如2小时。在这2小时内统计某个比赛直播(通过直播ID这个热点参数区分)的请求量,根据请求量来判断是否对这个热点参数进行流量控制,以适应比赛期间观众流量的波动。
- 场景:对于一个体育赛事直播的
- 参数类型:
- 场景:对于
/userProfile
接口,它有一个参数是用户年龄(整数类型)。当要对某个特定年龄区间(如30 - 40岁)的用户访问进行热点参数控制时,参数类型就选择整数类型,通过这个类型可以准确地识别和控制与年龄参数相关的流量。
- 场景:对于
- 高级选项 - 限流模式:
- 场景:对于
/productSearch
接口,它有一个搜索关键词参数。当要对热门搜索关键词进行流量控制时,限流模式可以选择“直接”模式,即直接对带有热门关键词的搜索请求进行流量控制;或者选择“关联”模式,例如当某个热门品牌关键词(如“苹果手机”)搜索量过大时,关联控制与该品牌相关产品的其他搜索请求,如“苹果手机配件”的搜索请求。
- 场景:对于
- 资源名:
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 王德明
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果