本书首先介绍Dubbo的简史、后续的规划和整体架构大图;接着介绍Dubbo环境配置,并基于Dubbo开发第一款应用程序;然后介绍Dubbo内置的常用注册中心的实现原理,Dubbo扩展点加载的原理和实现,Dubbo的启动、服务暴露、服务消费和优雅停机的机制,Dubbo中RPC协议细节、编解码和服务调用实现原理,Dubbo集群容错、路由和负载均衡机制,Dubbo的扩展点相关知识,Dubbo高级特性的实现和原理,Dubbo常用的Filter的实现原理,Dubbo中新增etcd3注册中心的实战内容和Dubbo服务治理平台的相关知识;最后介绍Dubbo未来生态和Dubbo Mesh的相关知识。
本书适合对Dubbo有一定了解、对Dubbo框架感兴趣的读者,也适合想深入理解Dubbo原理的资深开发者阅读。
详细解读Dubbo框架工作原理和底层机制
展示动手扩展Dubbo特性的实战场景
商宗海,花名诣极,Apache Dubbo PMC。曾就职于阿里巴巴、有赞,担任Dubbo框架技术负责人,长期活跃在Dubbo社区。现就职于蚂蚁金服中间件团队,负责sofa-rpc和云原生方向的产品研发。
林琳,花名景竹,曾就职于华软集团、递四方等公司,担任技术经理、高级架构师等职位。现就职于蚂蚁金服支付宝事业群,负责工程平台架构工作。
前言
本书的由来
在Apache Dubbo(以下简称Dubbo)重新开源之前,Dubbo已经被很多公司广泛用于生产环境并获得了良好的反馈,很多公司内部也会建立私有分支自己维护,其中Dubbox就是基于Dubbo分支进行扩展并二次维护的。重新开源后,社区维护的Dubbo版本进行了大量“bug fix”和特性支持,收到了大量Dubbo用户的支持和参与。编写本书的想法是在开源后提出来的,因此本书取名《深入理解Apache Dubbo与实战》。
我最早接触Dubbo是2015年在参与云基础设施建设和微服务框架搭建时,那时的Dubbo基本是分布式系统的不二之选。我在使用过程中遇到了不少问题,不得不通过调试Dubbo源码来解决。在源码调试过程中,我逐渐理解Dubbo的设计理念,越发惊叹其架构设计的巧妙,正所谓:优秀的设计万里挑一。
后来我加入另外一家公司担任架构师,在基础架构组负责中间件与框架的研发,也是基于Dubbo等框架做二次开发。此时,我与本书另一位作者诣极成为同事,我们志趣相投,也为编写本书埋下了伏笔。
2017年,Dubbo经历了数年的停滞后,终于又重启维护。我还依稀记得阿里巴巴公司宣布的那天诣极的兴奋状,诣极是首批投入Apache Dubbo开源工作中去的开发者,期间为Apache Dubbo贡献了众多特性,如HTTP 2、etcd注册中心等,现在已经成为Apache Dubbo PMC。
Dubbo在重启维护后,短时间内有了大量的更新。此时我正就职于蚂蚁金服,每天苦于繁重的CRUD。我发现市面上没有一本系统讲解Dubbo的书籍,Dubbo相关的资料大都是一些博客文章,并且内容也相对陈旧。于是我“怂恿”诣极与我一起写这本书,作为这些年来工作的一个总结,他也欣然答应。
然后就是历时半年的写作过程,一波三折。中途有一些朋友加入,又因为各种不可抗拒的原因退出。我和诣极平时的工作都非常饱和,又要关注开源工作,常常焦头烂额。道虽迩,不行不至;事虽小,不为不成。时间是一点一点挤出来的,最终我们还是坚持完成了本书,并且没有偏离原计划太多。由于时间紧迫和能力有限,本书的内容难免有错漏,读者的勘误可以发送到以下电子邮箱:
yiji@apache.org或315157973@qq.com。
面向的读者
由于Dubbo重启维护后,官方的使用文档已经非常详细,本书如果再讲使用方法就没有太多的意义,所以一开始就按源码解析、设计原理说明的方向定位,因此需要读者有一定的基础。涉及源码的讲解,注定会有很多地方枯燥乏味,我们在编写的时候也尽量用自己的语言去提炼总结,让读者可以少看代码。
在开始动笔编写本书时,Apache Dubbo 2.7正在开发中,考虑到代码的稳定性,我们最终决定基于公开发布的2.6.5版本(release)来写。当本书快完成的时候,Apache Dubbo 2.7正式发布了。因此,本书的内容并不是基于最新的代码的,写书的速度永远比不上框架更新的速度,也希望读者能够谅解。
本书内容
第1章主要介绍Dubbo的简史、后续的规划和整体架构大图。
第2章主要介绍Dubbo的环境配置和基于Dubbo开发第一款应用程序。
第3章主要介绍Dubbo内置的常用注册中心的实现原理。
第4章主要介绍Dubbo扩展点加载的原理和实现。
第5章主要介绍Dubbo的配置解析、服务暴露、服务消费和优雅停机的机制。
第6章主要介绍Dubbo的RPC协议细节、编解码和服务调用的实现原理。
第7章主要介绍Dubbo的集群容错、路由和负载均衡机制。
第8章主要介绍Dubbo扩展点的相关知识。
第9章主要介绍Dubbo高级特性的实现和原理。
第10章主要介绍Dubbo过滤器的实现原理。
第11章主要介绍Dubbo中新增的etcd3注册中心的实战内容。
第12章主要介绍Dubbo服务治理平台的相关知识。
第13章主要介绍Dubbo的未来生态和Dubbo Mesh相关知识。
致谢
首先感谢我的领导与同事,也感谢我的团队,你们给了我很大的帮助。
然后要感谢我妻子,在我写作期间,她承担了家里的大小事务,让我可以有更多的时间投入写作。如果没有妻子的支持,那么这本书我肯定是无法完成的。
在微服务架构中,一个应用会被拆分一个个独立、可配置、可运行、可维护的子服务……
应为:
在微服务架构中,一个应用会被拆分 为 一个个独立、可配置、可运行、可维护的子服务……
telnet localhost 20890 应该是20880端口,在23页声明中dubbo开启的是20880端口
表3-2 中目录名称「/dubbo/service/consumers」的存储值样例应该为「consumer://192.168.0.1.5002/com.alibaba.demo.Service?key=value&…」
都会被认为是“事物”操作,应该是“事务”操作。后面的第10行同理。
错误:我们在代码清单 4-4 中可以看到,
应为:4-5