熔断、限流、降级都是微服务架构中保持系统稳定运行的策略,但针对的场景有所不同。
熔断是啥?
熔断在程序中,表示“断开”的意思。
如果服务B调用服务D,一旦调用成功率低于90%,我们就可以认为现在服务有问题,程序为了整体的稳定性,所以暂时(断开)停止服务一段时间,以保证程序可用时再被使用。
B调用D 调10次,仅成功8次?这不行啊,那我们先暂停调用D,让D缓一缓。
D停止使用期间,服务会返回给客户一个预设的响应结果,比如一个缓存数据,或者调用别的服务给出推荐内容。
但D不会一直被停用,会有一定的策略验证D当前运行状态。
比如我们会每分钟试探性的调用D服务5次,若都成功了,则下一分钟调用D服务10次,直至确定D服务恢复正常,自动停止熔断。
开源的熔断器,如:Hystrix
降级是啥?
降级是在特殊的高并发时期(天猫双11购物、京东618购物、微信年三十发红包),选择让部分服务暂停使用,或者服务处理能力等,以确保整个系统的稳定避免崩溃。
例如购物节前夕,为了确保客户有更好的购物体验,购物系统会将软件中不常用的功能,比如个性化装扮,趣味小游戏暂时关闭,用更多的空闲运行空间,以缓解订单系统的压力,确保整个系统的问题。
再举一个通俗易懂的例子:政府规定5月12号为烧烤节,小布饭馆可以让3名厨师都只负责烤串,别的菜品(宫保鸡丁、鱼香肉丝)近期全不炒了,或者选择一些复杂的菜用料理包代替,以确保烧烤节烤串能供应正常。
限流是啥?
限流是指上游服务对本服务请求 QPS1 超过阙值时通过一定的策略(如延迟处理、拒绝处理)对上游服务的请求量进行限制,以保证本服务不被压垮,从而持续提供稳定服务。常见的限流算法有滑动窗口、令牌桶、漏桶等。
当服务B疯狂访问服务D,一秒访问1000次,服务D放弃其中400次访问,以确保其余600次的正常运行。
比较常见的限流算法:计数器滑动窗口算法、漏桶算法、令牌桶算法
QPS:每秒查询率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。假如我们一天有10万pv(访问量), 公式 (100000 * 80%) / (86400*20%) = 4.62 QPS(峰值时间的每秒请求) 公式原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间。 ↩︎