TMS架构介绍 - TMS运输管理系统

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不可用时,降级为直接查询数据库
      • 当缓存失效时,使用异步加载策略,避免阻塞主线程
      • 当数据库负载过高时,启用限流和排队机制
  • 扩展性考虑
    • 支持水平扩展:当数据量增长时,可以添加更多的数据库实例
    • 支持垂直扩展:当单实例性能不足时,可以升级硬件配置
    • 支持跨区域部署:可以在不同区域部署数据库实例,提高访问速度
    • 支持多租户:可以为不同的客户或业务线提供独立的数据分片
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


评论
avatar
余一叶知秋尽
PengLine 是我在数字世界的笔迹。从 Java 的严谨到 AI 的灵动,我试图在两者之间勾画出属于自己的轨迹。
GitHub
公告
  • 文章持续更新中,有任何建议或意见,可发邮件、评论、留言,看到后会及时回复。
  • AI栏目:AIGC、Agent系统正在开发中,目前只展示部分静态页面,服务端功能尚未部署,敬请期待....
  • 工具栏目:若需要更多拓展功能,或有新工具需求,可随时提出,当竭尽所能实现,以供免费使用。
  • 暖心提示:夜晚时分可在右下角⚙️中点击🌙,切换“深色模式”,以防护眼睛。