12 | 服务高可用:保证核心链路稳定性的流控和熔断机制
该思维导图由 AI 生成,仅供参考
流量控制
- 深入了解
- 翻译
- 解释
- 总结
在面对高并发场景下,保证核心链路稳定性至关重要。本文深入介绍了流控和熔断机制在高可用服务中的重要性和实现方式。首先分析了突发流量和高并发峰值对业务的影响,指出单纯的设计优化和服务拆分并不能完全解决问题。随后,详细介绍了流量控制的重要性,并深入解析了流控算法中的漏桶算法和令牌桶算法。全局流控在分布式服务场景下起到关键作用,通过中央式资源和脚本实现全局计数器的方案。另外,文章提到了在实现全局流控时需要解决的细粒度控制和流控依赖资源存在瓶颈的问题。针对突发流量,介绍了自动熔断机制,通过持续收集被依赖服务或者资源的访问数据和性能指标,实现自动触发熔断,保障系统整体稳定性和可用性。总的来说,本文通过深入浅出的方式介绍了流控和熔断机制在高可用服务中的重要性和实现方式,对于需要应对高并发场景的技术人员具有一定的参考价值。
《即时消息技术剖析与实战》,新⼈⾸单¥59
全部留言(15)
- 最新
- 精选
- 钢老师,前阵子志玲结婚消息引起微博瘫痪,能分析下当时具体情况吗,是哪个扩容,限流,熔断中哪个环节引起的,后面又是如何改进的
作者回复: 抱歉,尽量不在这里讨论公司相关的话题。
2019-09-24213 - 东东🎈老师,问个设计问题,发群消息的时候,怎么查询这个群的在线用户列表?
作者回复: 个人觉得不需要针对群来维护在线状态,直接把所有群消息都pub给网关机,网关机根据本机维护的“当前这条消息的群的用户哪些在我本机上”这个映射来下推就可以了。
2019-09-2355 - 饭团老师。请问做限流有好的开源代码推介吗?虽说原理很简单,但是对于没做过的人还是看看具体的实现比较好! 至于老师的问题!我感觉在服务上线前肯定会做压力测试!我们是不是可以记录下当时的各项服务的指标,当我们线上服务单位时间内服务的10%或者一个合适的比例,超过相应指标的时候就得做熔断了!
作者回复: 单机限流推荐guava的RateLimiter,全局限流直接基于Redis+Lua写一个很简单。 对,限流阈值需要模拟压测,避免由于阈值设置太宽松导致服务仍然可能被拖死或者阈值太敏感导致一点抖动也会整体熔断。
2019-09-2324 - mgxian老师,流控令牌的本地批量预取,是单线程负责维护的吗?如果多线程是不是要使用锁来控制并发修改数据问题?这样不会把请求的响应时间拉的很长吗?
作者回复: 可以使用原子性的、线程安全的数据结构来存储令牌,比如AotomicLong等,这种数据结构支持一次decr多个而且能保证线程安全和高性能的。
2019-09-2323 - Geek_e986e3感觉应该用最近请求x次 失败y次做阈值?还有老师 想问问 降级的时候一般都是怎么处理的 是直接对外反馈服务不可用吗? 或者返回之前缓存或者默认值之类的吗?
作者回复: 失败需要熔断,超时同样也需要熔断,要不然也会把服务拖死。降级的话看情况吧,如果是旁路非核心,对用户影响不大的可以直接“轻微有损返回”,对于核心的链路的熔断,可以直接返回失败让用户重试(熔断的价值在于避免服务整体不可用),或者通过重试队列把当时失败的请求先buffer起来后续恢复后再继续处理。
2019-09-233 - 东东🎈老师,对于netty的单机服务端收消息流控方案,高低水位好还是guava好?
作者回复: netty的水位应该只是和tcp buffer相关的,如果需要消息条数维度的控制还是guava。
2019-09-271 - kamida老师 如果我们要针对用户分别限流 是不是本地预取就不能用了
作者回复: 本地预取和是否针对用户分别限流本身没有必然的依赖关系,只不过用户未读的预取如果用户太多,就意义不大了,同样可能单uid的并发小了,也没必要预取来优化了。
2020-03-12 - Ray有时候一个交互需要多个接口组合。举个不恰当的例子,比如登录,要验证密码,还要验证验证码,甚至可能还要调用第三方接口做一些验证。这种场景下如果去对每个接口单独限流,必定导致整体登录失败率大大提高,请问这种场景怎么进行限流
作者回复: 不知道我理解对没,如果是要限制这个交互的频次,可以在这个交互的入口接口进行限流就可以呀。
2019-09-282 - 鲁大喵关于分布式限流,可以关注我写过的一个基于redis的分布式限流组件,欢迎指教。基本思路就是把guava的ratelimiter用lua脚本实现,相比incr+expire这种方式,更加平滑,可以实现比较精准的控速。项目地址https://github.com/diracccc/redis-rate-limiter2020-10-013
- 钢在全链路压测监控中,统计哪个模块最脆弱,得出该模块最大访问次数,实际应用中对该模块请求次数进行统计,超过最大访问次数则进行熔断2019-09-233