首页 > 其他分享 >MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题

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

时间:2023-05-23 11:33:06浏览次数:51  
标签:Dubbo 应用 Reference ZooKeeper RPC 注册 MSE

作者:子葵

背景

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

ZooKeeper 出现异常日志↓

image

image.png

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

原因分析

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

image

image

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 注册。

image

针对 Dubbo 应用本身

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

总结

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

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

标签:Dubbo,应用,Reference,ZooKeeper,RPC,注册,MSE
From: https://www.cnblogs.com/alisystemsoftware/p/17422816.html

相关文章

  • 使用 @GrpcClient 实现客户端
    转载请注明出处:@GrpcClient注解的作用是将gRPC客户端注入到Spring容器中,方便在应用程序中使用gRPC客户端调用gRPC服务提供的函数。使用@GrpcClient注解,我们可以像使用其他SpringBean一样来使用gRPC客户端,无需手动创建连接通道和stub类对象,SpringBoot会自......
  • 关于RPC和HTTP的理解
    RPC(RemoteProcedureCall,远程过程调用)和HTTP(HypertextTransferProtocol,超文本传输协议)是两种不同的通信协议,用于在计算机网络中实现不同系统之间的通信和数据交换。RPC(远程过程调用):RPC是一种通信机制,允许一个程序调用另一个运行在不同地址空间的程序或服务的方法(即远程过......
  • 为什么有了 HTTP 还要 RPC
    哈喽大家好,我是咸鱼随着互联网技术的发展,分布式架构越来越被人们所采用。在分布式架构下,为了实现复杂的业务逻辑,应用程序需要分布式通信实现远程调用而这时候就需要一种协议来支持远程过程调用,以便实现不同应用程序之间的数据交换和信息传递。其中常用的协议包括HTTP协议和RP......
  • API架构的选择,RESTful、GraphQL还是gRPC
    hi,我是熵减,见字如面。在现代的软件工程中,微服务或在客户端与服务端之间的信息传递的方式,比较常见的有三种架构设计的风格:RESTful、GraphQL和gRPC。每一种模式,都有其特点和合适的使用场景,今天,我们主要来对三种风格做一个深入的理解和对比,以方便我们在做技术选型时,能够做出有效的......
  • m基于MSER最大稳定极值区域和SVM的交通标志检测识别算法的matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:       2.算法涉及理论知识概要        在计算机视觉领域,最大稳定极值区域(MSER)(MaximallyStableExtremalRegions)是一种用于在图像中进行斑点检测的方法。这个方法由Matas等人提出,用于在两个不同视角的......
  • Postman调试grpc
    转载请注明出处:1.检查自己的postman是否支持grpc,通过File->new->,出现如下图,则表示支持: 2.点击上图的grpc就会自动创建一个grpc的request3.导入proto文件,并点击import4.填写请求参数,选择grpc方法,生成请求的message,发起调用,请求并响应的示例如下 注意......
  • 阿里云微服务引擎 MSE 全新升级,实用能力更普惠,最高降幅 75%
    微服务,已经成为一种普惠技术。开源选择趋向集中,商业产品趋向体验一致,开源和商业在培养客户使用习惯的过程中,逐步成为了事实上的使用标准。5月17日,阿里云峰会·常州站宣布微服务引擎MSE三大普惠升级,进一步降低客户享受微服务技术红利的成本。普惠一:Higress云原生网关发布......
  • GRPC与 ProtoBuf 的理解与总结
    转载请注明出处:1.GRPC官网:https://www.grpc.io/gRPC官方文档中文版:http://doc.oschina.net/grpcRPC框架的目标就是让远程服务调用更加简单、透明,其负责屏蔽底层的传输方式(TCP/UDP)、序列化方式(XML/Json)和通信细节。服务调用者可以像调用本地接口一样调用远程的......
  • MATLAB仿真MIMO通信系统V-BALST结构ZF检测算 法与MMSE检测算法
    MATLAB仿真MIMO通信系统V-BALST结构ZF检测算法与MMSE检测算法商品形式:程序1、仿真V-BALST结构ZF检测算法性能,调制方式为QPSK2、仿真V-BALST结构MMSE检测算法性能,调制方式为QPSKID:4249643318184013......
  • .Net Grpc Client调用Java Grpc Server
    1.JavaGrpcServer参考地址:grpc-javaos-maven-pluginprotobuf-maven-plugin1.新建SpringBoot项目[略]2.POM引入相关依赖<dependencies><dependency><groupId>io.github.lognet</groupId><artifactId>grpc......