一、文档概述
本文档描述了SLDSMS 前端架构 的完整演进历程,系统呈现了从 "单应用耦合、多技术栈混乱、部署低效" 的历史困境,到 "技术栈统一、微前端解耦、云原生部署、业务逻辑与 UI 分离" 的现代化架构的蜕变之路。
以SLDSMS 的微前端深度实践 为核心案例,串联起全局技术栈演进、多端应用架构、工程化升级与监控体系建设 ,为大型复杂物流系统的前端架构设计提供了可复用的全景式参考。
二、历史架构困境:从单点问题到系统性瓶颈
2.1 全局视角:多栈混乱与单体耦合的双重枷锁
在架构演进初期,SLDSMS 前端架构 面临四大核心困境:
- 多技术栈割裂 :Vue、React、React Native 三栈并存,不同管理系统(SLDSMS、SP 管理系统、Driver APP 等) 技术选型割裂,代码复用率低,维护成本高企。
- 单体应用瓶颈 :SLDSMS 采用单应用架构 ,20+ 个核心业务模块(订单、揽收、干线、派送等)全部耦合在一个应用中,应用体积庞大、首屏加载慢,部署与回滚风险极高。
- 访问层与工程化低效 :无 CDN 导致静态资源加载慢,回滚操作依赖多层代理;CI / CD 流程未分离,发布效率与回滚灵活性严重不足。
- 监控体系失效:多个监控系统功能重叠,缺少关键性能指标(如页面加载耗时),问题定位困难。
2.2 局部深度:SLDSMS 单应用的原生缺陷
作为核心履约系统,SLDSMS 的单应用架构问题尤为突出,直接制约了业务迭代。
2.2.1 模块集中与依赖混乱
- 应用体积庞大 :20+ 模块集中导致首屏加载慢,用户体验受影响;
- 网状依赖结构 :业务组件、工具函数、状态管理文件相互嵌套引用,依赖链路难以追踪,一处修改可能引发连锁反应;
- 部署风险高:任何模块的变更都需要全量发布,回滚操作复杂且风险高。
2.2.2 分层设计的根本性缺陷
单应用的分层设计(Views / Stores / Utils / Components) 存在原生缺陷,导致开发效率与代码质量持续恶化:
| 分层 | 结构特点 | 核心问题 |
|---|---|---|
| Views | 所有页面平铺排列,无业务域划分 | 页面结构扁平,难以按业务维度管理和维护 |
| Stores | 所有状态管理平铺,与 Views 交叉依赖 | 依赖关系混乱,状态变更不可控 |
| Utils | 核心文件代码量庞大 | 频繁引发代码合并冲突,模块职责模糊 |
| Components | 通用组件缺乏标准化封装 | 复用性差,难以跨业务场景使用 |
三、核心架构升级:从 "解耦单体" 到 "业务逻辑分离" 的两级跳
3.1 全局演进路线:从历史包袱到现代化体系
架构演进清晰划分为五个关键阶段,每个阶段都对应着核心问题的解决与能力的升级:
| 架构阶段 | 核心变化 | 解决的核心问题 |
|---|---|---|
| 历史遗留 | 多技术栈并存、SLDSMS 单应用耦合、无 CDN | 无 |
| 问题修复 | 引入 CDN、CI / CD 分离、开始解决历史问题 | 访问层瓶颈、工程化低效 |
| 微前端落地 | SLDSMS 微前端初步拆分,领域划分完成 | 模块耦合、代码冲突 |
| 架构成熟 | 引入 BFF 模式、SLDSMS 微前端演进、区域部署统一 | 复用性不足、前后端耦合 |
| 现代化 | 技术栈统一趋势明显、监控体系完善、入口层扩展 | 多栈维护成本、监控失效 |
3.2 核心架构理念:微应用 + 领域划分 + 业务逻辑分离
为破解历史困境,团队确立了三大核心架构理念:
- 微应用(Micro-application) :将大型单应用拆分为多个独立的子应用,每个子应用聚焦一个核心业务域;
- 领域划分(Domain-division) :子应用严格按照后端业务领域划分,确保前后端领域对齐,支持独立开发、部署与迭代;
- 业务逻辑与 UI / 框架分离 :将业务逻辑封装为独立的服务层(Services ),与视图层(Views )彻底解耦,提升代码可测试性与可复用性。
四、核心应用架构:从单体到微前端的深度实践
4.1 SLDSMS(履约管理系统):架构演进的核心案例
SLDSMS 作为核心履约管理系统,其架构演进是本次升级的缩影,经历了 "单体 → 分层 → 微前端 → 业务逻辑分离" 的四级跳:
4.1.1 单应用架构
- 特点 :20+ 功能模块(Order、Pickup、Inbound 等)全部耦合在一个应用中,应用体积大、加载慢,部署与回滚风险极高。
- 问题:模块间强依赖,任何一处修改都可能影响全局,开发效率与系统稳定性严重受限。
4.1.2 微前端架构
基于 Webpack Module Federation,构建 "宿主+子应用" 的微前端架构,实现模块共享与独立部署:
- 宿主应用(Host Application) :
- 初期:提供全局能力(用户与角色、通知、报表中心、财务管理、订单 / 调度、网络路由);
- 演进后 :轻量化为仅提供框架、组件与工具 ,所有业务逻辑下沉至子应用,实现 "瘦宿主、胖子应用"。
- 子应用(Sub Application) :
- 初期 :按业务领域划分为首公里 / 末公里、干线运输、站内操作、智能分拣、劳动力管理、资产管理等;
- 演进后 :新增订单、异常、网络 等独立子应用,整合通用能力与共享服务层,提升复用性。
- 技术分层 :从下到上分为 API 层(BFF + 后端 API )、服务层(user、menu、permission 等)、组件层(基础组件 + 业务组件)、工具层(request、cookie、print 等)、视图层(路由 + 状态管理 + 业务视图),形成清晰的技术分层。
4.1.3 业务逻辑与 UI / 框架分离
为进一步提升可维护性,团队推进 "业务逻辑与 UI / 框架分离" 的演进,核心是将业务逻辑封装为独立的服务层(Services),与视图层彻底解耦:
- 服务层(Services) :独立封装业务逻辑 ,如
LineHaulTaskScanService,不依赖任何 UI 框架; - 视图层(Views) :仅负责 UI 渲染与事件处理 ,通过调用服务层实现业务逻辑,遵循 "薄视图" 原则。
核心优势:彻底解耦、可复用性高、可测试性强,支持跨终端、跨框架迁移。
typescript
// 服务层示例:LineHaulTaskScanService
class LineHaulTaskScanService {
readonly taskId: string;
constructor(opt: { taskId?: string } = {}) {
this.taskId = opt.taskId;
}
public addOrder(orderKey: string) {
// 格式化运单号、校验运单号、调用后端API等业务逻辑
}
public completeTask() {
// 校验任务状态、完成任务等业务逻辑
}
}
4.2 其他核心应用:多端协同的架构设计
除 SLDSMS 外,其他核心应用也采用了适配自身场景的架构模式:
4.2.1 SP 管理系统:驿站业务的模块化架构
- 架构模式 :"Host + 独立模块" ,Host 模块包含自助取货、投递、管理后台 等核心服务,独立模块包含储物柜、到店服务等辅助服务;
- 模块分类 :核心服务模块 与辅助服务模块清晰划分,便于独立迭代。
4.2.2 SP APP:移动端原生应用
- 技术栈 :采用 React Native 开发,实现 "一套代码、多端运行",支撑移动端履约操作;
- 定位 :与 SP 管理系统功能对应,面向一线操作人员,提供便捷的移动端履约能力。
4.2.3 Management APP:混合架构的移动端监控
- 架构模式 :"Native + H5" 混合架构,Web / H5 层负责业务渲染与通信,Native 层提供原生能力,Server 层通过 BFF 聚合后端数据;
- 核心优势 :H5 页面一次开发适配 iOS / Android ,BFF 架构实现后端解耦,统一仪表盘组件适配移动端与 PC 端,显著降低研发成本。
五、工程化与部署:从低效到灵活的体系化升级
5.1 CI / CD 分离策略:构建与部署解耦
团队推行 "CI 与 CD 分离" 的工程化方案,核心目标是提升发布效率与回滚灵活性:
5.1.1 CI 流程
- 触发机制 :Merge Request 触发,覆盖多环境源分支;
- 核心阶段 :依赖安装 → 代码构建 → 产物推送至版本管理平台;
- 产物输出:多环境构建产物分支,保存对应环境的可部署产物。
5.1.2 CD 流程
- 部署源 :从版本管理平台拉取对应环境的构建产物;
- 核心步骤:拉取产物 → 容器化构建(可选) → 同步至静态服务器;
分离价值:提前执行构建,缩短发布流程;保留构建产物,支持任意版本的发布与回滚。
5.2 部署架构演进:区域统一与云原生落地
部署架构的演进聚焦于提升资源交付效率、降低运维成本、实现区域统一:
5.2.1 区域 A:从传统代理到 ALB + CDN
- 初期:采用传统多层代理
DNS → SGW → Haproxy → nginx-static-server,无 CDN,回滚低效; - 成熟阶段:升级为
DNS → NLB → ALB → nginx-static-server,引入 CDN 加速 JS / CSS 库,ALB 实现灵活缓存策略。
5.2.2 区域 B:从云原生到自建 IDC
- 初期:采用 Google Cloud 服务,架构为
DNS → ingress → k8s container (nginx) → Google Cloud; - 演进后:引入 CDN ,架构升级为
DNS → access layer → k8s container (nginx) → Google Cloud; - 成熟阶段:从 Google Cloud 迁移至自建 IDC ,与区域A 实现部署架构统一
DNS → NLB → ALB → nginx-static-server,提升区域自主性与性能。
5.2.3 部署隔离策略:多应用目录隔离
为避免不同应用间的资源冲突,团队采用 "应用独立部署 + 自定义参数控制" 的隔离策略:
- 每个前端应用独立部署;
- 通过部署工具参数控制不同应用的目录隔离,确保业务场景与应用的对应关系清晰。
六、技术栈与关键决策:从选型到落地的价值沉淀
6.1 技术栈演进:从多栈混乱到 React 统一
前端技术栈的演进是本次架构升级的核心主线,逐步实现 "统一技术栈、降低维护成本" 的目标:
- 初期:Vue、React、React Native 三栈并存,不同管理系统技术选型割裂;
- 演进中:明确 Vue 到 React 的迁移策略,React 应用占比提升,React Native 用于移动端原生应用;
- 成熟阶段:核心应用(SLDSMS 、Agency 管理系统、Asset 管理系统等)进入 "Vue + React 混合迁移" 阶段,新业务全面采用 React,技术栈统一趋势清晰。
6.2 关键技术选型决策
本次架构演进中的关键决策,均基于 "业务价值优先、技术风险可控" 的原则:
- 微前端入口方案 :选择 JS Entry(JS Entry 是以 JS 文件作为应用入口的微前端方案;还有其他可选方案,eg:"HTML Entry"等),减少冗余代码,提升性能;
- 代码组织方案 :选择 Multi-repo(多仓库代码组织方式),适配大型团队的组织架构调整,支持独立迭代;
- BFF 模式引入 :由前端团队维护 BFF 层,实现前后端解耦,提升数据聚合效率;
- CDN 策略 :选择性使用 CDN (仅 JS / CSS 库),平衡成本与性能,避免盲目投入;
- 监控整合:淘汰冗余监控,建立统一监控平台,实现问题主动预警。
七、架构优缺点与实践挑战
7.1 核心优势
- 模块化开发:通过微应用拆分,减少代码冲突,支持多团队并行开发;
- 领域对齐:子应用与后端领域一一对应,各领域可独立迭代与部署;
- 灵活组装:子应用可按需组合集成,提升系统可扩展性与场景适配能力;
- 业务逻辑解耦:提升代码可维护性、可测试性与可复用性,支持跨终端、跨框架迁移;
- 工程化升级 :CI / CD 分离、部署架构统一,提升发布效率与回滚灵活性。
7.2 实践挑战与解决方案
- Git 仓库管理复杂度提升 :每个子应用需独立创建 Git 仓库,增加管理成本;
- 解决方案 :通过版本管理平台与自动化脚本简化分支创建与合并流程。
- 代码搜索效率下降 :代码分散在多个仓库,跨仓库搜索时易遗漏相关内容;
- 解决方案:引入代码搜索工具,建立跨仓库索引,提升搜索效率。
- 业务逻辑分离落地难 :团队对 "服务层 + 视图层" 的分层理念理解不一,落地难度大;
- 解决方案:加强概念宣导,提供最佳实践示例,严格代码审查,确保符合架构原则。
八、未来规划:从"可用"到"卓越"
基于当前架构现状,团队制定了下一阶段的演进路线图:
- 技术栈统一 :完成 Vue 到 React 的迁移,全面统一前端技术栈,彻底消除多栈维护成本;
- 微前端完善 :进一步细化模块拆分,优化 Module Federation 配置,提升模块独立部署与版本管理能力;
- 业务逻辑分离 :强化 "服务层 + 视图层" 的架构分层,通过典型示例展示最佳实践,显著提升代码的可测试性和复用性;
- 部署升级 :推动所有区域迁移至 IDC ,实现全球部署架构统一,同时优化 CDN 使用策略,平衡成本与性能;
- 监控升级 :建立端到端全链路监控 ,补充和完善监控平台各项数据指标,实现问题 "秒级定位、分钟级修复";
- 开发体验优化:改进跨仓库代码搜索,简化分支管理,提升团队开发效率。
九、总结
SLDSMS 前端架构经历了一场深刻的蜕变:
- 从多技术栈混乱 到React 统一,消除了技术债;
- 从单体应用耦合 到微前端解耦,提升了开发效率与系统稳定性;
- 从业务逻辑与 UI 深度绑定 到服务层与视图层分离,增强了代码可测试性与可复用性;
- 从 "传统多层代理 / 云原生架构" 到统一架构,优化了资源交付与运维效率;
- 从监控冗余失效 到统一主动预警,实现了问题的早发现、早解决。
这场演进不仅是技术层面的升级,更是团队对 "架构服务于业务" 理念的深度践行。未来,团队将继续以用户需求为导向,以技术创新为驱动,打造更高效、更稳定、更具韧性的物流履约前端系统,为业务的全球化发展提供坚实支撑。
附录:术语表
- SLDSMS:Self-Built Logistics Distribution Service Management System,自建物流配送服务管理系统
- BFF:Backend For Frontend,服务于前端的后端,用于灵活聚合后端数据
- ALB:Application Load Balancer,应用负载均衡器
- CDN:Content Delivery Network,内容分发网络
- CI / CD:持续集成 / 持续部署
- IDC:Internet Data Center,互联网数据中心