以微前端为核心:SLDSMS 前端架构的演进之路与实践沉淀

一、文档概述

本文档描述了SLDSMS 前端架构 的完整演进历程,系统呈现了从 "单应用耦合、多技术栈混乱、部署低效" 的历史困境,到 "技术栈统一、微前端解耦、云原生部署、业务逻辑与 UI 分离" 的现代化架构的蜕变之路。

SLDSMS 的微前端深度实践 为核心案例,串联起全局技术栈演进、多端应用架构、工程化升级与监控体系建设 ,为大型复杂物流系统的前端架构设计提供了可复用的全景式参考。

二、历史架构困境:从单点问题到系统性瓶颈

2.1 全局视角:多栈混乱与单体耦合的双重枷锁

在架构演进初期,SLDSMS 前端架构 面临四大核心困境

  1. 多技术栈割裂Vue、React、React Native 三栈并存,不同管理系统(SLDSMS、SP 管理系统、Driver APP 等) 技术选型割裂,代码复用率低,维护成本高企。
  2. 单体应用瓶颈SLDSMS 采用单应用架构20+ 个核心业务模块(订单、揽收、干线、派送等)全部耦合在一个应用中,应用体积庞大、首屏加载慢,部署与回滚风险极高。
  3. 访问层与工程化低效 :无 CDN 导致静态资源加载慢,回滚操作依赖多层代理;CI / CD 流程未分离,发布效率与回滚灵活性严重不足。
  4. 监控体系失效:多个监控系统功能重叠,缺少关键性能指标(如页面加载耗时),问题定位困难。

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 核心架构理念:微应用 + 领域划分 + 业务逻辑分离

为破解历史困境,团队确立了三大核心架构理念

  1. 微应用(Micro-application) :将大型单应用拆分为多个独立的子应用,每个子应用聚焦一个核心业务域;
  2. 领域划分(Domain-division) :子应用严格按照后端业务领域划分,确保前后端领域对齐,支持独立开发、部署与迭代;
  3. 业务逻辑与 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 / AndroidBFF 架构实现后端解耦,统一仪表盘组件适配移动端与 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 三栈并存,不同管理系统技术选型割裂;
  • 演进中:明确 VueReact 的迁移策略,React 应用占比提升,React Native 用于移动端原生应用;
  • 成熟阶段:核心应用(SLDSMSAgency 管理系统、Asset 管理系统等)进入 "Vue + React 混合迁移" 阶段,新业务全面采用 React,技术栈统一趋势清晰。

6.2 关键技术选型决策

本次架构演进中的关键决策,均基于 "业务价值优先、技术风险可控" 的原则:

  1. 微前端入口方案 :选择 JS Entry(JS Entry 是以 JS 文件作为应用入口的微前端方案;还有其他可选方案,eg:"HTML Entry"等),减少冗余代码,提升性能;
  2. 代码组织方案 :选择 Multi-repo(多仓库代码组织方式),适配大型团队的组织架构调整,支持独立迭代;
  3. BFF 模式引入 :由前端团队维护 BFF 层,实现前后端解耦,提升数据聚合效率;
  4. CDN 策略 :选择性使用 CDN (仅 JS / CSS 库),平衡成本与性能,避免盲目投入;
  5. 监控整合:淘汰冗余监控,建立统一监控平台,实现问题主动预警。

七、架构优缺点与实践挑战

7.1 核心优势

  1. 模块化开发:通过微应用拆分,减少代码冲突,支持多团队并行开发;
  2. 领域对齐:子应用与后端领域一一对应,各领域可独立迭代与部署;
  3. 灵活组装:子应用可按需组合集成,提升系统可扩展性与场景适配能力;
  4. 业务逻辑解耦:提升代码可维护性、可测试性与可复用性,支持跨终端、跨框架迁移;
  5. 工程化升级CI / CD 分离、部署架构统一,提升发布效率与回滚灵活性。

7.2 实践挑战与解决方案

  1. Git 仓库管理复杂度提升 :每个子应用需独立创建 Git 仓库,增加管理成本;
    • 解决方案 :通过版本管理平台与自动化脚本简化分支创建与合并流程。
  2. 代码搜索效率下降 :代码分散在多个仓库,跨仓库搜索时易遗漏相关内容;
    • 解决方案:引入代码搜索工具,建立跨仓库索引,提升搜索效率。
  3. 业务逻辑分离落地难 :团队对 "服务层 + 视图层" 的分层理念理解不一,落地难度大;
    • 解决方案:加强概念宣导,提供最佳实践示例,严格代码审查,确保符合架构原则。

八、未来规划:从"可用"到"卓越"

基于当前架构现状,团队制定了下一阶段的演进路线图:

  1. 技术栈统一 :完成 VueReact 的迁移,全面统一前端技术栈,彻底消除多栈维护成本;
  2. 微前端完善 :进一步细化模块拆分,优化 Module Federation 配置,提升模块独立部署与版本管理能力;
  3. 业务逻辑分离 :强化 "服务层 + 视图层" 的架构分层,通过典型示例展示最佳实践,显著提升代码的可测试性和复用性;
  4. 部署升级 :推动所有区域迁移至 IDC ,实现全球部署架构统一,同时优化 CDN 使用策略,平衡成本与性能;
  5. 监控升级 :建立端到端全链路监控 ,补充和完善监控平台各项数据指标,实现问题 "秒级定位、分钟级修复"
  6. 开发体验优化:改进跨仓库代码搜索,简化分支管理,提升团队开发效率。

九、总结

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,互联网数据中心
相关推荐
九丝城主1 小时前
1V1音视频对话2--Web 双浏览器完整通话测试(强制 relay)
前端·音视频
明月_清风1 小时前
OAuth2 与第三方登录的三个阶段(2010–至今)
前端·安全
We་ct1 小时前
LeetCode 138. 随机链表的复制:两种最优解法详解
前端·算法·leetcode·链表·typescript
dcmfxvr1 小时前
【无标题】
java·linux·前端
一只鱼丸yo2 小时前
分布式系统的心脏:Raft共识算法原理深度解析
分布式·系统架构·共识算法
SoaringHeart2 小时前
Flutter 顶部滚动行为限制实现:NoTopOverScrollPhysics
前端·flutter
彷徨的蜗牛2 小时前
系统流程设计的架构实践:调用、数据与状态的协同演进
架构·系统架构
SunnyRivers2 小时前
LangChain 架构与环境搭建
架构·langchain·环境搭建·记忆
zhanglu51162 小时前
Java Lambda 表达式使用深度解析
开发语言·前端·python