中间层和中间件的概念是完全不一样的
- 中间层
在传统的BS架构中(broswer + server),中间层是处理信息传递转发。
官方解释:Middle Tier 应用程序服务器层或者应用服务层,是用户接口或者web客户端与数据库之间的逻辑层(比如代理,转发等)。 - 中间件
中间层是一个web框架的逻辑层,中间件是一个函数或者插件(业务用途)
官方解释:Middleware 是一个对用户请求进行过滤和预处理的函数,一般不会对客户端进行相应,而是把处理结果传递下去。
如express和koa2,自身提供http服务,通过中间件扩展路由,验证,异常处理等
中间层的意义:
传统的前后端交互模式在SPA的模式下是不适合的
- 前端的代码越来越复杂,庞大
- 前后端高度耦合,如后端的各种模版技术
- 无法良好的支持跨终端
使用中间层即可解决当前的这些问题,当然中间层也存在性能问题,可以在后端优化和使用ajax转成同步渲染过程中得到平衡。
使用node作为中间层就是前端在调用后端api,进行数据转发,串联服务,路由设计,控制逻辑,渲染页面,体验优化,实现业务的逻辑处理,运算,分组,包装前端想要的数据,降低沟通成本,降低项目耦合度,实现前后端分离。
使用node 作为BFF中间层的优势
-
跨系统,跨终端均可以重用页面数据校验,逻辑代码,无需因新系统、终端接入重写校验;
-
在中间件中只做一次数据校验,避免前后端都需要数据校验,保证数据的有效性同时降低代码的开发量;
-
处理数据逻辑,解放了前端既要做页面渲染又要写复杂的业务逻辑,使用开发专注于页面渲染,使用分工更明确,项目协作效率更高,更重要的是快速响应页面使得加载更快(如预加载),用户体验更好,避免长时间白屏。
当然中间层也不是万能的,有收益同时也伴随着风险:
- 重复开发:每个终端的变化都要对用的api, 也会用重复开发的问题,增加开发成本
2. 维护问题:需要维护各种BFF应用,并发的压力集中
3. 链路问题:流程变复杂,同时走前端,服务端的研发流程,多端发布、相互依赖、导致流程繁琐
4. 浪费资源:中间层多了,必然会占用一定的计算和空间资源
以上就是我对中间层的一点简单的看法,下期我们聊一聊关于node中间层的具体使用(如 koa2,graphql, grpc 等)。以上如有不对,也欢迎指正。