本文由一位阿里粉丝分享经验,且看他如何一路逆袭
前言
过去十多年互联网产业的高速发展,在给社会带来深刻变革的同时,也催生了服务架构的演进:从传统的单体应用到面向服务的SOA,再到现今主流的微服务架构,而Apache Dubbo就是微服务领域中的先行者和佼佼者。
Apache Dubbo是阿里巴巴于2011年开源的一款高性能Java RPC框架,开源伊始就在业界产生了很大的影响,被大量公司广泛使用,甚至在很多公司自研的RPC框架中也能看到不少Dubbo的影子,可以说Dubbo在国内服务化体系演进过程中扮演了一个非常重要的角色。虽然中间经历了几年时间的沉寂,不过2017年阿里巴巴又重启了对Dubbo的开源维护,受到了社区的广泛欢迎,社区活跃度也随之迅速提升,Dubbo也正在从一个微服务领域的高性能RPC框架,逐步演变为一个完整的微服务生态。
近年来,随着业务规模的发展和复杂度的增加,传统的单体应用已经很难适应业务迭代的诉求,越来越多的公司开始进行服务化的改造。很高兴看到ApacheDubbo被许多公司采用,作为服务化改造的基础架构进行演进。这里面就包括了许多互联网公司、国字头的大型企业,以及金融行业的巨头公司。ApacheDubbo因为良好的设计和扩展性受到许多开发者的欢迎,然而当开发者需要深入了解Dubbo底层的架构设计和实现的时候,往往会有些不知所措。网上也有很多爱好者撰写的源码分析等文章,虽有所有启发和裨益,但总觉得不够成体系。令人遗憾的是,市面上始终缺乏一本完整的、体系化的对Apache Dubbo进行深入原理剖析的书。
相信细心的朋友们都发现了小编将RPC构建分布式和Dubbo源码解析的学习路线已经整理了出来。有了学习路线、系统的学习方向,是不是感觉学习起来就一气呵成了?
接下来,小编就和大家一起深入探讨Apache Dubbo与实战解析,希望能够和大家一起共同进步。
第1章:Dubbo高性能RPC通信框架
本章我们介绍了整个应用框架的演进历史,以及Dubbo框架的历史背景和未来发展方向,同时介绍了Dubbo提供的特性。我们了解了国内有很多大公司都在使用Dubbo,目前Dubbo又重启维护,社区不断在成长与壮大。然后,我们概述了Dubbo 的总体架构图和核心组件,并把所有核心组件合在一起,讲解Dubbo的一次总体调用的过程。
第2章:开发第一款Dubbo应用程序
在本章中,读者应该设置好了Dubbo开发环境和熟悉了代码的目录结构,并且了解了Dubbo丰富的使用方式,其中包含XML、注解和API的方式。其中最灵活的是基于Java API的方式,很多网关的应用程序正是基于API的方式构建的。虽然本章讲解的是简单的应用程序,但是可以支持数千个并发连接,这得益于Dubbo底层的优雅封装。接下来,我们会更加深入地理解Dubbo,我们会深入讲解Dubbo采用的设计模式和内部设计等关键细节。
第3章:Dubbo注册中心
本章介绍了Dubbo中已经支持的注册中心。重点介绍了ZooKeeper和Redis两种注册中心。讲解了两种注册中心的数据结构,以及订阅发布机制的具体实现。然后介绍了注册中心中一些通用的关键特性,如数据缓存、重试等机制。最后,在对各种机制已经了解的前提下,讲解了整个注册中心源码的设计模式。
第4章:Dubbo扩展点加裁机制
本章的内容比较多,首先介绍了DubboSPI的一些概要信息,包括与JavaSPI的区别、DubboSPI的新特性、配置规范和内部缓存等。其次介绍了Dubbo SPI中最重要的三个注解: @SPI、@Adaptive、@Activate, 讲解了这几个注解的作用及实现原理。然后结合ExtensionLoader 类的源码介绍了整个Dubbo SPI 中最关键的三个入口: getExtension、getAdaptiveExtension、getActivateExtension,并讲解了创建ExtensionLoader 的工厂( ExtensionFactory)的工作原理。最后还讲解了自适应机制中动态编译的实现原理。
第5章:Dubbo启停原理解析
本章我们首先对Dubbo中XMLschema约束文件进行了讲解,也包括如何映射到对应Java对象中。现在越来越多地使用注解的方式,我们也对注解的解析核心流程进行了探讨。然后对Dubbo框架的几种服务暴露原理进行了详解,紧接着对服务消费进行了讲解,这些服务暴露和消费对所有的协议都具有参考价值。最后我们对优雅停机的原理进行了探讨,也对以前的实现缺陷的原因进行了概述。
第6章:Dubbo远程调用
本章首先讲解了Dubbo调用原理和流程,同时对Dubbo的协议做了详细的讲解,这里的基础知识对RPC调用来说至关重要。在讲解完协议的基础上,我们又对Dubbo实现编解码、解决粘包和解包做了深入探讨。本章重点在RPC调用,以及处理常规方法调用,我们也对本地Telnet调用的设计和实现原理做了说明。在实际开发过程中,不熟悉Dubbo开发的人员也能快速通过fastjson 方式测试和验证服务,在Telnet健康检查方面我们也做了进一步的说明。最后,我们对Dubbo中比较重要的Handler, 比如Request/Response 模型Handler 和心跳Handler等做了详细的解析,同时对Dubbo 的线程模型做了剖析。后面的关注点会聚焦于解决业务问题和服务治理上。
第7章:Dubbo集群容错
本章的内容较多,首先介绍了整个集群容错层的总体结构,讲解了7种普通集群容错策略的实现原理一都使用 了模板模式,继承了AbstractClusterInvoker, 在AbstractClusterInvoker中完成了总体的抽象逻辑,并留了一个抽象方法让子类实现自己的独特功能。其次我们介绍了整个集群容错层都会使用的Directory 接口,重点讲解RegistryDirectory监听注册中心,并动态更新本地缓存的Invoker列表、路由列表、配置列表。然后我们讲解了相关的路由接口、负载均衡接口的实现原理,介绍了三种不同路由规则的实现方式和四种不同负载均衡策略的实现方式。接着讲解了特殊容错机制Merger,包含默认合并器的总体大图,以及具体Merge的实现步骤。最后讲解了Mock机制的实现,分为Cluster层的逻辑线,以及Protocol层的逻辑线。
第8章:Dubbo扩展点
我们在第4章已经了解了Dubbo的SPI扩展机制,本章主要介绍在整个框架中有哪些已有的接口是可以扩展的,主要涉及扩展接口的作用,原理性的内容相对较少。首先介绍整个框架中核心扩展点的总体大图,让读者对这些扩展点有一个总体的了解.其次从上到下介绍整个RPC层的扩展点。然后介绍Remote层的扩展点。最后会把其他一些零散的扩展点也简单介绍一下。
第9章:Dubbo高级特性
本章主要对Dubbo中的高级特性进行讲解,比如服务分组和版本、参数回调、隐式参数、异步调用、泛化调用、上下文信息、Telnet操作、Mock调用和结果缓存原理。虽然本章的知识点比较独立,但这些特性点能够解决实际业务场景中的很多问题。比如版本和分组能够解决无资源隔离,防止整体资源被个别调用方拖垮,可以将某些调用分配一个隔离的资源池中,单独为它们提供服务。
第10章:Dubbo过滤器
之前的章节已经涉及很多过滤器的讲解,因此本章只介绍了一些前面章节都没有涉及的过滤器。首先介绍了Dubbo框架中所有过滤器的总体大图,讲解了每个过滤器的作用及归属,过滤器分为服务提供者端生效和消费者端生效两种,其中服务提供者端有11种过滤器,消费者端有5种过滤器。有一个特殊的Monitor 过滤器在两端都会生效,还有一个CompatibleFilter过滤器并没有默认启用。然后,我们介绍了整个过滤器链串联起来的原理,框架在ProtocolFilterWrapper中为每个Invoker 包上了一层又一层的过滤器,最终形成一个过滤器链。最后,我们分别详细介绍了服务提供者、消费者端的每个过滤器的实现原理。
第11章:Dubbo注册中心扩展实践
本章首先介绍了etcd注册中心元数据的结构设计,etcd 的结构比较简单,在v3版本中主要是平铺的key-value,说明了为什么选用元数据作为key的原因。然后介绍了扩展新注册中心要考虑扩展性,我们理解了为什么要新增扩展点并且如何使用扩展点,给出了与注册中心交互的实现,比如临时节点创建和保护、节点删除实现和重新实现watch的机制,详细讲解了watch中可能出现的异常场景处理,在watch实现中优化了网络拉取。最后我们讲解了完整注册中心订阅的逻辑,需要同时适配服务治理平台、provider和consumer的订阅。
第12章:Dubbo服务治理平台
本章内容较少,由于Dubbo的服务治理平台一直处于半成品状态,实现的方式也比较简单,因此可以讲解的原理不多。总的来说,Dubbo 服务治理平台各种功能的实现,都是通过RegistryServerSyne工具类把注册中心的数据缓存到本地,然后通过override协议更新到注册中心,订阅者得知URL变更后,自动更新本地的配置缓存,从而实现配置的下发。
第13章:Dubbo未来展望
本章主要分析了Dubbo未来生态的发展方向与云原生。首先介绍了Dubbo重启开源一年多的现状,列举开源团队在这段时间所做出的努力与成果。其次介绍了最新发布的2.7.x版本的新特性,让读者对2.7.x版本的改动有一个大致的了解。然后介绍了后续Dubbo对于其核心能力的规划,一共分为六大方向。接着介绍了Dubbo生态的后续规划,通过扩展点兼容第三方服务,丰富整个Dubbo的生态,让用户可以体验各种开箱即用的特性,降低研发成本。最后介绍了后续的云原生趋势,分析了现有框架所面临的挑战,后续Server Mesh会以什么样的方式来解决现有的问题,以及Dubbo Mesh现在的规划与发展。
整体概述
本篇首先介绍Dubbo的简史、后续的规划和整体架构大图;接着介绍Dubbo环境配置,并基于Dubbo开发第一款应用程序;然后介绍Dubbo内置的常用注册中心的实现原理,Dubbo 扩展点加载的原理和实现,Dubbo的启动、服务暴露、服务消费和优雅停机的机制,Dubbo中RPC协议细节、编解码和服务调用实现原理,Dubbo 集群容错、路由和负载均衡机制,Dubbo 的扩展点相关知识,Dubbo 高级特性的实现和原理,Dubbo常用的Filter的实现原理,Dubbo中新增etcd3注册中心的实战内容和Dubbo服务治理平台的相关知识;最后介绍Dubbo未来生态和DubboMesh的相关知识。
本书适合对Dubbo有一定了解、对Dubbo框架感兴趣的读者,也适合想深入理解Dubbo原理的资深开发者阅读。
后记
正是有了这篇宝典,让我对阿里RPC架构有了更深的理解,也正是因为此,才能一路平步青云。
全篇的整体概括,相信看完全文的朋友,心里应该对此文有个大致的了解。但是因篇幅限制,小编无法将全部细节展示完全,只能整体概括,也为了大家更好的阅读体验,希望大家明白小编的一片用心。
最后,有需要完整无缺页版Apache Dubbo与实战的朋友,请分享文章并关注小编,私信回复【学习】即可哦~~~
喜欢文章请多多点赞评论分享,关注小编,小编以后会致力于更新更加丰富的学习内容给大家,咱们一块共同进步!!!