互联网分层架构的本质

经常有朋友问我,为什么要做分层架构,什么时候架构要抽象一层,今天来聊一聊这个问题。

互联网分层架构的本质
上图是一个典型的互联网分层架构
(1)客户端层:典型调用方是browser或者APP;
(2)站点应用层:实现核心业务逻辑,从下游获取数据,对上游返回html或者json;
(3)数据-缓存:加速访问存储;
(4)数据-数据库:固化数据存储;
 
如果实施了服务化,这个分层架构图可能是这样:
互联网分层架构的本质
中间多了一个服务层
 
互联网分层架构的本质
同一个层次的内部,例如端上的APP,以及web-server,也都有进行MVC分层
(1)view层:展现;
(2)control层:逻辑;
(3)model层:数据;
 
可以看到,每个工程师骨子里,都潜移默化的实施着分层架构
 
那么,互联网分层架构的本质究竟是什么呢?
如果我们仔细思考会发现,不管是跨进程的分层架构,还是进程内的MVC分层,都是一个“数据移动”,然后“被处理”“被呈现”的过程,归根结底一句话:互联网分层架构,是一个数据移动,处理,呈现的过程,其中数据移动是整个过程的核心
 
互联网分层架构的本质
如上图所示,数据处理和呈现要CPU计算,CPU是固定不动的
(1)db/service/web-server都部署在固定的集群上;
(2)端上,不管是browser还是APP,也有固定的CPU处理;
 
数据是移动的
(1)跨进程移动:数据从数据库和缓存里,转移到service层,到web-server层,到client层;
(2)同进程移动:数据从model层,转移到control层,转移到view层;
 
互联网分层架构的本质
数据要移动,所以有两个东西很重要:
(1)数据传输的格式;
(2)数据在各层次的形态;
 
先看数据传输的格式,即协议很重要:
(1)service与db/cache之间,二进制协议/文本协议是数据传输的载体;
(2)web-server与service之间,RPC的二进制协议是数据传输的载体;
(3)client和web-server之间,http协议是数据传输的载体;
 
再看数据在各层次的形态,以用户数据为例:
(1)db层,数据是以“行”为单位存在的row(uid, name, age);
(2)cache层,数据是以kv的形式存在的kv(uid -> User);
(3)service层,会把row或者kv转化为对程序友好的User对象;
(4)web-server层,会把对程序友好的User对象转化为对http友好的json对象;
(5)client层:最终端上拿到的是json对象;
 
结论:互联网分层架构的本质,是数据的移动。
 
为什么要说这个,这将会引出“分层架构演进”的核心原则与方法:
(1)让上游更高效的获取与处理数据复用;
(2)让下游能屏蔽数据的获取细节封装;
 
有了上面的铺垫,水友经常问的这些问题:
(1)是否需要引入DAO层,什么时机引入;
(2)是否需要服务化,什么时机服务化;
(3)是否需要抽取通用中台业务,什么时机抽取;
(4)是否需要前后端分离,什么时机分离;
就非常好回答了,下期和大家深究。
画外音:网友们的这些提问,其实很难回答。在不了解业务发展阶段,业务规模,数据量并发量的情况下,妄下YES或NO的结论,本身就是不负责任的。
总结
(1)互联网分层架构的本质,是数据的移动;
(2)互联网分层架构中,数据的传输格式(协议)与数据在各层次的形态很重要;
(3)互联网分层架构演进的核心原则与方法:封装与复用;
 
互联网分层架构的本质
架构师之路训练营,一起玩架构

希望能引发大家的思考。
阅读原文,更多收获。

发布者:糖太宗,转载请注明出处:https://www.qztxs.com/archives/science/technology/6601

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月14日 上午12:40
下一篇 2022年5月14日 上午12:41

相关推荐

  • msfvenom 使用

    木马连接方式 正向连接(bind) 是我主动去连接别人机器上的某个端口,很显然,这样极易被对方防火墙拦掉反向连接(reverse)是让别人机器上的某个端口上的流量主动连到我机器上的某个端口上,起码暂时对各类应用层防火墙的穿透效果还是蛮不错的  msfvenom 常用选项123456789-l 列出所有可用的payload,编码器,空指令……-p 指...

    技术 2022年5月28日
    7200
  • OpenCV识别滑块验证码缺口

    我们在利用爬虫采集数据时经常会碰到滑块验证码,下面我将通过OpenCV来识别滑块的缺口坐标。 一、Python3安装OpenCV 安装opencv可以用pip3来安装,命令如下: pip3 install opencv-python 如果在安装时碰到错误,可以安装下下面几个东西。 pip3 install scikit-build pip3 install ...

    2022年5月7日
    17300
  • Linux虚拟屏幕Xvfb的介绍

    Xvfb是流行的虚拟现实库,可以使很多需要图形界面的程序虚拟运行; 使用原因 淘宝列表页爬取经常会跳滑动验证码,需要使用puppeteer控制浏览器模拟人工滑动,而在无头模式下,无论怎么滑动都无法通过,必须使用有头模式,而CentOS服务器上没有界面,所以只能使用虚拟屏幕,使浏览器运行在虚拟屏幕上。 安装及使用 # 安装 yum install Xvfb #...

    技术 2022年5月7日
    58000
  • AutoJS自动过某宝滑块方案

    采集淘宝数据时,请求一频繁,就会出现风控跳滑块,这里使用AutoJS自动化控制插件操控手机屏幕自动过滑块。 一、架构 整套方案一共分为三个部分,分别为生成滑块APP、自动过滑块AutoJS脚本、爬虫。 生成滑块APP: 负责生成淘宝滑块; 监听滑块相关请求,滑块验证成功后上报滑块cookie; 自动过滑块AutoJS脚本: 控制安卓手机界面,完成打开APP、...

    2022年5月7日
    75800
  • MySQL删除数据的三种方式!!!(有超级大坑)

    行数据批量delete时,InnoDB如何处理自增ID的? 这里有一个潜在的大坑。 整个实验步骤如上图: 第一步:建表,设定自增列; 第二步:指定id=1插入,锚定第一行是id是1; 第三步:不指定id,依赖自增机制,插入3行; 画外音:此时id应该变为2,3,4了? 第四步:delete删除所有记录; 画外音:坑就容易出在这里。 第五步:指定id=0插入;...

    2022年5月10日
    5900

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信