又踩到Dubbo的坑,但是这次我笑不出来
前言直入主题,线上应用发现,偶发性出现如下异常日志。当然由于线上具体异常包含信息量过大,秉承让肥朝的粉丝没有难调试的代码的原则,我特意抽取了一个复现的demo放在了git,让你不在现场,一样享受到排查
惊:Dubbo居然有必现StackOverflowError的Bug
说明:本文场景基于dubbo-2.5.3版本。 如果你对StackOverflowError有一定的了解,就可以知道出现这个问题的主要原因就是调用栈太深,比如常见的无限递归调用。那本文要介绍的Dub
Dubbo应用无法重连zookeeper
前言dubbo是一个成熟且被广泛运用的框架。饶是如此,在某些极端条件下基于dubbo的应用还会出现无法重连zookeeper的问题。由于此问题容易导致比较大的故障,所以笔者费了一番功夫去定位,现将排查
What?一个 Dubbo 服务启动要两个小时!
前言前几天在测试环境碰到一个非常奇怪的与 ```dubbo``` 相关的问题,事后我在网上搜索了一圈并没有发现类似的帖子或文章,于是便有了这篇。希望对还未碰到或正在碰到的朋友有所帮助。 现象现象是这样
RPC的超时设置,一不小心就是线上事故
RPC接口超时设置,不仅涉及到接口幂等、服务降级和熔断、性能评估和优化,同时还需要从业务角度评估必要性。通过一个真实的线上事故系统性地介绍在微服务架构下,如何正确设置RPC接口的超时时间:超时的实现原理是什么?设置超时时间到底是为了解决什么问题?应该如何合理的设置超时时间?
一次StackOverflowError排查,原因竟然和Dubbo有关!
前言某天业务方的同事和我反馈,说系统出现了StackOverflowError.坦白说,Exception见得过了,但是Error倒是很少出现,此时他的心情是这样的 一波猛如虎的操作我们先来看血淋淋的
用隧道协议实现不同dubbo集群间的透明通信
前言笔者最近完成了一个非常有意思的隧道机制(已在产线运行),可以让注册到不同zookeeper之间的dubbo集群之间能够正常进行通信。如下图所示: 例如图中A/B两个网络隔离的集群,两者只能通过专线
【全网首发】解Bug之路-dubbo应用无法重连zookeeper
前言dubbo是一个成熟且被广泛运用的框架。饶是如此,在某些极端条件下基于dubbo的应用还会出现无法重连zookeeper的问题。由于此问题容易导致比较大的故障,所以笔者费了一番功夫去定位,现将排查过程写成博文分享出来。Bug现场这是一起在测试环境出现的故障。起因是网工做交换机切换演练,可能
Dubbo No provider问题排查思路
使用过Dubbo的朋友很多都碰到过如下报错: No provider available for the service org.newboo.basic.api.MyDemoService from registry 127.0.0.1:2181 on the consumer 127.0.0.
记一次提升18倍的性能优化
背景最近负责的一个自研的 Dubbo 注册中心经常收到 CPU 使用率的告警,于是进行了一波优化,效果还不错,于是打算分享下思考、优化过程,希望对大家有一些帮助。自研 Dubbo 注册中心是个什么东西,我画个简图大家稍微感受一下就好,看不懂也没关系,不影响后续的理解。Consume
案例分享 | dubbo 2.7.12 bug导致线上故障
背景最近某天的深夜,刚洗完澡就接到业务方打来电话,说他们的 dubbo 服务出故障了,要我协助排查一下。电话里,询问了他们几点是线上有损故障吗?——是止损了吗?——止损了有保留现场吗?——没有于是
你为什么吃不透Dubbo源码?这样看既不浪费时间又高效
对于Dubbo源码,首先,你需要先能在项目中引入Dubbo,以及能够使用基本功能,基于这个基础之上,正确的阅读顺序应该是这样
【全网首发】抓到Dubbo异步调用的小BUG,再送你一个贡献开源代码的机会
hello,大家好呀,我是小楼。最近一个技术群有同学at我,问我是否熟悉Dubbo,这我熟啊~他说遇到了一个Dubbo异步调用的问题,怀疑是个BUG,提到BUG我可就不困了,说不定可以水,哦不...写一篇文章。 正文问题复现遇到问题,尤其不是自己遇到的,必须要复现出来才好排查
一次C10K场景下的线上Dubbo问题排查及优化
导语Dubbo 是一款轻量级的开源 Java 服务框架,是众多企业在建设分布式服务架构时的首选。中国工商银行自 2014 年开始探索分布式架构转型工作,基于开源 Dubbo 自主研发了分布式服务平台。Dubbo 框架在提供方消费方数量较小的服务规模下,运行稳定、性能良好。随着银行业务线上化、多样
从一个Demo说起Dubbo3
简介2017年的9月份,阿里宣布重启Dubbo的开发维护,并且后续又将Dubbo捐献给了Apache,经过多年的发展已经发布到3.X版本了,Dubbo重启维护之后是否有值得我们期待的功能呢,下面就来看看吧。Apache Dubbo 是一款微服务框架,为大规模微服务实践提供高性能 RPC 通信、流
记一次产线报错引发关于CurrentHashmap使用的思考
最近笔者所在公司的业务团队在使用dubbo-admin进行应用发布的时候出现了一个问题,应用发布结束后,上线应用流量的时候某个节点的部分接口进行上线操作第一次会失败,但是同一批的相同节点其他接口上线正
记录一次dubbo项目实战
一、案例说明存在2个系统,A系统和B系统,A系统调用B系统的接口获取数据,用于查询用户列表。
源码分析Dubbo服务注册与发现机制RegistryDirectory)
RegistryDirectory,基于注册中心的服务发现,本文将重点探讨Dubbo是如何实现服务的自动注册与发现。从上篇文章,得知在消息消费者在创建服务调用器(Invoker)【消费者在初始时】时需要根据不同的协议,例如dubbo、registry(从注册中心获取服务提供者)来构建,其调用的方法为
源码分析Dubbo override实现原理
在上篇在讲解源码分析Dubbo路由注册与发现机制的时候,dubbo管理员可以通过dubbo-admin管理系统在线上修改dubbo服务提供者的参数,最终将存储在注册中心的configurators catalog,然后通知RegistryDirectory更新服务提供者的URL中相关属性,按照最新的
Dubbo Filter机制概述
从上文可知,在服务的调用或消费端发送请求命令中,Dubbo引入过滤器链机制来实现功能的包装(或扩展)。Dubbo很多功能,例如泛化调用、并发控制等都是基于Filter机制实现的,系统默认的Filter在/dubbo-rpc-api/src/main/resources/META-INF/dubbo/
源码分析Dubbo tps过滤器器实现原理
本文将重点分析一下dubbo限流的另外一个方式,tps过滤器。@Activate(group = Constants.PROVIDER, value = Constants.TPS_LIMIT_RATE_KEY)过滤器作用服务调用tps过滤器使用场景对Dubbo服务提供者实现限流(tps
源码分析Dubbo监控中心实现原理
Dubbo监控的基本实现原理就是在服务调用时收集服务调用并发度、服务响应时间,然后以一定频率向监控中心汇报统计数据。MonitorFilter过滤器过滤器作用监控过滤器,向监控中心汇报服务调用数据。使用场景搭建监控中心监控Dubbo服务调用。阻断条件非阻断过滤器。Monito
源码分析kryo对java基础数据类型与Stirng类型的序列化反序列化机制
kryo序列化原理用过dubbo的开发人员,在选取序列化时都会根据“经验”来选kryo为序列化,其原因是序列化协议非常高效,超过java原生序列化协议、hessian2协议,那kryo为什么高效呢?序列化协议,所谓的高效,通常应该从两方面考虑:序列化后的二进制序列大小。(核心)序列化、反序
源码分析kryo对象序列化实现原理
本文主要梳理Kryo序列化基本实现。重点剖析Kryo#writeClassAndObject、Kryo#readClassAndObject方法。Kryo对象序列化原理kryo对象序列化入口为Kryo的writeClassAndObject。Kryo#writeClassAndObject
源码分析Dubbo服务提供者、服务消费者并发度控制机制
本文将详细分析<dubbo:service executes=""/>与<dubbo:reference actives = “”/>的实现机制,深入探讨Dubbo自身的保护机制。源码分析ExecuteLimitFilter@Activate(gro
源码分析Dubbo服务调用日志(accesslog参数)实现原理
谈到服务调用日志,大家恐怕第一想到就是如果开启了这个参数,会影响性能。那真实的情况是怎么样了?性能损耗到底有多大呢?在实践中我们如何使用该功能呢?本文将详细分析Dubbo accesslog实现原理。AccessLogFilter概述过滤器作用记录调用日志。使用场景记录服务提供者端
Dubbo服务治理之灰度发布方案(版本发布控制影响范围)
方案背景背景:基于Dubbo服务的治理,是否可以支持业务级别的灰度发布、是否基于业务参数的路由转发。例如以GIS为例,当发布一个新版本时,是否可以以按照解析地址或合作伙伴来区分,版本发布之初,只希望地址为:广东省的解析请求发送到新版本,而其他的地址请求还是使用旧版;或者根据合作伙伴例如UCP(优享
源码分析Dubbo 泛化调用与泛化实现原理
本文将重点分析Dubbo的两个重要特性:泛化调用与泛化实现。泛化引用:通常是服务调用方没有引入API包,也就不包含接口中的实体类,故服务调用方只能提供Map形式的数据,由服务提供者根据Map转化成对应的实体。泛化实现泛化实现,是指服务提供者未引入API包,也就不包含接口用于传输数据的实体
源码分析Dubbo编码解码实现原理(Dubbo协议)
本节主要介绍了Dubbo协议的编码方式,涉及协议头、协议体具体的编码规则,默认使用Dubbo协议,其核心类图如下:在Dubbo整个框架中,codec2的可选值为dubbo、thrift,本文将重点分析Dubbo协议的编码解码。本文主要以Dubbo协议为例进行展开,其他通信方式,例如Thrift
源码分析Dubbo消费端启动流程
通过前面文章详解,我们知道Dubbo服务消费者标签dubbo:reference最终会在Spring容器中创建一个对应的ReferenceBean实例,而ReferenceBean实现了Spring生命周期接口:InitializingBean,接下来应该看一下其afterPropertiesSet
dubbo泛化引发的生产故障之dubbo隐藏的坑
上个月公司zk集群发生了一次故障,然后要求所有项目组自检有无使用Dubbo编程式/泛化调用,强制使用@Reference生成Consumer。具体原因是线上某服务访问量在短时间大量访问zk并创建了240万+的节点,导致zk所有节点陆续崩溃导致,多个应用因无法连接到zk报错。原因是听说泛化调用时候,p
Dubbo序列化概述
Dubbo序列化支持java、compactedjava、nativejava、fastjson、fst、hessian2、kryo,其中默认hessian2。其中java、compactedjava、nativejava属于原生java的序列化。整个Dubbo序列化的类设机机器优雅,职责单一,其
源码分析Dubbo异步调用与事件回调机制
本文将详细分析Dubbo服务异步调用与事件回调机制。异步调用与事件回调机制TTY异步回调事件回调异步调用与事件回调机制在Dubbo中,引入特定的过滤器FutureFilter来处理异步调用相关的逻辑,其定义如下:1@Activate(group = Constants.CO
源码分析Dubbo前置篇-寻找注册中心、服务提供者、服务消费者功能入口
本节主要阐述如下两个问题:Dubbo自定义标签实现。dubbo通过Spring加载配置文件后,是如何触发注册中心、服务提供者、服务消费者按照Dubbo的设计执行相关的功能。所谓的执行相关功能如下:注册中心启动,监听消息提供者的注册服务、接收消息消费者的服务订阅(服务注册与发
源码分析Dubbo NettyServer与HeaderExchangeServer
本文主要分析一下NettyServer,HeaderExchangeServer实现细节。NettyServerNettyServer整个类图如下:首先从全貌上大概看一下NettyServer对象所持有的属性:AbstractPeer1、private final ChannelHa
源码分析Dubbo网络通信NettyClient实现原理
在源码分析Dubbo通讯篇之网络核心类一文中已给出Dubbo netty client的启动流程,如下图:以Dubbo协议为例,DubboProtocol#refer中,在创建Invoker时,通过getClient方法,开始Client(连接的)创建过程,先重点看一下: 1private
源码分析Dubbo服务调用-服务提供者如何处理请求命令与再谈Invoker
本文将重点剖析服务调用流程,也就是消费端通过网络发起RPC服务调用时,服务提供者是如何进行服务请求响应的。Dubbo服务调用流程了解过Netty网络编程的童鞋们应该知道,netty的命令处理基于ChannelHandler(事件处理链),编码、网络传输、解码、处理等,下面是关于NettyServ
源码分析Dubbo服务提供者启动流程
本节将详细分析Dubbo服务提供者的启动流程,请带着如下几个疑问进行本节的阅读,因为这几个问题将是接下来几篇文章分析的重点内容。什么时候建立与注册中心的连接。服务提供者什么时候向注册中心注册服务。服务提供者与注册中心的心跳机制。从上文中我们得知,服务提供者启动的核心入口为ServiceB
Dubbo路由机制概述
上一节我们主要讲解了利用dubbo-admin如何进行参数的动态修改,本节将重点介绍集群实现中另外一个实现细节:路由机制,Dubbo的路由机制主要解决的目的就是服务调用时,从已知的所有服务提供者中根据路由规则刷选服务提供者。Dubbo路由机制概述以下内容来源于官方文档:以上是Dubb
源码分析Dubbo负载算法
Dubbo支持在服务调用方对服务提供者采用负载均衡算法,LoadBalance接口定义如下: 1@SPI(RandomLoadBalance.NAME) 2public interface LoadBalance { 3 4 /** 5 * select one invoke
源码分析Dubbo集群策略
前面的文章,已经单独对服务发现(Directory、RegistryDirectory)、路由机制(Router)、负载均衡机制(LoadBalance),本节将重点分析集群容错机制(AbstractClusterInvoker)。整个集群容错中,上述组件扮演的角色见下图所示,本文将重点分析Abst
Dubbo网络通讯篇概述
从本节开始将深入学习Dubbo网络通讯的底层实现细节,在深入学习Dubbo网络模型时,首先应从整体上了解Dubbo的网络通讯模型、线程模型是怎样的?下图是Dubbo官方给出的线程模型:涉及如下方面:网络调用客户端。网络调用服务端。网络传输,编解码、序列化。下面给出与上述网络模型对应的详
源码分析Dubbo事件派发机制
本节将主要学习Dubbo是如何使用Netty来实现网络通讯的。从官网我们得知,Dubbo协议是使用单一长连接来进行网络传输,也就是说服务调用方持久与服务提供者建立一条连接,所有的服务调用调用信息通过。一条TCP连接进行传输,在网络层至少要考虑如下问题:服务端,客户端网络通讯模型(线程模型)
源码分析Dubbo线程池实现原理
本文主要分析Dubbo线程池的构建过程,主要介绍官方文档中有关于ThreadPool的种类:fixed固定大小线程池,启动时建立线程,不关闭,一致持有。(缺省)cached缓存线程池,空闲一分钟,线程会消费,需要时重新创建新线程。limited可伸缩线程池,但池中的线程数只会增长不会收

有开始,就会有进​步!

在追求性能的道路上,记录每一刻的成长!源码解读,编程技巧,外文翻译,技术实践,线上案例等等,记录自己,启发他人!

专家作者推荐

巡山小汪

关注微信公众号《解Bug之路》,有问题请在公众号中咨询:) 无论多么艰苦的时刻,都不要忘记,辉煌的未来,在你的眼中闪耀!

飞哥开发内功

《深入理解Linux网络》作者,腾讯搜狗十年工程师,公众号「开发内功修炼」作者!

踩刀诗人

聊聊技术,唠唠段子,偶尔做菜写诗,欢迎关注我的公众号 踩刀诗人

Brand

搜索关注微信公众号【架构与思维】:撰稿者为bat、字节的几位高阶研发/架构,专注技术分享。

专题推荐

同 CPU 管理一样,内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应用程序的指令、数据、缓存等。
8篇文章20812阅读量
互联网场景中经常使用消息中间件进行消息路由、订阅发布、异步处理等操作,来缓解系统的压力;在高并发、高消息吞吐的互联网场景中,我们经常会使用消息队列(Message Queue)作为基础设施,在服务端架构中担当消息中转、消息削峰、事务异步处理 等职能。对于那些不需要实时响应的的业务,我们都可以放在消息队列中进行传输~
13篇文章27872阅读量