上图是一个典型的互联网分层架构:客户端层:典型的调用者是浏览器或APP站点应用层:实现核心业务逻辑,从下游获取数据,返回html或json数据-缓存层:加速对存储数据的访问-数据库层:固化数据存储如果实现面向服务,这个分层架构图可能是这样的:中间多了一个服务层。同层内部,如端APP,web-server,也有MVC分层:视图层:显示控制层:逻辑模型层:数据可见,每个工程师都用分层巧妙的实现建筑学。那么,互联网分层架构的本质是什么?我们仔细想想就会发现,无论是跨进程的分层架构,还是进程内分层的MVC,都是“数据移动”,然后“处理”。而“被呈现”的过程,归根结底一句话:互联网分层架构是一个数据移动、处理和呈现的过程,其中数据移动是整个过程的核心。如上图:数据处理和呈现需要CPU计算,CPU是固定的:db/service/web-server都部署在一个固定集群的上端,不管是浏览器还是APP,还有一个固定的CPU来处理数据是移动的:跨进程移动:数据从数据库和缓存传输到服务层,到web-server层,再到客户端层。同流程移动:数据从模型层传输到控制层,再传输到视图层。数据需要移动,所以有两点很重要:数据传输的格式每一层的数据形式首先看数据传输的格式,也就是协议很重要:service和db/cache之间,二进制协议/文本协议是数据传输的载体web-server客户端和服务之间,RPC的二进制协议是数据传输的载体。在客户端和web-server之间,http协议是数据传输的载体。让我们看看每个级别的数据形式。以用户数据为例:db层,数据是以“行”为单位存在的row(uid,name,age)缓存层,以及数据存在的kv(uid->User)服务层kv的形式,将row或kv转换为程序友好的User对象web-server层将程序友好的User对象转换为HTTP友好的json对象client层:终端得到一个json对象结论:本质互联网分层架构的核心是数据的移动。我们为什么这样说?这将引出“分层架构演进”的核心原则和方法:使上游能够更高效地获取和处理数据,使下游能够通过多路复用屏蔽获取数据的细节,并将这一原则进行封装和阐明和方法。再加上积累了一些经验,这些网友经常在评论中提出的问题就可以得到解答:是否需要引入DAO层,什么时候引入是否需要面向服务,什么时候引入面向服务的服务。是否需要前后端分离,什么时候分离?(网友的这些问题其实很难回答,在不了解业务发展阶段、业务规模、并发数据量的情况下,跳到YES或NO的结论本身就是错误的。负责任。)更具体的演进细节下一篇文章将研究分层架构。总结互联网分层架构的本质,就是移动互联网数据分层架构中的数据传输格式(协议)和每一层数据的形态。互联网分层架构演进的核心原理和方法:封装和复用思想哪种系统架构不是“固定CPU,移动数据”,而是“固定数据,移动CPU”?作者更多好文章
