plainify

对 Node 作为系统架构中间层的一些想法

Web 发展三部曲 青铜时代 在互联网诞生之初,网页还只是一个承载静态信息的载具,只能显示一些纯静态的文本和图片。这种静态页面不能读取后台数据库中的数据,是一个完全封闭的生态,我们姑且称这是 Web 发展的“青铜时代”。 白银时代 而为了使 Web 更加充满活力,开发者们一次又一次的对动态网页这一高地发起进攻,主要目标是允许网络开发人员快速编写动态页面。这一个阶段,以 PHP、JSP、ASP.NET 为代表的动态页面技术相继诞生。在这些动态页面技术面前,网页不再是静止的,可以根据不同的人,不同的地域,不同的时间段呈现出不同的数据结果,从这时开始,Web 发展进入了其“白银时代”。 黄金时代??? 随后,各种各样的网站如雨后春笋般出现,网站的复杂程度也呈爆炸式增长,程序员既绘制页面又控制业务逻辑的难度也越来越大,这时,前后端分离的概念被提出来了。核心理念是**「让专业的人做专业的事」**。于是,程序员的职业发展来到了一个分叉点,是选择专门绘制页面的程序员还是专门控制业务逻辑的程序员成为了一个争论点,直至今日。 在这个阶段,前端是完全不需要参与后台的数据处理,他只需要利用约定好的接口拿到合适的数据,然后渲染页面即可。而且这么做的一个好处是,开发进度不会堵塞,后端开发不需要等待前端完成之后才能继续,只要 Mock 完整数据之后前后端联调即可。 前后端分离的挑战 那这个阶段,是 Web 发展的“黄金时代”吗? 私以为不是。 前后端分离是一个非常好的思想,让专业的人做专业的事情这一美好愿景,在实际的过程中却受到了很多挑战。 举个例子,前端的接口通常是按照逻辑来展现数据的,有时候为了提高效率,后端会根据前端需要的数据结构做数据封装。这就意味着后端还是做了 view 层的工作,违背了前后端分离的初衷。 Web 系统架构的中间层 为了解决上述问题,有人提议干脆把 Controller 和 View 的工作都转移到前端,后端只负责处理 Model 的数据与底层逻辑。于是 Node 中间层这个解决方案就被提出来了,这种方案好不好我们暂且按下不表,先来说说这一个中间层的职能是什么以及架构是什么样的。 中间层架构 其实中间层要做的事很简单。 原来客户端直接向 Server 发送请求,Server 层收到请求后经过计算处理将结果返回给浏览器。如今浏览器将请求发送给 node 层,node 层经过一轮处理后再向 Server 层发起请求。Server 层处理完毕将响应结果返回给 node 层,node 层最后将数据返回给浏览器。因为 node 层的出现,Server 层可以只用关注业务本身,而不必理会前端对字段的特殊要求。 而且,由于增加了 NodeJS 层,每种前端的界面展示逻辑由 NodeJS 层自己维护。产品经理在中途如果想要改动界面,可以由前端自己维护,无需后端操心。前后端各司其职,后端专注于自己的业务逻辑开发,前端专注于产品效果开发。这样就实现了更彻底的前后端分离。 乍一看是不是觉得这个方案很完美呢?但事实真的是这样吗? 太阳底下无新事 细心留意文章里的图,就会发现整个系统越来越复杂,系统复杂会带来很多问题,比如人员沟通成本增加,系统整体性能下降,安全隐患增加等等。这些都是老生常谈的,只要是增加系统的层级就一定会出现这些问题,还有什么其他的问题吗? 我们先思考一个事情,这些东西是不是非 Node 不能做?...