当面对Dubbo、Spring Cloud、Mybatis等开源框架时,我们可以采用一定的系统性的方法来快速把握它们的代码结构。这些系统方法包括对架构演进过程、核心执行流程、基础架构组成和可扩展性设计等维度的讨论。
在上一讲中,我们已经讨论了架构演进过程和核心执行流程这两个系统方法,今天的内容将围绕基础架构组成和可扩展性设计这两个维度展开讨论。
基础架构组成与代码结构
正如任何一个框架都存在一个核心流程一样,任何一个框架也都有一个作为内核的基础架构。正如前面提到的以Dubbo为代表的RPC框架或以MyBatis为代表的ORM框架,可以认为前者的基础架构就是网络通信、序列化、传输协议等组件,而后续则包含数据库连接管理、SQL执行等基础架构组件。Dubbo和MyBatis等框架只不过是对这些组件在不同层次上的封装。而这些组件在技术发展的过程中并没有发生重大变化,所以我们只需要掌握它们的实现原理,就可以做到触类旁通。一旦遇到基于这些组件构建的开源框架,也就可以掌握对应的设计思路和方法。
那么,如何把基础架构与现实中的具体实现框架对应起来呢?接下来,我们同样也是以RPC架构为例展开讨论。
RPC基础架构
到现在为止,RPC架构已经足足存在和发展了40余年,最早是作为RFC 674草案在1974年发布的。RPC是一种非常基础的架构,诸如Dubbo等框架都是RPC架构的一种具体实现方式。在学习这些框架的代码结构时,我们可以基于RPC基础架构来逐步进行理解。在此之前,我们先来看一下RPC基础架构的组成。
RPC基础架构包括一个服务器端组件和一个客户端组件,如下图所示。
从上图中,我们发现RPC基础架构呈现一种非常对称的结构,其中,可以看到客户端组件与职责包括如下图所示。
而对应的,服务端组件与职责则包括如下图所示。
RPC基础架构的特点在于概念和语义清晰明确,过程调用简洁且提供通用的通信机制和可扩展的序列化方式。
<