通常情况下,NocoBase 应用的所有服务都运行在同一个 Node.js 实例中。当应用内的功能随业务逐渐变复杂后,一部分耗时的服务可能会影响整体性能。
为了提高应用的性能,NocoBase 支持在集群模式下将应用的服务拆分到不同的节点中运行,以避免单个服务的性能问题影响整个应用,导致无法正常响应用户请求。
另一方面也只可以针对性的对某些服务进行水平扩展,提高集群的资源利用率。
NocoBase 在集群部署时可以将不同服务拆分部署到不同的节点上运行,下图为拆分结构示意:

服务 KEY:workflow:process
异步模式的工作流,触发后将会进入队列排队执行。这类工作流可以看做后台任务,通常不需要用户等待结果返回。尤其较为复杂且耗时的流程,在触发量也比较大的情况下,建议将其拆分到独立的节点上运行。
服务 KEY:async-task:process
包括异步导入、导出等用户操作创建的任务,在大数据量或并发较多的情况下,建议将其拆分到独立的节点上运行。
将不同服务拆分至不同节点需要通过配置环境变量 WORKER_MODE 来实现。该环境变量可以参考以下几种规则配置:
WORKER_MODE=<空>:未配置,或配置为空时,工作模式与当前单实例相同,接收所有请求,也处理所有任务。兼容之前未配置的应用。WORKER_MODE=!:工作模式为仅处理请求,不处理任何任务。WORKER_MODE=workflow:process,async-task:process:配置为一个或多个服务标识(以英文逗号分隔),工作模式为仅处理该标识的任务,不处理请求。WORKER_MODE=*:工作模式为处理所有后台任务,不分模块,但不处理请求。WORKER_MODE=!,workflow:process:工作模式为处理请求,同时只处理某个标识的任务。WORKER_MODE=-:工作模式为不处理任何请求和任务(在 worker 进程内需要该模式)。例如在 K8S 环境中,可以将拆分功能相同的节点都使用相同的环境变量配置,可以方便的针对某类服务进行水平扩展。
假设有三个节点,分别为 node1、node2 和 node3,可以按以下方式配置:
node1:仅处理用户 UI 请求,配置 WORKER_MODE=!。node2:仅处理工作流任务,配置 WORKER_MODE=workflow:process。node3:仅处理异步任务,配置 WORKER_MODE=async-task:process。假设有四个节点,分别为 node1、node2、node3 和 node4,可以按以下方式配置:
node1 和 node2:处理所有常规请求,配置 WORKER_MODE=!,并由负载均衡自动将请求分发到这两个节点。node3 和 node4:处理所有其他后台任务,配置 WORKER_MODE=*。开发业务插件时,可根据需求场景,针对较大资源消耗的服务进行拆分。可以通过以下方式实现:
my-plugin:process,用于环境变量配置,并提供文档说明。app.serving() 的接口对环境进行判断,来决定是否由环境变量控制当前节点提供某个业务。