架构师训练营 - 大作业 - 通达物流系统架构设计文档
通达物流系统架构设计文档
极客大学架构师训练营第0期4班2组 – 严雪忠
2020.9
1 系统概述
1.1 系统目的
通达物流系统是一个解决同城用户与快递员快速寄件/取件、下单/抢单、支付/提现、综合查询的物流系统。
该系统通过对用户周围寄件资源(快递员)的合理调配,提高了社会资源的利用率,实现了优势快递资源的共享,以达到用户快速寄件的目的。
该系统是公司同城物流战略的核心系统,承担着公司主要的业务功能,是实现公司上市基石。
该系统后续还会支持后台管理,如订单、物流信息的汇总、生成业务报表、统计等功能。
1.2 系统使用范围
通达物流系统的使用(App)并无地理位置限制,全世界只要有因特网的地方都能登录、查看、浏览系统网页。
但寄件/取件功能使用范围目前为:中国大陆(港澳台除外)内的同一个城市,即用户与快递员必须在同一个城市内。
1.3 引用文档
Doc123456 - 通达物流系统需求文档.docx - To be created.
2 系统需求
2.1 功能需求
通达物流系统主要包含以下功能:
· 用户通过手机 App(iOS/Android) 发起快递下单请求并支付
· 快递员通过自己的手机App 上报自己的地理位置,每30秒上报一次
· 系统收到快递请求后,向距离用户直线距离5km内所有的快递员发送通知
· 快递员需要进行抢单,第一个抢单的快递员得到配单,系统向其发送用户详细地址
· 快递员到用户处收取快递,并记录到系统中:已收件
· 快递员将快递送达到目的地,并记录到系统中:已送达
系统使用者包括:用户、快递员、管理员。
2.2 非功能性需求
预计系统上线后三个月日单超过1万,一年日单超过50万。
综合业务、性能、安全、运维目标,系统需要满足以下非功能性需求:
1. 查询性能目标:
a. 平均响应时间<300ms, 95%响应时间<500ms,单机TPS >100
2. 下单性能目标:
a. 平均响应时间<800ms, 95%响应时间<1000ms,单机TPS >30
3. 抢单性能目标:
a. 平均响应时间<800ms, 95%响应时间<1000ms,单机TPS >30
4. 可用性:
a. 系统核心功能可用性目标 > 99.97%
5. 安全性:
a. 系统可拦截XSS、SQL 注入、CSRF攻击
b. 密码数据散列加密
c. 客户端数据 HTTPS 加密
d. 外部系统间通信对称加密
e. 防止恶意外挂 下单/抢单
6. 数据持久化目标:> 99.99999%
7. 可维护性:
a. 支持DevOps 自动化运维、持续集成/部署/交付、监控、报警等。
2.3 用例图
系统:提供下单、抢单、支付、提现、记录物流、查询订单/物流功能。
用户:普通用户、管理员(待开发)
快递员:普通快递员、王牌快递员(待开发)
系统用例图如下图 2-1:
3 系统概要设计
3.1 系统部署图
系统上线时预计部署 10台物理机(1台负载均衡,4台应用服务器,1台分布式缓存服务器,2台MySQL 主从服务器,1台文件服务器,1台消息队列服务器)。
系统部署图如图3-1所示:
3.2 系统框架图
系统包含如下模块:
· 订单:用户使用手机App 下单、寄快件,生成寄件订单; 快递员抢单、配单。
· 财务:用户使用手机 App 支付;快递员使用手机 App 提现。
· 物流:快递员抢到订单后,到用户处上门收取快递,登记物流信息(已收件),然后送快 递(运送中),送达后登记物流信息(已送达)。
地理位置:获取用户和快递员的实时地理位置信息。
· 地理位置:获取用户和快递员的实时地理位置信息。
3.3 下单场景
3.3.1 业务活动图
用户:打开手机 App, 在系统主界面/首页进行下单,填写快递信息,点击“下单”。
订单子系统:创建订单,并自动跳转到支付界面。
财务子系统:处理支付,支付成功后向订单子系统消息队列发送“已支付”消息。
3.3.2 时序图
用户登录后,发送请求下单消息到订单模块,订单模块根据创建订单信息,自动跳转到财务支付界面,用户完成支付,返回支付结果并发送新订单通知。如果支付失败(网络错误、余额不足等),用户也可以手动向财务模块发送请求支付消息。只有当支付成功后,系统才会发送新订单消息,通知快递员抢单。
3.4 抢单场景
3.4.1 业务活动图
快递员:打开手机 App, 在系统主界面/首页进行“听单”,收到抢单消息进行“抢单”。
订单子系统:监控已支付订单消息,当有新“已支付”订单消息进入时,查询快递员地理位置,发送抢单消息,通知快递员进行抢单,然后处理快递员抢单。
地理位置子系统:获取用户 5km 里范围内快递员的地理位置信息。
3.4.2 时序图
当用户支付完成后,订单模块接收到新订单通知,它会根据消息中的用户地址,向地理位置模块请求 5km 内的快递员列表,然后向快递员发送抢单消息。快递员收到抢单消息,进行抢单,订单模块处理抢单消息,返回抢单结果。
3.5 订单状态图
订单有6中状态,当用户输入完下单信息(用户/收件地址、手机号等),点击提交,订单状态变为”待支付“,用户支付完成,订单状态变为”已支付“,快递员抢单成功,订单状态变为”已配单“,快递员上门收件,订单状态变为”已收件“,快递员送达快递,订单状态变为“已送达”。
当订单处在“待支付”和“已支付”状态时,用户可以取消订单,订单状态变为“已取消”。
4 系统详细设计
4.1 下单场景
组件图、类图、类的时序图
4.2 抢单场景
组件图、类图、类的时序图
5 一些技术点
1. 寻找算法-系统收到新的快递请求后,如何快速寻找用户 5km 内的快递员,提醒他们抢单?
将快递员的实时位置缓存在 Redis?
版权声明: 本文为 InfoQ 作者【心在飞】的原创文章。
原文链接:【http://xie.infoq.cn/article/3f3f5db1960ec52bc07ed65dd】。文章转载请联系作者。
评论