关于Dubbo多中心注册的大型事故现场

1.问题描述

一个简单的需求,根据手机号获取用户信息。做完之后,多测试了几次,问题出现了:

连续多次请求,用户信息返回不一致

这个逻辑比较简单,Controller参数处理,Interface注入到Dubbo,实现层实现接口,查询数据库。 

2.解决过程 

一句话,一个条件,正常逻辑返回的数据应该是一样的,两次返回结果不一致,简直就是幽灵一样,不知道是哪里的问题。

2.1.缓存

是不是有缓存?干脆换了浏览器,请求。可惜,Bug依旧在。

2.2.数据库内数据异常

用命令查询数据库,数据正常。为了杜绝个别用户信息异常,测试多个用户手机号,结果没异常。

2.3.单步调试

想单步调试看看问题出在哪里,只能在本地启动。通过postman发起请求,单步调试。发起多次请求:

(1)数据正常返回的,能够在实现层,查询数据库;

(2)异常返回数据的,根本没进入实现层,更没有查询数据库;

问题定位了,请求到哪里了?直接返回一个结果?Dubbo注入的接口,也没报错,证明Dubbo正常。

3.问题解决

目前,项目部署有多个环境。其中,测试环境,有一套在物理机,有一套在容器。

回想一下,豁然开朗,是不是Dubbo请求转发到不同的服务器了?

因为公司环境要往容器迁移,物理机要回收(但是还没回收)。看了发布环境,物理机是昨天发布的,容器是今天发布的(ps:今天改了点代码,只在容器发布,物理机没有发布,等于是两套环境的代码不一致)。想到了这里,逻辑似乎讲通了,于是停掉物理机的服务,只保留容器环境的服务,再进行测试,正常。

4.知识

Dubbo服务注册到Zookeeper,项目中确实使用了多中心配置,如下图所示,负载均衡把Dubbo的服务指向了不同的服务器,同时刚刚巧,两个服务不一致,导致Bug的出现。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值