面试题答案
一键面试技术角度权衡
重试策略
- 性能影响:适当的重试可以解决短暂性故障,但若重试次数过多或间隔不合理,会增加请求处理时间,消耗额外资源,如网络带宽、CPU 等。
- 可用性提升:能有效应对如网络闪断等临时性问题,提高系统整体可用性。
- 成本:增加资源消耗,开发上需处理重试逻辑,增加开发维护成本。 权衡:根据故障类型和概率设置合理的重试次数和间隔,如对于网络相关故障可适当增加重试次数。例如,调用第三方支付接口时,偶尔因网络波动支付失败,可重试2 - 3次,每次间隔1 - 2秒。
隔离策略
- 性能影响:资源隔离会限制单个服务可使用的资源上限,在服务负载正常时,对整体性能影响不大;但当服务突发高负载时,可能因资源不足导致部分请求失败。
- 可用性提升:避免单个服务故障拖垮整个系统,提高系统可用性。例如,采用线程池隔离,一个服务的线程池耗尽不会影响其他服务。
- 成本:需要额外的资源来实现隔离,如多套线程池或容器实例,增加资源成本和开发维护复杂度。 权衡:根据服务重要性和故障影响范围分配资源,重要服务给予更多资源。如订单服务和评论服务,订单服务更重要,分配较多线程池资源。
业务角度权衡
重试策略
- 业务影响:重试可能导致业务数据重复,如订单重复提交。因此,业务上要考虑数据一致性和幂等性。
- 权衡:对于幂等性操作(如查询操作)可大胆重试;对于非幂等性操作(如支付),需谨慎处理,结合业务逻辑确保数据准确性。例如电商下单支付,支付接口重试时要保证不会重复扣钱,可通过订单状态标识和支付流水号判断。
隔离策略
- 业务影响:不同业务场景对隔离需求不同。如核心业务(如交易、用户登录)需更强隔离保证稳定性,而辅助业务(如推荐系统)隔离要求相对低。
- 权衡:根据业务优先级分配资源和设置隔离级别。例如银行转账业务,作为核心业务,采用更严格的资源隔离和独立部署,确保转账不受其他业务影响。
不同场景下的决策依据
高并发且故障概率低场景
- 决策:可适当减少重试次数,采用轻量级隔离策略。
- 依据:高并发下过多重试会加重系统负担,故障概率低意味着重试必要性不大。例如大型电商促销活动时,系统高并发,支付成功率高,重试次数可设为1 - 2次,隔离上采用简单的线程池隔离。
对数据准确性要求极高场景
- 决策:对于非幂等操作,严格控制重试,加强数据一致性校验;隔离上确保核心业务独立稳定。
- 依据:数据准确性是关键,防止重试导致数据错误。如金融交易场景,不轻易重试支付操作,采用独立服务器和数据库保证交易数据安全准确。
对成本敏感场景
- 决策:减少资源消耗型的容错策略,如降低隔离资源配置,优化重试逻辑减少不必要重试。
- 依据:成本优先,在保证一定可用性前提下降低成本。如创业初期的互联网产品,资源有限,可采用简单的重试和隔离策略,根据业务发展逐步优化。