写点什么

homework1

用户头像
Geek_xq
关注
发布于: 2021 年 03 月 02 日

通达同城快递系统架构设计

1. 设计概述

通达同城快递系统是一个负责通达公司同城快递业务管理的平台。

1.1 功能概述

系统主要功能包括用户下单、取消订单、查看订单,订单的创建、支付、更新和推送,快递员的位置更新、抢单、送件等,使⽤者主要是用户和快递员。

下面我们通过用例图来描述我们的 3 个主要的使用场景:快递员位置上报,下单/抢单,取消订单


1.2 非功能性约束

系统预计上线后三个月日单超过 1 万,一年日单超过 50 万。

  1. 查询性能⽬标:平均响应时间<300ms,95%响应时间<500ms,单机 TPS>100;

  2. 下单性能⽬标:平均响应时间<800ms,95%响应时间<1000ms,单机 TPS>30;

  3. 系统核⼼功能可⽤性⽬标:>99.97%;

  4. 数据持久化⽬标:>99.99999%。

2. 系统整体设计和部署图

2.1 系统部署图

为了达到更好的扩展性和高可靠性,整个系统将采用微服务集群架构。

  1. 用户和快递员请求通过负载均衡服务器分发给网关集群,网关集群再把请求路由给相应的应用服务。

  2. 各应用服务的微服务间采用消息队列进行异步通信。

  3. 数据存储使用 MySQL,MySQL 进行主从复制,实现读写分离。

  4. 订单管理微服务和订单查询微服务分开,实现数据读写分离

5. 快递员位置更新存入缓存服务器

  1. 订单状态更新现存入缓存,再存入数据库

7. 所有查询,先查缓存,再查数据库

整个系统的部署图如下:

2.2 下单场景子系统活动图


用户通过 app 下单

系统创建订单,提供支付链接

用户支付成功,系统更新订单状态为已支付,向距离用户直线距离 5km 内的所有快递员发送通知

快递员进行抢单

系统向第一个抢单的快递员发送用户详细地址

快递员到用户处收取快递,更新订单状态为配送中

快递员将快递送到目的地,更新订单状态为完成

2.3 下单抢单场景子系统时序图

从时序图,我们可以看到用户通过 APP 下单到达负载均衡服务器,负载均衡服务器把请求转发给网关。网关把请求路由给订单管理微服务,订单管理微服务缓存订单信息到缓存,保存订单信息到数据库,然后向支付微服务请求支付链接,支付微服务创建支付链接返回给订单管理微服务,订单管理微服务把支付链接提供给用户。用户向支付链接提交支付,支付微服务更新支付状态,发布支付成功消息到消息队列。订单管理微服务订阅了支付消息,于是收到了支付成功消息,更新订单状态,发布订单支付成功消息到消息队列。抢单微服务订阅了订单支付成功消息,于是收到了此消息,启动抢单处理,向快递员查询微服务查询里下单地点 5KM 内的快递员列表,快递员查询微服务返回列表,抢单微服务发布指定接收者为快递员列表,内容为订单信息的数据到消息队列。推送微服务订阅了此消息,于是,推送订单消息到指定快递员列表(也就是 5km 内的快递员)。快递员收到消息,进行抢单,抢单请求通过负载均衡、网关到达抢单微服务,抢单微服务接受第一个抢单的请求,拒绝后面的请求,发布指定接收者为第一个枪弹的快递员,内容为订单详细地址的消息到消息队列,推送服务订阅了此消息,于是向指定快递员(也就是第一个抢单的快递员)推送地址信息。后面就是快递员取件,送件,更新订单状态了。

2.4 订单状态图


订单有 9 种状态,初始状态是待支付,当支付完成转换为已支付,当抢单成功时,状态转换为已派送,当取件成功,状态转换为配送中,当送达目的地,状态转换为配送完成。支付超时,失效和退件是异常状态。


用户头像

Geek_xq

关注

还未添加个人签名 2020.10.15 加入

还未添加个人简介

评论

发布
暂无评论
homework1