问题
在千万日活的电商系统中,商品列表页服务通过 RPC 调用广告服务;经过统计发现,在最近10秒的时间里,商品列表页服务在对广告服务的调用中有 98% 的调用是超时的; 针对这个场景,下面哪几项的说法是正确的?
A. 商品列表页服务需要触发对广告服务的调用熔断,来防止自身资源被耗尽,目的是对自身进行保护;
B. 商品列表页服务需要触发对广告服务的调用熔断,同时可以向用户返回默认的广告页面,来进行业务的降级处理;
C. 如果商品列表页服务没有触发对广告服务的调用熔断,很可能会造成整个电商系统的雪崩;
D. 基于这个案例说明,熔断和降级都是保证服务柔性可用的有效手段,降级不能独立使用。
解析
A 选项: 【商品列表服务】调用【广告服务】,有98%调用是超时的,如果继续调用,大概率仍得不到正常结果,熔断是最好的选择;每一次调用,在超时结束前,服务调用方,即【商品列表服务】会一直占用线程和内存资源,所以熔断可以避免资源被长时间占用,保护自己。
B 选项: 【商品列表服务】熔断对【广告服务】的调用,返回结果肯定是错误的,为了提升用户体验,可以返回默认的广告页面,做降级处理;这种情况就是由【熔断】触发的【降级】。
C 选项: 根据 A 选项的分析,如果【商品列表服务】没有熔断处理,则自身资源将持续被占用;随着访问增多,资源占用会加剧,直至【商品列表服务】没有处理能力; 这就是由【广告服务】不正常导致其上游【商品列表服务】不正常;同样的道理,【商品列表服务】的不正常会导致其上游的服务不正常,并形成扩散效应,最终很可能导致整个系统的雪崩。
D 选项: 降级与熔断不是强绑定关系,降级可以由【熔断】触发,也可以在【异常】、【超时】、【错误】等情况发生时进行触发。
答案
ABC