任何一个系统,都不能保证百分之一百不出问题,所以我们要有面向失败的设计,那就是更精细化的流控和降级策略。
| 更精细化的流控策略
热点控制。针对黑产刷单的场景,同一个会员 id 会有大量重复的请求,形成热点账号,当这些账号的访问超过设定阈值时,实施限流策略。
基于调用账号的流控规则。这个策略主要是防止调用方的代码 bug 导致的大流量。例如,调用方在一次用户请求中,循环很多次来调用会员接口,导致会员系统流量暴增很多倍。所以,要针对每个调用账号设置流控规则,当超过阈值时,实施限流策略。
全局流控规则。我们会员系统能抗下 tps 3 万多的秒并发请求量,如果此时,有个很恐怖的流量打过来,tps 高达 10 万,与其让这波流量把会员数据库、ES 全部打死,还不如把超过会员系统承受范围之外的流量快速失败,至少 tps 3 万内的会员请求能正常响应,不会让整个会员系统全部崩溃。
| 更精细化的降级策略
基于平均响应时间的降级。会员接口也有依赖其他接口,当调用其他接口的平均响应时间超过阈值,进入准降级状态。
如果接下来 1s 内进入的请求,它们的平均响应时间都持续超过阈值,那么在接下的时间窗口内,自动地熔断。
基于异常数和异常比例的降级。当会员接口依赖的其他接口发生异常,如果 1 分钟内的异常数超过阈值,或者每秒异常总数占通过量的比值超过阈值,进入降级状态,在接下的时间窗口之内,自动熔断。
目前,我们最大的痛点是会员调用账号的治理。公司内,想要调用会员接口,必须申请一个调用账号,我们会记录该账号的使用场景,并设置流控、降级策略的规则。
但在实际使用的过程中,申请了该账号的同事,可能异动到其他部门了,此时他可能也会调用会员系统,为了省事,他不会再次申请会员账号,而是直接沿用以前的账号过来调用,这导致我们无法判断一个会员账号的具体使用场景是什么,也就无法实施更精细的流控和降级策略。
所以,接下来,我们将会对所有调用账号进行一个个的梳理,这是个非常庞大且繁琐的工作,但无路如何,硬着头皮也要做好。
