【elpis专栏】里程碑一:elpis-core 引擎的理解

elpis-core 引擎的理解

elpis-core 引擎------nodejs 服务框架,属于 BFF 层,主要作用于 页面 与 服务端 中间的交互处理(例如:请求参数校验,请求日志记录,接口汇总分发等)

  • 目标:
    • 规范的文件目录
    • 通过服务引擎中的解析器ElpisKoa(各种 loader),对文件进行解析 (引擎核心)
    • 进入到运行时
      • 任务:通过解析器 ElpisKoa,实现运行时的流程【接受各种请求(api/页面),经历各种中间件,处理各种 controller、service,响应客户端的请求】。

具体说明 运行时

  • koa 的洋葱圈模型

    • 原则:先入后出
    • 举例流程:
      • 页面请求-〉进入路由分发-〉进入洋葱圈(中间件),顺序执行-〉业务逻辑处理-〉调用对应的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,后续有变化也不会增加后端工作)
  • 库/文档 记录

引用: 抖音"哲玄前端"《大前端全栈实践》

相关推荐
helloweilei7 小时前
javascript 结构化克隆
javascript·node.js
小蜜蜂dry1 天前
nestjs学习 - 控制器、提供者、模块
前端·node.js·nestjs
San301 天前
手写 Mini Cursor:基于 Node.js 与 LangChain 的开发实战
langchain·node.js·agent
前端付豪1 天前
Nest 项目小实践之图书增删改查
前端·node.js·nestjs
sunny_2 天前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
Qinana2 天前
150行代码搞定私有知识库!Node.js + LangChain 打造最小化 RAG 系统全流程
人工智能·程序员·node.js
一次旅行2 天前
npm-error code 128问题解决方法
node.js
前端付豪3 天前
Nest 项目小实践之图书展示和搜索
前端·node.js·nestjs
无责任此方_修行中3 天前
如何利用 pnpm 的安全控制功能防御 npm 供应链攻击
javascript·npm·node.js
允许部分打工人先富起来3 天前
在node项目中执行python脚本
前端·python·node.js