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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 不正确的 Dubbo 使用姿势可能会导致 Dubbo 应用以及 ZooKeeper 注册中心出现稳定性问题,本文将探讨由于 Dubbo Reference 重复初始化,导致 ZooKeeper 出现不可用的解决方法。

作者:子葵

背景

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

ZooKeeper 出现异常日志↓并且 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 排查步骤:例如,有一应用 test 由于初始化方式不合理,导致应用重复初始化对于接口 com.demo.provider 的 Dubbo Reference,在应用启动一段时间后,注册就会报错,此时 MSE ZooKeeper 已经限制了此客户端进行注册行为,从而保障 ZooKeeper Server 自身的稳定性,此时我们可以在 MSE 控制台中根据监控以及推送轨迹信息,排查问题应用。首先进入 MSE 控制台对应的实例详情页,打开观测分析-> 监控中心 -> TopN 监控。通过 TopN 监控中的客户端 TPS TopN 找到时间段内频繁写入的 SessionId,通过此 SessionId,在数据管理 -> 数据轨迹中查询对应 SessionId 的数据操作记录。通过查询结果可以看出具体的某一个机器进行了多次 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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
9天前
|
Dubbo 应用服务中间件 API
使用 Apifox、Postman 测试 Dubbo 服务,Apache Dubbo OpenAPI 即将发布
Apache Dubbo 3.3.3(即将发布)实现了与 OpenAPI 的深度集成,通过与 OpenAPI 的深度集成,用户能够体验到从文档生成到接口调试、测试和优化的全流程自动化支持。不论是减少手动工作量、提升开发效率,还是支持多语言和多环境,Dubbo 3.3.3 都展现了其对开发者体验的极大关注。结合强大的 Mock 数据生成和自动化测试能力,这一版本为开发者提供了极具竞争力的服务治理解决方案。如果你正在寻找高效、易用的微服务框架,Dubbo 3.3.3 将是你不容错过的选择。
|
3月前
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
|
4月前
|
消息中间件 监控 Ubuntu
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
131 3
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
|
4月前
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
257 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
5月前
|
XML 负载均衡 监控
分布式-dubbo-简易版的RPC框架
分布式-dubbo-简易版的RPC框架
|
6月前
|
JSON Dubbo Java
【Dubbo协议指南】揭秘高性能服务通信,选择最佳协议的终极攻略!
【8月更文挑战第24天】在分布式服务架构中,Apache Dubbo作为一款高性能的Java RPC框架,支持多种通信协议,包括Dubbo协议、HTTP协议及Hessian协议等。Dubbo协议是默认选择,采用NIO异步通讯,适用于高要求的内部服务通信。HTTP协议通用性强,利于跨语言调用;Hessian协议则在数据传输效率上有优势。选择合适协议需综合考虑性能需求、序列化方式、网络环境及安全性等因素。通过合理配置,可实现服务性能最优化及系统可靠性提升。
85 3
|
6月前
|
缓存 Dubbo Java
Dubbo服务消费者启动与订阅原理
该文章主要介绍了Dubbo服务消费者启动与订阅的原理,包括服务消费者的启动时机、启动过程以及订阅和感知最新提供者信息的方式。
Dubbo服务消费者启动与订阅原理
|
6月前
|
Dubbo 网络协议 Java
深入掌握Dubbo服务提供者发布与注册原理
该文章主要介绍了Dubbo服务提供者发布与注册的原理,包括服务发布的流程、多协议发布、构建Invoker、注册到注册中心等过程。
深入掌握Dubbo服务提供者发布与注册原理
|
6月前
|
负载均衡 Dubbo Java
Dubbo服务Spi机制和原理
该文章主要介绍了Dubbo中的SPI(Service Provider Interface)机制和原理,包括SPI的基本概念、Dubbo中的SPI分类以及SPI机制的实现细节。
Dubbo服务Spi机制和原理
|
6月前
|
C# 开发者 Windows
勇敢迈出第一步:手把手教你如何在WPF开源项目中贡献你的第一行代码,从选择项目到提交PR的全过程解析与实战技巧分享
【8月更文挑战第31天】本文指导您如何在Windows Presentation Foundation(WPF)相关的开源项目中贡献代码。无论您是初学者还是有经验的开发者,参与这类项目都能加深对WPF框架的理解并拓展职业履历。文章推荐了一些适合入门的项目如MvvmLight和MahApps.Metro,并详细介绍了从选择项目、设置开发环境到提交代码的全过程。通过具体示例,如添加按钮点击事件处理程序,帮助您迈出第一步。此外,还强调了提交Pull Request时保持专业沟通的重要性。参与开源不仅能提升技能,还能促进社区交流。
61 0

热门文章

最新文章

相关产品

  • 微服务引擎