没想到吧!关于Dubbo的「消费端线程池模型」官网也写错了

本文纠正了Dubbo官方文档中关于消费端线程池模型的错误,指出2.7.5版本之前反序列化操作默认在IO线程,之后则延迟到客户端线程池。通过分析协议设计、反序列化操作的位置,以及线程池模型的变化,详细解释了Dubbo的内部工作机制。
摘要由CSDN通过智能技术生成

上面这张图片是我前几天整理相册的时候看到的。拍摄于 2016 年 8 月 20日,北京。

那个时候我刚刚去北京没多久,住在公司的提供的宿舍里面。宿舍位于北京二环内的一个叫做东廊下的胡同里。

位置极佳,条件极差。

我刚刚进入宿舍的时候,房间里面只有一张大床、一个矮矮的电视柜、一个不能摇头的风扇。我的房间也没有空调,到处都是灰蒙蒙的,用卫生间都是去楼下的公共卫生间。

有一次北京下暴雨,我才发现窗户那边有一个缺口,雨下的太大,可以顺着那个缺口流下来,把我的鞋都打湿了。

宿舍里面没有冰箱,所以节假日我在宿舍只煮面条或者用电饭煲做干饭,然后就着各种酱吃。记得有一次周五领导请我们吃饭,最后菜点多了,有几个羊蹄动都没动,领导就叫我打包带回家。我带回去,挂在墙上挂钩,准备第二天中午吃。第二天一闻,坏了,也就没有吃。

宿舍里面也没有洗衣机,所以我在超市买了一个巨大的盆子,每周末的时候我会拿出一个下午的时间,边看电视,边手搓衣服,四季如此。

刚刚去北京的前一年,过的真的还是很艰难的。但是宿舍的好处是离公司近,所以我基本上也不怎么在宿舍呆着,工作日在公司学习到很晚,周末也去公司学习。

艰苦的环境更能激发人的斗志。

但是我还是简单的装饰了一下简陋的出租屋,买了贴画和绿植,因为我坚信房子是租来的,但是生活是自己的。

而且每周洗完衣服后我会用洗衣服的水再拖一下地。我的房间很小,摆上一张 1.5 米的大床之后基本上就没有什么空间了,所以我用不上拖把,一张帕子就够了。

我可以蹲在地上,把房间里面的每一块地砖的边边角角都仔仔细细的擦拭一遍,然后跳到床上去,静静的坐着,开始放空自己。

当时并没觉得有什么困难,但是和现在的生活再对比一下,真的是天壤之别。现在回想起,才真真正正的觉得:我曾经也在北京用力的生活过,离开的时候回忆满满,风华正茂。

就像我之前写过的:北漂就像在黑屋子里洗衣服,你不知道洗干净了没有,只能一遍又一遍地去洗。等到离开北京的那一刻,灯光亮了,你发现,如果你认真洗过了,那件衣服光亮如新。让你以后每次穿这件衣服都会想起那段岁月。

所以你呢,有没有在用力的生活?

好了,说回文章。

 

大佬指点,纠正错误

前段时间一位大佬指出了我之前文章中的一处错误:

没想到吧!关于Dubbo的「消费端线程池模型」官网也写错了

 

是的,这个大佬就是公众号【肥朝】的号主。

文章是这篇文章《Dubbo 2.7.5在线程模型上的优化》。

错误具体是指下面红框框起来的这句话的描述:

没想到吧!关于Dubbo的「消费端线程池模型」官网也写错了

 

而这段话,我是引用的官方内容。而现在这部分内容已经一字不差的加入到官网中了:

http://dubbo.apache.org/zh-cn/docs/user/demos/consumer-threadpool.html

经过验证后发现确实官网上的描述是有问题的。

没想到吧!关于Dubbo的「消费端线程池模型」官网也写错了

 

先说结论:2.7.5 版本之前,业务数据返回后,默认在 IO 线程里面进行反序列化的操作。而2.7.5 版本之后,默认是延迟到客户端线程池里面进行反序列化的操作。

所以,对于官网中,上面红框框起来这个地方的描述“交由独立的 Consumer 端线程池进行反序列化处理”是有问题。

正确的说法应该是:在老的(2.7.5 版本之前)线程池模型中,当业务数据返回后,默认在 IO 线程上进行反序列化操作,如果配置了 decode.in.io 参数为 false(默认为 true),则延迟到独立的客户端线程池进行反序列化操作。

所以本文就主要分享两个问题:

  • Dubbo 协议的设计与写析。
  • 以 Dubbo 2.7.5 版本(因为线程池模型就是在这个版本变更的)为分界线,对比不同版本之间,业务数据返回后,反序列化的操作到底是在独立的 Consumer 端线程池里面进行的还是在 IO 线程里面进行的?

需要说明的是由于本文需要做不同版本之间的对比,所以会涉及到两个 Dubbo 版本,分别是 2.7.4.1 和 2.7.5 。写的时候我都会标注清楚,大家看的时候和自己动手的时候需要注意一下。

另外再提前说明一下,文章有点长:如果你自己看 Dubbo 源码,可以先看整体,忽略细节。把整体摸个遍了之后,再去抠细节,精进源码。本文就属于扣细节,看的似懂非懂没关系,先一键三连,然后收藏起来,你自己学的时候总是会学到这个地方来的,而且本文也不是一个非常难得技术点。

如果你没有学到,只能说明你潜入的深度还是差了一点,也许你差一点就走到这个地方了,然后你想:算了吧,差不多得了。

但是你要知道,越往下,越难懂。而越难懂的,越值钱。

你想想,正在抗住流量的东西,是你写的那几行代码吗?不是的,是你系统里面用到的 Nginx、MQ、Redis、Dubbo、SpringCloud 等等这些中间件。而这些中间件里面,抗住流量的,除了它们的集群功能、容错功能、限流熔断、调用链路的优化等待这些手段之外,还有底层的网络、IO、内存、数据结构、调度算法等待这些东西。

这是值钱的。

可惜这些值钱的,不好讲清楚,要说清楚就是长篇大论。所以我常常说的劝退长文都是说说而已的,你这么爱学习,我怎么会劝退你呢,鼓励你都来不及呢,你说是吧?

再说了,我写的长文,也并没有涉及到这么底层的东西。只是我没有想过敷衍这事,我想把它做好了,尽量把它写清楚了,中间再夹杂着几句“骚话”,所以写着写着就长了。

总之,你要坚信三点:

一:我没有看懂,一定是因为这个博主写的太烂。

二:我没有看懂,理论上大多数人也应该看不懂。

三:我没有看懂,那我自己研究一下得让自己懂。

程序员就应该这样,明明白天写着这么普通的字crud,但是聊起技术来却是那么的迷之自信。

没想到吧!关于Dubbo的「消费端线程池模型」官网也写错了

 

Dubbo协议的设计与解析

为什么要先聊一下 Dubbo 的协议呢?

因为反序列化的时候涉及到一些响应头(head)和响应体(body)解析的相关内容,是需要先进行一下铺垫的。

首先去官网上撸个图片过来:

没想到吧!关于Dubbo的「消费端线程池模型」官网也写错了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值