面试题答案
一键面试1. 服务熔断
- 实现方式:在Spring Cloud中可使用Hystrix实现服务熔断。Hystrix通过监控微服务间调用的健康状况,当失败率达到一定阈值时,自动熔断电路,阻止对故障服务的进一步调用。例如,配置Hystrix的
circuitBreaker.requestVolumeThreshold
(设定在一定时间内达到多少请求才进行熔断判断)、circuitBreaker.errorThresholdPercentage
(失败请求的百分比阈值)等参数。 - 作用:避免因某个微服务故障而导致整个系统级联故障。当故障服务不可用时,快速返回错误响应,防止大量请求堆积在故障服务上,消耗系统资源。
- 在系统中的位置:处于微服务调用链路中,针对每个微服务间的调用设置熔断机制,在调用方实现。
2. 服务降级
- 实现方式:同样可借助Hystrix。在熔断后或系统压力过大时,触发服务降级逻辑。可以编写降级方法,如使用
@HystrixCommand(fallbackMethod = "fallbackMethodName")
注解指定降级方法。当正常调用失败时,执行该降级方法,返回兜底数据或简单的提示信息。 - 作用:保证核心业务功能可用,牺牲非核心功能来确保系统整体的可用性。比如在电商系统中,商品详情页图片加载属于非核心功能,在系统压力大时,可降级为不加载图片,优先保证商品基本信息展示等核心功能。
- 与熔断关系:熔断是触发降级的一种情况,当熔断开启后,调用就会执行降级逻辑。降级还可在系统资源紧张等其他情况下主动触发。
3. 重试机制
- 实现方式:使用Spring Retry库。在微服务调用配置中,设置重试策略,如
@Retryable
注解。可指定重试次数、重试间隔时间、触发重试的异常类型等。例如@Retryable(value = {ConnectException.class}, maxAttempts = 3, backoff = @Backoff(delay = 2000))
,表示对ConnectException
异常进行重试,最多重试3次,每次间隔2秒。 - 作用:对于一些短暂性故障,如网络闪断等,通过重试机制有可能恢复正常调用,减少因瞬间故障导致的服务不可用。
- 与熔断关系:重试机制在熔断未触发时起作用,当重试次数达到上限仍失败,可能会触发熔断。
4. 整体设计
- 分层设计:在网关层,可以对所有进入系统的请求进行初步的熔断和限流,防止大量无效请求涌入系统。在微服务内部,针对每个微服务间的调用设置上述的熔断、降级和重试机制。
- 监控与调整:结合Spring Boot Actuator和一些监控工具(如Prometheus + Grafana),实时监控熔断、降级、重试等机制的运行状态,根据监控数据动态调整相关参数,如熔断阈值、重试次数等,以适应不同的业务场景和系统负载。