面试题答案
一键面试性能优化
- Eureka配置调优
- 客户端缓存:在Eureka客户端配置合理的缓存时间,减少对Eureka Server的请求频率。例如,在
application.yml
中设置:
- 客户端缓存:在Eureka客户端配置合理的缓存时间,减少对Eureka Server的请求频率。例如,在
eureka:
client:
registry - fetch - interval - seconds: 30 # 每隔30秒从Eureka Server拉取服务注册信息
- **心跳频率**:调整Eureka客户端向Eureka Server发送心跳的频率,适当降低心跳频率可以减少网络开销,但不能影响服务的健康检测。如:
eureka:
instance:
lease - renewal - interval - in - seconds: 10 # 每隔10秒发送一次心跳
lease - expiration - duration - in - seconds: 30 # 如果30秒内没有收到心跳,则认为服务实例失效
- Ribbon配置调优
- 负载均衡算法:根据业务场景选择合适的负载均衡算法。默认是轮询(RoundRobinRule),如果希望根据响应时间来分配请求,可以使用加权响应时间算法(WeightedResponseTimeRule)。在
application.yml
中配置:
- 负载均衡算法:根据业务场景选择合适的负载均衡算法。默认是轮询(RoundRobinRule),如果希望根据响应时间来分配请求,可以使用加权响应时间算法(WeightedResponseTimeRule)。在
service - name: # 具体的服务名
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
- **连接池配置**:配置Ribbon的连接池参数,以提高请求处理效率。例如:
ribbon:
MaxTotalConnections: 200 # 最大连接数
MaxConnectionsPerHost: 50 # 每个主机的最大连接数
- Hystrix配置调优
- 线程池隔离:合理配置Hystrix的线程池大小,避免因单个服务的故障影响其他服务。在
application.yml
中配置:
- 线程池隔离:合理配置Hystrix的线程池大小,避免因单个服务的故障影响其他服务。在
hystrix:
command:
default:
execution:
isolation:
thread:
coreSize: 10 # 核心线程数
maxQueueSize: 20 # 最大队列大小
- **熔断策略**:调整熔断的阈值和恢复策略,确保在服务出现问题时能快速熔断,恢复正常后能及时恢复请求。例如:
hystrix:
command:
default:
circuitBreaker:
requestVolumeThreshold: 20 # 在20个请求内,如果失败率超过50%,则触发熔断
errorThresholdPercentage: 50
sleepWindowInMilliseconds: 5000 # 熔断5秒后尝试恢复请求
故障处理
- Eureka故障处理
- 高可用部署:部署多个Eureka Server实例,形成相互注册的集群,提高Eureka的可用性。例如,假设有两个Eureka Server实例,在
application.yml
中配置:
- 高可用部署:部署多个Eureka Server实例,形成相互注册的集群,提高Eureka的可用性。例如,假设有两个Eureka Server实例,在
eureka:
instance:
hostname: eureka1.example.com # 第一个实例的主机名
client:
service - url:
defaultZone: http://eureka2.example.com/eureka/ # 注册到另一个Eureka Server实例
- **自我保护机制**:虽然自我保护机制会导致过期实例不会被及时清理,但在网络不稳定的情况下能防止误判。如果需要关闭自我保护机制,可以在Eureka Server的`application.yml`中配置:
eureka:
server:
enable - self - preservation: false # 关闭自我保护机制
eviction - interval - timer - in - ms: 60000 # 每60秒清理一次过期实例
- Ribbon故障处理
- 重试机制:配置Ribbon的重试策略,当请求失败时进行重试。在
application.yml
中配置:
- 重试机制:配置Ribbon的重试策略,当请求失败时进行重试。在
service - name: # 具体的服务名
ribbon:
OkToRetryOnAllOperations: true # 允许对所有操作进行重试
MaxAutoRetries: 1 # 最大重试次数
MaxAutoRetriesNextServer: 2 # 切换到下一个实例的最大重试次数
- Hystrix故障处理
- 降级处理:实现Hystrix的降级方法,当服务调用失败或超时,返回兜底数据,避免级联故障。例如,定义一个服务接口:
@Service
public class ExampleService {
@HystrixCommand(fallbackMethod = "fallbackMethod")
public String exampleMethod() {
// 正常业务逻辑
}
public String fallbackMethod() {
// 降级逻辑,返回兜底数据
return "default value";
}
}
- **监控与报警**:结合Hystrix Dashboard和Turbine对Hystrix的状态进行监控,设置合适的报警规则,及时发现和处理故障。例如,配置Hystrix Dashboard:
@Configuration
@EnableHystrixDashboard
public class HystrixDashboardConfig {
}
并通过Turbine聚合多个服务的Hystrix监控数据:
turbine:
appConfig: service - name1,service - name2 # 要聚合的服务名
clusterNameExpression: new String("default")
combineHosts: true