题目
某出行APP在高峰时段(如早高峰7-9点)频繁出现闪退,技术团队排查发现是“定位服务”模块因并发过高导致线程阻塞,进而引发整个APP崩溃。以下哪种架构设计能提升该模块的可用性?
A. 给定位服务模块增加更多线程,提高并发处理能力
B. 采用“舱壁模式”,将定位服务模块与其他模块隔离,限制其资源占用
C. 简化定位服务的功能,减少计算量
D. 要求用户在高峰时段关闭定位功能
分析过程
核心问题:单个模块(定位服务)故障导致整个系统崩溃,需提升模块故障隔离能力,属于架构可用性设计范畴。
•选项A:增加线程可能暂时缓解并发压力,但线程过多会导致CPU调度 overhead 增加,甚至引发资源耗尽(如内存溢出),反而加剧崩溃风险,且未解决“模块故障影响全局”的问题→排除。
•选项B:舱壁模式(Bulkhead Pattern)类似船上的“防水舱”,通过隔离资源(如线程池、内存)将定位服务模块与其他模块分开。即使定位服务线程阻塞,也只会消耗其专属资源,不会影响APP其他功能(如订单、支付),从根本上避免“一损俱损”→符合需求→正确。
•选项C:简化功能可能降低并发压力,但无法解决极端情况下的故障隔离问题,且牺牲了用户体验(如定位精度下降)→不彻底→排除。
•选项D:牺牲用户核心功能来规避问题,属于不合理设计,不符合架构师“在满足需求的前提下解决问题”的原则→排除。
答案
B
考点总结
本题考查架构容错模式(舱壁模式),核心考点:
1.舱壁模式的作用:通过资源隔离(线程池、内存、网络连接等)限制故障模块的影响范围,防止级联失败;
2.可用性设计的核心思路:不仅要提升模块性能,更要通过隔离、熔断等机制控制故障扩散。
工作使用场景
你负责的出行APP在早高峰多次因定位服务崩溃导致整体闪退,用户投诉量激增。采用舱壁模式优化后:给定位服务分配独立线程池(最大线程数限制为50),并设置超时时间(3秒未响应则返回默认位置)。优化后,即使定位服务因并发过高阻塞,也只会导致定位功能降级(返回默认位置),APP其他功能(如叫车、支付)正常运行,闪退率从15%降至0.1%,用户满意度显著提升。
夜雨聆风