dubbo在网络异常情况下的踩坑经历

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 背景先交代下问题背景,因为某种原因,我们需要在dubbo中使用多注册中心模式,整体上的网络拓扑类似下图。服务A通过注册中心A向外提供rest接口服务A通过注册中心B引用注册在中心中心B的服务BCD服务BCD通过注册中心B向外提供dubbo接口网络拓扑抽丝剥茧排查问题服务A原本在X机房已经正常在运行的,只不过服务A和服务BCD同时注册在同一个注册中心而已。

背景

先交代下问题背景,因为某种原因,我们需要在dubbo中使用多注册中心模式,整体上的网络拓扑类似下图。

  • 服务A通过注册中心A向外提供rest接口
  • 服务A通过注册中心B引用注册在中心中心B的服务BCD
  • 服务BCD通过注册中心B向外提供dubbo接口
img_a49bed3b9c6c8f9d8997ea5124a66886.png
网络拓扑

抽丝剥茧排查问题

  • 服务A原本在X机房已经正常在运行的,只不过服务A和服务BCD同时注册在同一个注册中心而已。现在服务A换到了Y机房,但是服务却始终注册不到注册中心当中。

  • 如何发现服务A没有注册到注册中心呢,熟悉dubbo的应该都懂如果用zookeeper作为注册中心,那么在zookeeper的节点(/dubbo/server_interface/provider)下会有对应的服务

  • 一开始服务没有注册,完全没有排查思路只是隐隐地感觉tomcat的服务应该没有完全启动起来,后来请公司的大神海军一起过来看,通过使用jstack命令发现有一些连接zookeeper的线程等待,但是不确定什么原因。

  • 开始尝试将服务A从注册中心A引用的服务BCD,也就是虽然服务BCD没有发布在注册中心A,但是可以通过设置<dubbo:reference check="false"/>来设置不检查服务BCD是否存在,这个时候发现tomcat的服务起来了当然服务A依然没有成功注册到注册中心A,但是这个时候有更关键的日志打印出来了,直接让我定位到网络不通的问题。

  • 打电话直接给运维沟通是否机房A和机房B是否网络不通,当然我肯定也尝试ping的过程,最终确认机房网络不通。

  • 短暂在机房A临时搭建依赖的redis和zookeeper,尝试启动服务后发现服务A已经成功注册到注册中心A,至此整个过程已经结束。


我的收获

  • 首先我成功的错过了一场电影,浪费了一张电影票,到时候向运维的同学去索要补偿。

  • 明白当没有日志可以供参考的时候,多尝试用jstack去查看线程占用的情况

  • 排查过程中,发现自己心态挺有意思的,经历了困惑、平稳、自信能够定位问题,整个过程中不停的提醒自己,一般人很难遇到这种问题,所以要为自己能够遇到问题而庆幸,最后很庆幸的解决了,对于重复的事情没什么热情

  • 在做事情的过程中需要在完成目标的同时为自己的技术找一点技术目标,在过去的一个星期的时候我就做了一件很简单的事情,梳理服务的降级开关以及压测对应的服务。本职工作就是以一个系统的思维去整理这些东西,同时在压测过程中顺带把jmeter熟悉了一下,通过自己的使用和跟压测大拿的都都交流也算了解了一门新技能。


我的不屑

  • 最近听到过两种自己比较反感的声音,第一种是说自己改写代码多么累的声音,第二种是说自己开会多么累的声音,突然有一种感觉格局这种东西除了去经历也只有通过看书去提高了,切记进入自high型的状态。

  • 想想我们组还是非常务实的,果然一个项目组的风格完全是由领队的风格决定的,我觉得现在的状态挺有意思的。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
6月前
|
网络协议 网络安全 Python
Python网络编程基础(Socket编程) 错误处理和异常
【4月更文挑战第10天】网络编程涉及到很多复杂的操作和潜在的风险,如连接失败、数据丢失、超时等问题。因此,正确的错误处理和异常捕获是确保网络程序稳定性和可靠性的关键。本章将介绍网络编程中常见的错误和异常,并探讨如何在Python中进行有效的错误处理。
|
存储 Dubbo Java
由浅入深Dubbo网络通信深入解析 2
由浅入深Dubbo网络通信深入解析
71 1
|
存储 缓存 编解码
由浅入深Dubbo网络通信深入解析 1
由浅入深Dubbo网络通信深入解析
71 0
|
3天前
|
Dubbo Java 应用服务中间件
深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案
本文深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案。通过检查GraalVM版本兼容性、配置反射列表、使用代理类、检查配置文件、禁用不支持的功能、查看日志文件、使用GraalVM诊断工具和调整GraalVM配置等步骤,帮助开发者快速定位并解决问题,确保服务的正常运行。
14 1
|
10天前
|
安全 Java Linux
如何确定 Broken Pipe 异常是由网络问题还是其他原因引起的
Broken Pipe 异常可能由网络问题或其他原因引起。要确定具体原因,可以检查网络连接状态、防火墙设置和系统日志,同时分析异常发生时的上下文信息。
|
3月前
|
机器学习/深度学习 运维 监控
|
3月前
|
Kubernetes 监控 网络协议
在K8S中,如果因为网络原因导致Pod异常,该如何排查?
在K8S中,如果因为网络原因导致Pod异常,该如何排查?
|
3月前
|
Dubbo Java Nacos
【实战攻略】破解Dubbo+Nacos+Spring Boot 3 Native打包后运行异常的终极秘籍——从零开始彻底攻克那些让你头疼不已的技术难题!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但使用Dubbo+Nacos+Spring Boot 3进行GraalVM native打包后常遇运行异常。本文剖析此问题及其解决策略:确认GraalVM版本兼容性;配置反射列表以支持必要类和方法;采用静态代理替代动态代理;检查并调整配置文件;禁用不支持的功能;利用日志和GraalVM诊断工具定位问题;根据诊断结果调整GraalVM配置。通过系统排查方法,能有效解决此类问题,确保服务稳定运行。
93 0
|
JSON 前端开发 JavaScript
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(三)
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(三)
|
4月前
|
测试技术 API Android开发
autox.js如何监听异常情况,比如网络中断、内存慢、应用死机或者页面无响应
autox.js如何监听异常情况,比如网络中断、内存慢、应用死机或者页面无响应