elpis-core 引擎的理解
elpis-core 引擎------nodejs 服务框架,属于 BFF 层,主要作用于 页面 与 服务端 中间的交互处理(例如:请求参数校验,请求日志记录,接口汇总分发等)
- 目标:
- 规范的文件目录
- 通过服务引擎中的解析器ElpisKoa(各种 loader),对文件进行解析 (引擎核心)
- 进入到运行时
- 任务:通过解析器 ElpisKoa,实现运行时的流程【接受各种请求(api/页面),经历各种中间件,处理各种 controller、service,响应客户端的请求】。
具体说明 运行时
-
koa 的洋葱圈模型
- 原则:先入后出
- 举例流程:
- 页面请求-〉进入路由分发-〉进入洋葱圈(中间件),顺序执行-〉业务逻辑处理-〉调用对应的controller(如SSR)-〉再次进入洋葱圈,执行中间件-〉渲染响应页面
- 页面请求-〉进入路由分发-〉进入洋葱圈(中间件),顺序执行-〉业务逻辑处理-〉调用对应的controller(如SSR)-〉再次进入洋葱圈,执行中间件-〉渲染响应页面
-
项目分为三层
- 展示层
- BFF层(不仅做转发,还要做数据层的消费与交互,和前端的交互)
- 1: 接入层:路由分发、路由各种校验、路由中间件
- 2: 业务层:controller处理器(业务、service 调用)、env环境分发、config提取、extend服务拓展、schedule定时任务
- 3: 服务层:service 处理器
- 数据层
- 数据库、缓存、文件存储、日志、外部服务等
-
BFF 层作用
- 1️⃣ 可以解耦展示层和后端接口
- 后端只需要关注业务逻辑(提供原子性的接口),无需关注页面展示逻辑
- 具体的展示逻辑,由前端在 BFF 层实现(增加字段、接口)
- 2️⃣ 可以将后端的接口都收拢到 BFF 层,进行汇聚处理
- 列如:某个页面需要依赖多接口,可以由 BFF 统一为页面提供一个接口,对外分发
- 优点:经过这样处理后,外网 到 内网 的请求,时间会缩短,有效提升系统的整体性能
- 默认请求流程:页面请求 ➡️ 解析域名 ➡️ 创建链接 ➡️ DNS节点的寻找 ➡️ 去到服务端的网关 ➡️ 负载均衡、防火墙 ➡️ 具体的服务节点
- 优化后的流程:只保留了展示端与 BFF 层的交互,BFF 层与后端属于 服务对服务的交互(直接指到ip/端口),会极大的节省请求时间,性能得到提升。【具体来说,如有一个页面需要请求100个接口,那就需要走100次从外网到内网的过程;而将100个接口,放到 BFF 中去做转发,我们只需要走1次从外网到内网的过程,其余均是服务对服务的交互,在集群内完成。】
- 同时,这样的操作,也会绕开浏览器对同一域名下,请求的并发上限。
- 3️⃣ 可以将签名、密钥放在 BFF 层进行管理,可以更好的保护目标 API 服务器
- 4️⃣ 具备 SSR 的能力,对比无 BFF 层,前端的灵活性更高(前端可自己实现,而无需挂到Nginx,后续有变化也不会增加后端工作)
- 1️⃣ 可以解耦展示层和后端接口
-
库/文档 记录
- Koa
- Koa 后端服务框架
- Nunjucks
- 模版渲染引擎,本质就是SSR
- log4js
- 日志记录库
- nodemon
- koa-static
- 设置静态资源目录
- Koa-bodyparser
- 解析请求体
- json-schema
- 字符串校验器
- ajv
- 请求参数校验器
- superagent
- 后端的请求库
- Koa
引用: 抖音"哲玄前端"《大前端全栈实践》