高并发低代码平台架构设计
Contents
本文基于当前鲁班低代码平台各仓库的既定关系与调用链,从高级架构师视角推演各系统的部署关系,并给出高并发优化、高可用保障、系统架构图与部署图、以及系统 Roadmap 与蓝图,便于在流量与可用性要求提升时按图演进。
一、系统关系与调用链(现状锚点)
鲁班平台由六个仓库组成,边界固定、契约清晰:
| 系统 | 职责 | 技术栈 | 下游依赖 |
|---|---|---|---|
| luban-ui | 组件库 + 设计器 + Render 运行时 | Vue3 / Nx | 无(被集成) |
| luban | 管理后台 | Vue3 / Vite / Pinia / Element Plus | luban-bff /api/* |
| luban-website | 对外站点(SSR) | Nuxt 3 | luban-bff /api/public/* |
| luban-bff | 接入层:认证、聚合、协议适配 | Next.js(Node) | luban-backend /backend/* |
| luban-backend | 主后端:站点/页面/用户/设置 | Spring Boot / MyBatis / Redis / MySQL | MySQL、Redis |
| luban-backend-go | 与主后端同契约的 Go 实现 | Go / Gin | MySQL、Redis |
调用关系:管理后台与对外站点只访问 BFF;BFF 通过 BACKEND_BASE_URL 调用主后端(可切换 Java/Go);主后端写 MySQL、用 Redis 做系统设置等缓存;公开页按 slug+path 读已发布页面(只读、无鉴权)。
二、系统架构图
下图从逻辑视角描述各系统之间的数据流与职责边界,便于在高并发与高可用设计时对齐「从哪里扩容、从哪里缓存」。
要点:BFF 为单一入口,可在此做限流、熔断与协议收敛;后端可多实例无状态扩展;数据层需单独做高可用与容量规划。
三、部署图(多环境推演)
在「生产高可用、可水平扩展」的前提下,各系统部署关系可推演如下。图中区分管理端流量与对外站点流量,便于后续按路径做差异化优化(如对外读多写少、可强缓存)。
部署要点:
- luban:静态资源可走 CDN 或对象存储,仅 HTML 入口走 LB。
- luban-bff:无状态,多实例 + LB 水平扩展;可单独为「公开接口」做实例组或路由策略(读多可加大缓存)。
- luban-website:Nuxt SSR 多实例,前面 CDN 缓存静态与可选「按 slug+path 的页面结果」。
- luban-backend:无状态,多实例 ×M;连接池、线程池按实例与 DB/Redis 容量调优。
- Redis:系统设置等热点读;生产建议主从或集群,保证高可用。
- MySQL:主从读写分离可期;写主读从,后端或通过数据源路由实现。
四、高并发优化
4.1 读写分离与缓存
- MySQL:主库写,从库读(列表、单条查询、公开页查询)。BFF/后端通过数据源路由或 JDBC 配置实现读写分离。
- Redis:
- 系统设置:已实现的
settings:global读缓存,写时更新 DB + 刷新 Redis。 - 可选:公开页按 (slug, path) 缓存:
public:page:{slug}:{path},TTL 按发布变更频率设定(如 60s~300s),发布/下架时主动失效。
- 系统设置:已实现的
- BFF 层:对「公开页面」接口可做短时内存/Redis 缓存,减少对后端的重复请求。
4.2 连接与线程池
- luban-backend:数据库连接池(如 HikariCP)大小 ≈ 实例数 × 每实例连接数,总连接数不超过 MySQL
max_connections;线程池(Tomcat/Netty)与 CPU 核数、IO 比例匹配,避免过多阻塞线程。 - luban-bff:Node 异步 IO,注意对后端调用的连接复用与超时设置;可配置
BACKEND_BASE_URL指向后端 LB,避免单点。
4.3 静态与页面级加速
- luban / luban-website 静态资源:构建产物上传 CDN,HTML 中引用 CDN 域名;首屏与交互资源分离,必要资源预加载。
- luban-website 已发布页:SSR 结果可按路由(如
/:siteSlug/:path*)在 CDN 或 BFF 侧做短 TTL 缓存,降低后端与 SSR 压力。
4.4 限流与熔断
- 入口:在 LB/网关或 BFF 对按 IP/UserID/接口的 QPS 限流,防止雪崩。
- BFF → Backend:对后端调用做熔断(如连续失败 N 次或错误率超阈值则熔断),并返回友好降级(如「稍后重试」),避免拖垮后端。
4.5 异步与削峰(可选演进)
- 非实时操作(如「批量发布」「导出」)可投递到消息队列,由 Worker 消费,避免长耗时请求占满连接与线程。
- 写操作(创建/更新站点、页面)保持同步;若未来有「页面渲染结果预生成」等重计算,可异步写缓存。
五、高可用保障
5.1 无状态与水平扩展
- luban-bff、luban-backend、luban-website:均设计为无状态,不依赖本地存储会话;通过 LB 多实例部署,单实例故障由 LB 摘除即可。
- luban:纯前端 SPA,静态托管即可,可用性依赖 CDN/托管平台。
5.2 数据层高可用
- MySQL:至少一主一从,主故障时提升从为主(手动或通过编排/工具);有条件可多从库做读扩展。
- Redis:主从复制 + 哨兵,或集群模式;避免单点,设置合理 maxmemory 与淘汰策略。
5.3 健康检查与自愈
- 各服务提供 /ping 或 /health,LB 或 K8s 探针定期探测;失败则摘除实例或重启容器。
- 数据库与 Redis 的连接失败应有重试与退避,并记录告警,便于运维介入。
5.4 契约一致与多运行时
- luban-backend 与 luban-backend-go 保持 API 契约一致(见
luban-backend/docs/API.md);BFF 仅通过BACKEND_BASE_URL切换,可在某运行时故障时切到另一实现,或按地域/流量拆分部署,提升整体可用性。
六、系统 Roadmap 与蓝图
在「当前六库分工不变、契约稳定」的前提下,可按阶段落地高并发与高可用能力,并预留扩展点。
| 阶段 | 目标 | 关键动作 |
|---|---|---|
| P0 当前 | 功能闭环、契约统一 | 管理后台 + 对外站点 + BFF + 主后端(Java/Go 二选一)打通;API 文档与错误码统一。 |
| P1 稳基 | 高可用、可观测 | MySQL 主从、Redis 主从/哨兵;BFF/Backend 多实例 + 健康检查;集中日志与基础监控(QPS、延迟、错误率)。 |
| P2 扛量 | 高并发、读扩展 | 后端读走从库;公开页 (slug, path) Redis 缓存;BFF/公开接口限流与熔断;静态资源上 CDN。 |
| P3 优化 | 体验与成本 | luban-website SSR 结果 CDN 或 BFF 缓存;可选消息队列做异步任务;按需引入 Go 版分流或多地域部署。 |
| P4 演进 | 平台化与开放 | 多租户/多站点隔离与配额;开放 API 与 webhook;审计与操作日志;可选 schema 版本与回滚。 |
蓝图(简图):
七、小结
以当前六库关系与调用链为锚点,高并发低代码平台架构可总结为:
- 系统架构图:明确客户端 → 边缘/接入(BFF)→ 后端 → 数据层与前端资产集成关系,便于确定扩容与缓存边界。
- 部署图:管理端与对外站点分区部署,BFF/Backend 多实例无状态,数据层 MySQL/Redis 主从或集群,保证可水平扩展与故障隔离。
- 高并发:读写分离、Redis 缓存(系统设置 + 公开页)、连接/线程池调优、CDN 与限流熔断,按阶段实施。
- 高可用:无状态服务 + LB、数据层主从与哨兵/集群、健康检查与契约一致的多运行时(Java/Go)切换能力。
- Roadmap:从 P0 功能闭环到 P4 平台化,分阶段落地稳基、扛量、优化与开放能力,便于按业务节奏迭代。
按上述架构与部署关系推进,可在不打破现有仓库边界的前提下,系统化地提升鲁班低代码平台的并发能力与可用性,并为后续多地域、多租户预留清晰扩展路径。
