通达快递产品架构设计
1、设计概要
通达快递系统是一个同城快递业务系统,是公司进军物流快递行业战略的核心系统。
1.1、功能概述
用户通过 app 发起快递下单请求并支付
快递员通过自己的 App 上报自己的地理位置,每 30 秒上报一次
系统收到快递请求后,向距离用户直线距离 5km 内的所有快递员发送通知
快递员需要进行抢单,第一个抢单的快递员得到配单,系统向其发送用户详细地址
快递员到用户处收取快递,并记录到系统中:已收件
快递员将快递送到目的地,并记录到系统中:已送达
1.2、功能用例图

1.3、非功能约束
预计上线后三个月日单超过 1 万,一年日单超过 50 万。
2、系统部署图与整体设计
2.1、系统部署图

系统采用微服务架构,核心业务模块分为:
用户服务:主要负责用户是注册、登录等功能
支付服务:主要负责用户订单支付、退款等功能
订单服务:主要负责用户下单、抢单、查询订单等功能
快递员服务:快递员注册、登录等功能
派单服务:匹配快递员、推送订单等功能
数据库采用 MySql 主从复制架构模式
派单采用异步消息的架构模式
用户和业务员信息属于热点数据,采用分布式缓存进行存储
2.2、下单抢单场景的时序图

2.3、下单抢单场景的活动图

2.4、订单状态图

2.5、核心算法
抢单算法:初期用户量不大的情况下使用 redis 的 SETNX 锁来实现抢单,如果用户量变大性能存在瓶颈则改用 zookeeper
快递员距离计算:根据用户取件地址的经纬度与所有快递员的经纬度计算距离,少于 5km 的快递员符合条件
评论