如何轻松应对偶发异常
在回顾了一下 MSE 是如何做到全面消除变更态风险之后。我们来看一下 MSE 微服务治理在三月份新上线的这些功能,如何帮助大家轻松应对偶发异常。
我们做了大致的总结和归类,将偶发异常的情况分为了两部分:异常流量和不稳定服务依赖。
接下来我们将面向这两个大类下五个小类的场景,来阐述如何借助 MSE 微服务治理三月份发布的新功能去解决这些偶发异常的。
接口限流
首先我们看一下激增流量这一块。拿一个具体的场景来说,业务方精心准备了一个大促活动,活动非常火爆,在活动开始的一瞬间,远远超过系统承载预期的用户进来抢购秒杀,如果没有微服务治理能力,服务可能由于扛不住流量直接被打挂,甚至在重启的过程还不断被打挂。精心准备的活动由于系统宕机导致效果非常差,在遇到难得的业务爆发式增长机会时,却因为应用的宕机错失了爆发的机会。
在这个场景下,可以借助 MSE 的流控能力对关键接口配置流控规则保护应用整体的可用性。只让容量范围内的请求被处理,超出容量范围外的请求被拒绝,相当于这是一个安全气囊的作用。
如上图所示, /a 这个接口是我们应用的关键接口,我们识别到单机阈值是 200 后,配置上流控防护规则,使得这个关键接口最大的通过 QPS 是 200,超出阈值的流量会直接被拒绝,从而保护应用整体的可用性。
精准限流
接下来我们再看一下精准限流,拿一个具体的场景来说,由于在配置优惠活动的时候没有配置好最大次数,或者存在规则上的漏洞。在被黑产发现后不断地进行在刷单,业务损失严重。在这个场景下,我们可以借助 MSE 的精准限流能力实现防黑产刷单。
MSE 的精准限流可以在 API 的维度基础上,基于流量的特征值来进行限流,比如根据调用端的 IP,参数中的某一个参数的值,或者说 HTTP 请求里 header 的特征等。
如上图所示,当我们识别到黑产用户的特征之后,可以根据 header 里面 key 为 user-id 的值来进行精准的业务限流,这里配置的规则为每天只能通过一次,也就意味着黑产流量被识别到之后,一天内超出一次的调用都会被拒绝,这样就能有效地防止黑产刷单保护业务。
并发隔离
第三部分是并发隔离,拿一个具体的场景来说,假设我们的应用依赖了一个第三方的支付渠道,但是因为渠道本身的原因出现了大量的慢调用,进而导致了应用全部的线程池都被调用该支付渠道的调用占满了,没有线程去处理其他正常的业务流程。而且这个第三方的支付其实只是我们其中的一个支付渠道。我们其他的支付渠道都是正常的。
MSE 可以对应用作为客户端的流量进行并发隔离,限制同时调用这个第三方支付渠道的最大并发数,从而留下充足的资源来处理正常的业务流量。
如上图所示,我们配置了并发数阈值是 5,每个应用节点最多同时存在 5个并发去调用第三方支付服务,当调用数超过了 5 的时候,请求在发起前就会直接被拒绝。通过并发隔离,把不稳定的支付渠道隔离到有限的影响面,而不会挤占其他正常支付渠道的资源,这样来保障我们一个业务的稳定性。
SQL 防护
第四部分是 SQL 防护,拿一个具体的场景来说,应用更新后出现了慢 SQL 的语句,处理的时间比较长的,这个时候需要快速定位慢 SQL ,然后防止我们这个应用去被这个慢 SQL 拖垮了。或者在项目的初期可能没有对这个 SQL 的性能做一个很好的考量,然后随着业务的发展,业务量级的增加,然后导致线上遗留老 SQL 逐渐腐化,成为了一个慢 SQL。
MSE 的数据库治理功能,可以自动统计应用的 SQL语句,以及 SQL 的 QPS、平均耗时 和最大并发等数据,并针对于 SQL 进行一个防护。
如上图所示,在平均耗时中找到慢 SQL,点击右边的 SQL 防护按钮,通过配置并发隔离规则来进行保护应用不被慢 SQL 拖垮。
服务熔断
最后我们再来看一下服务熔断。拿一个具体的场景来说,在业务高峰期查询积分服务达到性能瓶颈,导致响应速度慢、报错增多。但是它并不是一个关键的服务,这时不能因为无法查询积分余额而导致整个流程都无法进行。正确的逻辑应该是积分余额暂时不显示,但是除此之外其他主流程都能正常完成。
MSE 的服务熔断功能,可以很好地解决上述的问题。MSE 支持通过慢调用的比例,或者错误数去衡量一个服务是否处于正常状态,当识别到服务已经不正常的时候就自动触发熔断。熔断后消费者不会再去调用出问题的服务了,而是直接返回 Mock 值。
如上图所示,配置当异常比例超过 80% 的时候自动触发熔断,不再去调用不正常的服务。一方面消费者不再去调用不正常的弱依赖服务,不会因为弱依赖的问题导致主流程不正常。另一方面,熔断也给了不稳定的下游一些喘息的时间,让它有机会去恢复。
我们最后再来总结一下 MSE 微服治理是如何助您轻松应对线上偶发异常的,针对我们刚才总结的这五类场景:
- 当遇到激增流量的时候,我们应该使用接口限流。
- 当我们遇到黑产刷单等问题的时候,我们应该使用精准限流。
- 当第三方服务不响应,占满线程池的时候,我们应该使用并发隔离。
- 当应用存在慢 SQL 的时候,我们应该使用 SQL 防护。
- 当应用的弱依赖出现异常,影响我们核心业务流程的时候,我们应该使用服务熔断。
通过这五个功能,MSE 微服务治理可以助您去轻松去应对上述场景的一些偶发异常,后续 MSE 也会持续不断地去探索和拓展更多场景,更全面地保障您应用的运行时的稳定性。
结语
MSE 微服务治理致力于帮用户低成本构建安全、稳定的微服务。由于篇幅原因,更多的功能就不在这里给大家详细介绍了,关于 MSE 更多的详情,读者可以通过查看 MSE 帮助文档的了解详情。