一个java微服务项目,使用了eureka、hystrix、ribbon、zuul`等技术,目前服务是集群分布式架构,每个服务存在4个节点,有时候项目其中一个节点内存溢出了,出现了假死状态,无法提供服务,但是网关zuul+ribbon转发请求的时候,还是会将请求转发到这台坏的节点,直到一直访问不通,才会自动转发到其它节点,最后再返回数据,这个请求中间大概花费了10~20秒左右,严重影响整体性能。这种节点假死eureka因为自我保护机制也不会剔除它。
java微服务节点假死,网关路由时长延迟
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
24条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
为了解决这个问题,我们需要对Java微服务中的几个关键组件进行调整,包括Eureka、Hystrix和Ribbon。以下是具体的步骤和配置建议:
-
优化Eureka客户端配置: 在Eureka客户端(即各个微服务应用)的配置文件中,增加Eureka心跳检测的相关配置,让Eureka更快速地发现节点故障。
eureka: client: register-with-eureka: true fetch-registry: true serviceUrl: defaultZone: http://eureka-server:8761/eureka/ # 增加心跳间隔时间和最大空闲时间 heartbeatIntervalSeconds: 5 # 默认30秒,这里设置为5秒 leaseRenewalIntervalInSeconds: 5 # 默认30秒,这里设置为5秒 leaseExpirationDurationInSeconds: 15 # 默认90秒,这里设置为15秒
-
启用Hystrix熔断器的快速失败机制: Hystrix可以更快地识别服务调用失败,并进入降级策略。在Hystrix配置中,减少
circuitBreaker.requestVolumeThreshold
和hiristrix.command.default.execution.isolation.thread.timeoutInMilliseconds
的值。@Configuration public class HystrixConfig { @Bean public HystrixCommandProperties hystrixCommandProperties() { return new HystrixCommandPropertiesBuilder() .setCircuitBreakerRequestVolumeThreshold(5) // 设置最小请求数量,低于此数量不触发熔断 .setExecutionIsolationThreadTimeoutInMilliseconds(1000) // 熔断阈值,超过这个时间未完成则熔断 .build(); } }
-
配置Ribbon超时和重试: 调整Ribbon的连接超时、读取超时以及重试次数,使其在网络不稳定或目标服务响应慢的情况下能更快地失败并尝试其他可用的服务实例。
ribbon: ReadTimeout: 3000 # 设置读取超时时间,单位毫秒,默认2000ms ConnectTimeout: 3000 # 设置连接超时时间,单位毫秒,默认2000ms MaxAutoRetries: 0 # 设置重试次数,默认为1 MaxAutoRetriesNextServer: 0 # 设置在所有服务器上重试的最大次数,仅当MaxAutoRetries > 0时有效
-
使用Hystrix仪表盘监控: 配置Hystrix Dashboard以便实时监控各个服务的健康状况,及时发现问题。
-
考虑使用Spring Cloud Gateway: 如果可能,考虑将Zuul升级到Spring Cloud Gateway,因为它提供了更好的容错能力和更细粒度的控制。
-
优雅退场与服务重启: 当检测到服务节点异常时,可以设计一个监控系统,自动重启出问题的服务实例,确保服务始终在线。
通过上述配置,你应该能显著缩短请求延迟,提高系统的健壮性和稳定性。同时,结合日志监控和报警系统,以便在问题发生时及时处理。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
- ¥15 安装quartus II18.1时弹出此error,怎么解决?
- ¥15 keil官网下载psn序列号在哪
- ¥15 想用adb命令做一个通话软件,播放录音
- ¥30 Pytorch深度学习服务器跑不通问题解决?
- ¥15 部分客户订单定位有误的问题
- ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
- ¥15 Bug traq 数据包 大概什么价
- ¥15 在anaconda上pytorch和paddle paddle下载报错
- ¥25 自动填写QQ腾讯文档收集表