MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题

作者:子葵


背景


Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,具有易用、超大规模微服务实践、云原生基础设施适配、安全性等特点。但是不正确的 Dubbo 使用姿势可能会导致 Dubbo 应用以及 ZooKeeper 注册中心出现稳定性问题。近期,一线上客户发布时,由于 Dubbo Reference 重复初始化,导致 ZooKeeper 出现不可用,服务注册订阅失败,造成业务大面积故障。


ZooKeeper 出现异常日志↓


image.png

并且 ZooKeeper 集群持续不可用,无法自愈。


原因分析


Dubbo Reference 是 Dubbo 框架中服务提供者在调用者中的代理实现,在初始化 Dubbo Reference 的时候会将 consumer 本身注册在订阅的服务的 consumer 列表中,如果在一个应用中实例化了多个同一个接口的 Dubbo Reference,那么 ZooKeeper 中对应的被订阅的服务 consumer 列表中也会存在多个由于此应用订阅产生的 Znode 节点,这些 Znode 节点的 Path 除了 timestamp 字段都是一致的。



Dubbo 本身通过这种方式表示真实的订阅关系,但是在客户端不正确的使用的情况下,就可能导致 Dubbo 应用本身以及 ZooKeeper 的稳定性问题。

https://github.com/apache/dubbo/issues/4587


例如在 Dubbo 2.7.9 之前的版本中在应用中初始化多个相同接口的 Dubbo Reference, 可能会导致内存溢出的问题。


对于 ZooKeeper 集群,在之前 jute.maxbuffer 调优文章中分析过在 ZooKeeper Server 之间数据同步的时候会严格根据 jute.maxbuffer 的限制进行 Server 之间用于同步的数据包大小的校验,如果数据包超过限制会导致 Follower 和 Leader 之间断连。对于由于错误使用,应用不断初始化同一个接口的 Dubbo Reference,在应用崩溃之后,应用创建的大量的临时节点会导致 ZooKeeper 集群持续崩溃。


问题排查以及解决方案


针对注册配置中心

如果使用的是 ZooKeeper 作为注册配置中心, 可以根据 jute.maxbuffer 一文中的建议,增加 jute.maxbuffer 参数的值,从而延缓问题,但是无法根本解决问题。MSE ZooKeeper 针对此类问题特别设计了限流机制,保证在客户端误用,或者非预期异常的情况下,限制客户端重复注册同一个 consumer,从而保证 ZooKeeper 集群的稳定,并且根据 MSE ZooKeeper 的观测系统可轻松排查具体的应用注册信息。


使用 MSE ZooKeeper 排查步骤:

image.png

例如,有一应用 test 由于初始化方式不合理,导致应用重复初始化对于接口 com.demo.provider 的 Dubbo Reference,在应用启动一段时间后,注册就会报错,此时 MSE ZooKeeper 已经限制了此客户端进行注册行为,从而保障 ZooKeeper Server 自身的稳定性,此时我们可以在 MSE 控制台中根据监控以及推送轨迹信息,排查问题应用。


首先进入 MSE 控制台对应的实例详情页,打开观测分析-> 监控中心 -> TopN 监控。

image.png

通过 TopN 监控中的客户端 TPS TopN 找到时间段内频繁写入的 SessionId,通过此 SessionId,在数据管理 -> 数据轨迹中查询对应 SessionId 的数据操作记录。

image.png

通过查询结果可以看出具体的某一个机器进行了多次 consumer 注册。



针对 Dubbo 应用本身

升级 Dubbo 版本到最新的稳定版本,同时在使用过程中需要注意 Dubbo  Reference 的初始化方式,减少非必要的同一个接口的多个 Dubbo Reference,Dubbo Reference 本身比较重,多个 Dubbo Reference 本身会消耗机器资源。


总结


在平时业务开发中,由于框架的误用或者 bug 导致的业务以及业务依赖的中间件的稳定性问题需要有快捷的手段进行排查,找到原因及时止血,MSE ZooKeeper 针对多种使用场景,提供多种数据统计聚合能力,帮助用户提高问题排查的效率,并且针对 ZooKeeper 多种使用场景,提供丰富的监控指标,基于 Dragonwell jdk 进行深度优化,具有多可用区容灾能力,免运维,高可用等能力,助力用户构建稳定高效的微服务应用。



5 月份日常产品活动折扣


【0元试用】

服务治理试用版,开通后 30 天免费使用。


【新老同享】

注册配置中心资源包:开发版/规格 1C2G 76.7 元/月。

服务治理无损上下线&灰度发布:0.01 元/Agent/小时


【首购专享】

注册配置中心专业版,包年包月 7 折。

云原生网关,包年包月 7 折。

服务治理资源包(按量抵扣),包年包月 7 折。


点击此处了解微服务引擎 MSE 产品详情

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
存储 缓存 测试技术
微服务注册中心的原理和实现方式
【2月更文挑战第19天】注册中心可以说是实现服务化的关键,因为服务化之后,服务提供者和服务消费者不在同一个进程中运行,实现了解耦,这就需要一个纽带去连接服务提供者和服务消费者,而注册中心就正好承担了这一角色。
|
4月前
|
网络协议 Nacos 数据安全/隐私保护
MSE微服务引擎注册问题之nacos注册失败如何解决
MSE(MicroService Engine)微服务引擎是阿里云提供的一种微服务治理平台,它通过提供服务注册、发现、配置管理等功能来支撑微服务架构的稳定运行;本合集旨在梳理MSE微服务引擎的核心特性、部署流程,以及实践中可能遇到的问题和相应的解决方案,以助力用户优化微服务架构的实施和管理。
|
7月前
|
Java Nacos
在MSE微服务引擎中,可以使用Java代码进行Nacos下线操作
在MSE微服务引擎中,可以使用Java代码进行Nacos下线操作
115 3
|
2月前
|
XML Dubbo Java
【Dubbo3高级特性】「框架与服务」 Nacos作为注册中心-服务分组及服务分组聚合实现
【Dubbo3高级特性】「框架与服务」 Nacos作为注册中心-服务分组及服务分组聚合实现
63 0
|
2月前
|
Kubernetes Nacos 微服务
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
29 1
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
|
4月前
|
微服务 Dubbo 应用服务中间件
MSE微服务引擎调用问题之调用失败如何解决
MSE(MicroService Engine)微服务引擎是阿里云提供的一种微服务治理平台,它通过提供服务注册、发现、配置管理等功能来支撑微服务架构的稳定运行;本合集旨在梳理MSE微服务引擎的核心特性、部署流程,以及实践中可能遇到的问题和相应的解决方案,以助力用户优化微服务架构的实施和管理。
MSE微服务引擎调用问题之调用失败如何解决
|
7月前
|
缓存 API Nacos
在MSE微服务引擎中为Nacos客户端启用本地缓存
在MSE微服务引擎中为Nacos客户端启用本地缓存
79 1
|
12月前
|
监控 Dubbo Cloud Native
MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题
不正确的 Dubbo 使用姿势可能会导致 Dubbo 应用以及 ZooKeeper 注册中心出现稳定性问题,本文将探讨由于 Dubbo Reference 重复初始化,导致 ZooKeeper 出现不可用的解决方法。
MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题
|
存储 缓存 监控
105. 注册中心宕掉后,Dubbo服务还能进行调用吗
105. 注册中心宕掉后,Dubbo服务还能进行调用吗
173 0
|
消息中间件 运维 监控
调用链路上千条,如何观测 Nacos 的运行状态
在这种背景下,阿里云微服务引擎(MSE)推出了 Nacos 托管产品,大幅提升可观测性,降低排查问题成本,本文将全面介绍 Nacos 可观测性体系。
调用链路上千条,如何观测 Nacos 的运行状态

相关产品

  • 微服务引擎