面试题答案
一键面试雪崩效应产生的原因
- 级联依赖故障:微服务架构中,服务之间存在复杂的依赖关系。当一个基础微服务出现故障时,依赖它的其他微服务会因为无法获取预期的响应,而等待超时或抛出异常。这些依赖故障的服务又会影响到依赖它们的上层服务,如此层层传递,最终导致整个系统瘫痪。
- 资源耗尽:大量请求在故障服务处无法得到及时处理,却持续占用资源(如线程、连接等)。随着故障服务的请求积压,依赖它的其他服务也会因为资源被占用而无法正常处理新请求,进一步加剧资源耗尽的情况,使得更多服务不可用。
通过负载均衡技术预防和应对雪崩效应
- 健康检查:负载均衡器定期对后端微服务实例进行健康检查,如通过HTTP心跳检测、TCP连接检测等方式。一旦发现某个实例出现故障,立即将其从可用实例列表中移除,避免将请求发送到故障实例,防止故障扩散。
- 动态负载分配:根据后端微服务实例的性能指标(如CPU使用率、内存使用率、响应时间等),动态调整请求的分配比例。性能好的实例分配更多请求,性能差的实例减少请求分配,避免单个实例因过载而引发故障,进而影响整个系统。
通过熔断技术预防和应对雪崩效应
- 熔断机制原理:熔断就像电路中的保险丝,当对某个微服务的调用失败次数或超时次数达到一定阈值时,熔断器开启。此时,后续对该服务的请求不再实际调用,而是直接返回一个预设的 fallback 响应,避免大量无效请求继续消耗资源,防止故障进一步蔓延。
- 状态转换与恢复:熔断器有三种状态,关闭(Closed)、开启(Open)和半开(Half - Open)。关闭状态下正常调用服务;开启状态下直接返回 fallback 响应;半开状态下允许少量请求尝试调用服务,如果调用成功,则熔断器恢复到关闭状态,否则继续保持开启状态。
通过限流技术预防和应对雪崩效应
- 流量限制策略:对每个微服务的请求流量进行限制,比如设置每秒、每分钟允许处理的最大请求数。当请求流量达到限制阈值时,后续请求可以根据不同策略处理,如直接返回错误信息告知用户稍后重试,或者将请求放入队列等待处理,避免因瞬间高流量压垮服务,降低雪崩发生的风险。
- 基于不同维度限流:可以基于多种维度进行限流,如基于IP地址限流,防止某个恶意IP大量请求耗尽服务资源;基于用户维度限流,保证每个用户的请求在合理范围内;基于接口维度限流,对不同的API接口设置不同的限流阈值,重点保护核心接口。