TMS运输管理系统架构介绍
基于现代化技术构建的高效、可靠、可扩展的运输管理解决方案
系统概述
TMS运输管理系统是一个综合性的物流管理平台,整合了订单管理、运输调度、货物跟踪、网点管理、财务管理等核心功能,为物流企业提供全方位的数字化解决方案。
系统采用模块化设计,支持多角色协同工作,包括客户端、网点端、分拣员端、运输员端、派送员端和管理员端,实现物流全流程的数字化管理。
业务流程图
用户下单
↓
收货网点
↓
运输调度
↓
分拣中心
↓
货物运输
↓
配送网点
↓
派送员派送
↓
用户签收
系统架构
表现层
客户端
网点端
分拣员端
运输员端
派送员端
管理员端
↓
业务逻辑层
订单管理
运输调度
货物跟踪
网点管理
财务管理
人力资源管理
↓
数据访问层
数据访问接口
缓存管理
数据同步
↓
数据存储层
关系型数据库
NoSQL数据库
文件存储
网络架构与集群部署
网络架构图
客户端
APP/PC/小程序
Android
iOS
Web
WeChat
↓
CDN & 安全层
全球加速 & 安全防护
CDN节点
WAF防护
DDoS防护
↓
Nginx集群
3节点负载均衡
Nginx-1
Nginx-2
Nginx-3
↓
Gateway集群
3节点API网关
Gateway-1
Gateway-2
Gateway-3
↓
Nacos集群
3节点注册中心
Nacos-1
Nacos-2
Nacos-3
↓
订单服务
3节点集群
Order-1
Order-2
Order-3
客户端服务
3节点集群
Client-1
Client-2
Client-3
运输服务
3节点集群
Transport-1
Transport-2
Transport-3
网点服务
3节点集群
Branch-1
Branch-2
Branch-3
检索服务
3节点集群
Search-1
Search-2
Search-3
TMS服务
3节点集群
TMS-1
TMS-2
TMS-3
↓
认证服务
3节点集群
Auth-1
Auth-2
Auth-3
消息服务
3节点集群
MQ-1
MQ-2
MQ-3
监控服务
3节点集群
Monitor-1
Monitor-2
Monitor-3
日志服务
3节点集群
Log-1
Log-2
Log-3
↓
缓存集群
多级缓存架构
Redis Master-1
Redis Slave-1
Redis Master-2
Redis Slave-2
Redis Master-3
Redis Slave-3
↓
存储服务
MySQL分库分表
主从复制架构
YN_Master
SX_Master
GD_Master
SC_Master
ElasticSearch
6节点集群
ES-Master
ES-Data1
ES-Data2
ES-Data3
对象存储
分布式存储
OSS-1
OSS-2
OSS-3
↓
运维监控
统一监控平台
Prometheus
Grafana
ELK Stack
Jenkins
集群介绍
1. 客户端层
- 多端支持:APP、PC、小程序三端覆盖,满足不同用户场景
- 负载均衡:通过DNS轮询和Nginx实现客户端请求分发
- CDN加速:静态资源通过CDN分发,提升访问速度
2. 接入层
- Nginx集群:部署多节点Nginx,实现高可用和负载均衡
- SSL/TLS:全链路HTTPS加密,保障数据传输安全
- 限流熔断:实现请求限流和熔断机制,保护后端服务
3. 网关层
- Gateway集群:基于Spring Cloud Gateway的API网关集群
- 路由管理:动态路由配置,支持服务灰度发布
- 统一认证:集中式身份认证和授权管理
- 监控告警:实时监控网关健康状态和请求流量
4. 服务层
- Nacos服务发现:实现服务注册与发现,支持动态扩缩容
- 服务集群:各微服务独立部署3节点集群,提高可用性
- 负载均衡:基于Ribbon的客户端负载均衡
- 服务治理:通过Sentinel实现服务熔断、限流和降级
5. 核心服务介绍
- 订单服务(Order Service):
- 订单创建、修改、取消等全生命周期管理
- 订单状态流转和通知
- 订单数据分库分表处理
- 客户端服务(Client Service):
- 用户注册、登录、认证授权
- 用户信息管理和积分管理
- 收货地址管理
- 运输服务(Transport Service):
- 运输路线规划和调度
- 车辆和司机管理
- 运输过程跟踪和监控
- 网点服务(Branch Service):
- 网点信息管理和查询
- 网点能力评估(到货、派送能力)
- 网点库存和出入库管理
- 检索服务(Search Service):
- 基于ElasticSearch的全文检索
- 订单、货物、网点等多维度搜索
- GIS地理位置检索和路线规划
- 实时索引更新和缓存优化
- TMS服务(TMS Service):
- TMS核心业务逻辑处理
- 分拣、装卸、发车等业务流程管理
- 考核、绩效、运单等核心功能
- 与其他服务的业务协调和数据同步
6. 存储层
- Redis集群:部署6节点哨兵模式,3主3从,提供高性能缓存
- MySQL主从:16库主从复制架构,每个库1主2从,实现读写分离
- 数据库分片:根据业务需求实现水平分片,提高存储容量和性能
- 数据备份:定期全量备份和增量备份,保障数据安全
7. 运维监控
- Prometheus监控:实时监控系统各项指标
- Grafana可视化:直观展示系统运行状态
- ELK日志系统:集中式日志收集和分析
- 自动化部署:基于Jenkins的CI/CD流程
客户端架构
多端支持
APP端
PC端
小程序端
↓
核心功能
下单功能
订单查询
网点搜索
网点能力查询(可到货、可派送)
订单系统
订单管理
- 订单提取:从队列中提取待处理订单,分配给相应网点或运输员
- 订单修改:支持订单信息修改,包括收货人、地址、货物信息等
- 运费计算:根据距离、重量、体积等自动计算运费
- 服务费管理:支持增值服务费用,如保价费、加急费等
- 支付管理:支持在线支付、货到付款、月结等多种支付方式
积分与优惠
- 积分扣除:下单时可使用积分抵扣运费,积分实时扣除
- 网点折扣:支持网点折扣策略,不同网点可设置不同折扣率
- 修改通知:订单状态变更时自动通知用户,包括短信、APP推送等
TMS核心系统
运输管理
- 运输调度:智能分配运输任务,优化运输路线
- 运输跟踪:实时跟踪运输车辆位置和货物状态
- 运输监控:监控运输过程中的异常情况,及时预警
考核管理
- 绩效考核:对运输员、派送员进行绩效评估
- 考核指标:包括准时率、完好率、客户满意度等
- 考核报表:生成考核报表,支持多维度分析
货箱管理
- 货箱创建:创建货箱,绑定货物信息
- 货箱跟踪:跟踪货箱流转状态
- 货箱盘点:定期盘点货箱库存
转运管理
- 转运调度:安排货物在网点间的转运
- 转运跟踪:跟踪转运进度和状态
- 转运确认:确认货物到达转运网点
订单运营
- 订单分配:将订单分配给合适的运输员或派送员
- 订单监控:监控订单处理进度
- 异常处理:处理订单异常情况
车辆管理
- 车辆信息:管理车辆基本信息、证件、保险等
- 车辆调度:安排车辆执行运输任务
- 车辆维护:记录车辆维护、保养信息
绩效管理
- 绩效统计:统计员工工作量和效率
- 绩效排名:生成员工绩效排名
- 绩效奖励:根据绩效发放奖励
装卸管理
- 装卸计划:制定装卸作业计划
- 装卸记录:记录装卸作业情况
- 装卸确认:确认装卸完成
分拨管理
- 分拨调度:安排货物分拨到不同网点
- 分拨跟踪:跟踪分拨进度
- 分拨确认:确认分拨完成
扫描管理
- 入库扫描:扫描货物入库
- 出库扫描:扫描货物出库
- 转运扫描:扫描货物转运
运单管理
- 运单生成:自动生成运单
- 运单打印:支持运单打印
- 运单查询:查询运单信息
到货管理
- 到货登记:登记货物到达网点
- 到货确认:确认货物到货
- 到货通知:通知相关人员到货
发车管理
- 发车计划:制定发车计划
- 发车确认:确认车辆发车
- 发车跟踪:跟踪发车状态
入库记录
- 入库登记:登记货物入库
- 入库确认:确认入库完成
- 入库统计:统计入库数据
数据库架构
分库策略
- 按省份ID分库:根据订单所属省份ID进行分库,将不同省份的订单数据存储在不同的数据库实例中,实现数据的地域隔离和负载分散
- 分库数量:根据业务量和地域分布,建议设置8-16个数据库实例,每个实例负责1-3个省份的数据
- 优势:提高系统可用性,单库故障不影响其他地区业务;便于按地区进行数据备份和恢复
分表策略
订单表(orders)
- 分表依据:按省份ID分表,与分库策略保持一致
- 数据量估算:每个表约有800w数据(计算公式:100000单/天 * 320天/年 * 4年 / 16库 = 800w)
- 分表数量:每个数据库实例分4-8个表,根据实际数据量动态调整
- 索引策略:订单ID(主键)、用户ID、网点ID、订单时间、订单状态
2.订单货物详情表(order_goods)
- 分表依据:与订单表保持一致,按省份ID分表,确保订单和货物在同一数据库实例中
- 数据量估算:每个表约有4000w数据(计算公式:800w订单 * 5件货物/订单 = 4000w)
- 存储内容:每个订单对应一种类型多个货物的详细信息
- 索引策略:货物ID(主键)、订单ID(外键)、货物类型、货物状态
3. 运单扫描记录表(waybill_scan)
- 分表依据:按订单时间按月分表,便于数据清理和归档
- 数据量估算:每个表约有500w数据(计算公式:100000单/天 * 5次扫描/单 * 30天 = 1500w,考虑扫描记录较多,估算500w)
- 数据清理:清除6个月之前的数据,归档到历史数据库或冷存储
- 索引策略:扫描ID(主键)、订单ID、扫描时间、扫描状态、扫描网点
4. 用户订单关联表(user_order)
- 分表依据:按用户ID分表,确保同一用户的订单记录在同一表中
- 数据量估算:每个表约有1000w数据(计算公式:总用户数 * 平均订单数 / 表数量)
- 存储内容:记录下单用户、网点信息、订单ID、地区信息和签收用户信息
- 索引策略:关联ID(主键)、用户ID、订单ID、下单时间、订单状态
5. 其他基础表
- 用户表(users):存储用户基本信息,按用户ID分表
- 网点表(branches):存储网点基本信息,按省份ID分表
- 车辆表(vehicles):存储车辆基本信息,按网点ID分表
- 员工表(employees):存储员工基本信息,按网点ID分表
分表后带来的问题及解决方案
1. 如何根据订单号定位查询订单详情、货物信息和扫描记录?
- 订单号设计:采用标准化格式,长度16位,格式为:地区码(2位) + 年份(2位) + 序号(12位),如YN24000000000001
- 地区码映射:建立地区码到数据库实例的映射表,如YN→db_instance_1, SX→db_instance_2
- 定位流程:
- 从订单号前2位提取地区码(如YN)
- 根据地区码映射表确定对应的数据库实例
- 从订单号解析出年份和序号信息
- 根据序号计算分表位置(序号 % 表数量)
- 根据年份和月份确定扫描记录表的分表
- 在同一数据库实例中查询订单详情、货物信息和扫描记录
- 性能优化:使用Redis缓存订单号到数据库实例的映射关系,减少映射表查询
2. 如何查询某用户或某网点的所有订单记录?
- 解决方案:
- 多级关联表设计:
- 用户订单关联表(user_order_mapping):按用户ID分表,记录用户ID、订单ID、地区信息、订单时间、订单状态
- 网点订单关联表(branch_order_mapping):按网点ID分表,记录网点ID、订单ID、地区信息、订单时间、订单状态
- 订单索引表(order_index):按时间分表,记录订单基本信息和状态,用于快速查询
- 分布式查询服务:
- 查询路由:根据用户ID或网点ID路由到对应的数据分片
- 并行执行器:同时执行多个数据库实例的查询
- 结果聚合器:汇总和排序查询结果
- 智能缓存策略:
- L1缓存:Redis本地缓存,存储热点用户的订单列表
- L2缓存:分布式Redis缓存,存储用户最近的订单记录
- 缓存预热:系统启动时预热活跃用户的订单数据
- 缓存失效策略:基于时间和访问频率的智能失效
- 多级关联表设计:
- 查询流程:
- 第一步:缓存查询
- 查询Redis本地缓存,检查是否存在热点用户的订单列表
- 若缓存命中,直接返回缓存结果
- 第二步:关联表查询
- 根据用户ID或网点ID计算分表位置
- 查询对应的关联表,获取订单ID和地区信息
- 应用时间范围、订单状态等过滤条件
- 第三步:分布式查询
- 根据地区信息分组,确定需要查询的数据库实例
- 使用线程池并行查询多个数据库实例
- 每个查询使用主从负载均衡,优先选择从库
- 第四步:结果处理
- 汇总来自不同数据库实例的查询结果
- 按时间戳排序,支持正序和倒序
- 应用分页逻辑,返回指定页的数据
- 将结果缓存到Redis,设置合理的过期时间
- 第一步:缓存查询
- 高级优化策略:
- ElasticSearch集成:
- 实时同步订单数据到ElasticSearch
- 支持全文检索、模糊查询、范围查询等复杂条件
- 提供聚合分析功能,如按时间、地区、状态统计
- 使用ES作为复杂查询的主数据源,数据库作为详细信息来源
- 数据分片优化:
- 用户订单关联表:按用户ID范围分片,每100万用户一个分片
- 网点订单关联表:按网点ID范围分片,每1000个网点一个分片
- 使用一致性哈希算法,支持动态扩缩容
- 读写分离增强:
- 写操作:路由到主库
- 读操作:智能路由到负载较低的从库
- 延迟敏感查询:使用主库
- 批量查询:使用从库
- 监控与告警:
- 监控查询响应时间、QPS、错误率等指标
- 设置阈值告警,当查询时间超过阈值时及时通知
- 慢查询日志分析,定期优化查询语句
- 缓存命中率监控,及时调整缓存策略
- 降级策略:
- 当ElasticSearch不可用时,降级为直接查询数据库
- 当缓存失效时,使用异步加载策略,避免阻塞主线程
- 当数据库负载过高时,启用限流和排队机制
- ElasticSearch集成:
- 扩展性考虑:
- 支持水平扩展:当数据量增长时,可以添加更多的数据库实例
- 支持垂直扩展:当单实例性能不足时,可以升级硬件配置
- 支持跨区域部署:可以在不同区域部署数据库实例,提高访问速度
- 支持多租户:可以为不同的客户或业务线提供独立的数据分片
3. 跨库事务处理
- 问题:分库后,单个业务可能涉及多个数据库实例,传统事务无法满足需求
- 解决方案:
- 使用分布式事务框架(如Seata)保证数据一致性
- 采用最终一致性方案,通过消息队列实现异步数据同步
- 将业务逻辑设计为幂等性,支持重试机制
数据库优化策略
1. 读写分离
- 主从架构:每个数据库实例配置1主2从,主库负责写操作,从库负责读操作
- 负载均衡:使用中间件(如ShardingSphere、MyCat)实现读写分离和负载均衡
- 数据同步:主从复制采用半同步模式,确保数据一致性
2. 缓存策略
- 热点数据缓存:使用Redis缓存热点订单、用户信息、网点信息等
- 缓存穿透防护:使用布隆过滤器防止缓存穿透
- 缓存雪崩防护:设置不同的过期时间,避免同时失效
- 缓存更新策略:采用Cache-Aside模式,写操作先更新数据库再删除缓存
3. 索引优化
- 联合索引:根据查询频率和选择性,合理设计联合索引
- 索引覆盖:尽量使用索引覆盖查询,避免回表
- 索引监控:定期监控索引使用情况,删除无用索引
运维与容灾
1. 数据迁移与扩容
- 平滑扩容:采用双写方案,新数据同时写入新旧表,历史数据异步迁移
- 数据校验:迁移完成后进行数据一致性校验,确保数据无误
- 灰度切换:逐步将流量切换到新表,出现问题可快速回滚
2. 备份与恢复
- 全量备份:每周进行一次全量备份,存储到异地备份中心
- 增量备份:每天进行增量备份,减少备份时间和存储空间
- 恢复演练:定期进行恢复演练,验证备份的有效性
3. 监控与告警
- 性能监控:监控数据库QPS、响应时间、慢查询等指标
- 容量监控:监控磁盘使用率、表数据量,提前预警扩容需求
- 异常告警:设置告警阈值,及时发现和处理异常情况
定时任务
订单超时处理
订单超时检测
自动取消
通知用户
↓
运输调度
路线优化
车辆分配
发车计划
↓
数据统计
日/周/月报表
KPI指标计算
异常数据检测
检索任务
数据索引
订单数据索引
网点数据索引
货物数据索引
↓
检索服务
全文检索
地理位置检索
多维度过滤
↓
结果处理
结果排序
聚合分析
缓存结果
技术栈
前端技术
Vue3 + TypeScript + Vite + Element Plus
后端技术
Spring Boot + Spring Cloud + MyBatis Plus
数据库
MySQL + Redis + ElasticSearch
部署
Docker + Kubernetes + Nginx
安全
Spring Security + JWT + OAuth2
监控
Prometheus + Grafana + ELK
评论
数据加载中
