homework1
通达同城快递系统架构设计
1. 设计概述
通达同城快递系统是一个负责通达公司同城快递业务管理的平台。
1.1 功能概述
系统主要功能包括用户下单、取消订单、查看订单,订单的创建、支付、更新和推送,快递员的位置更新、抢单、送件等,使⽤者主要是用户和快递员。
下面我们通过用例图来描述我们的 3 个主要的使用场景:快递员位置上报,下单/抢单,取消订单
1.2 非功能性约束
系统预计上线后三个月日单超过 1 万,一年日单超过 50 万。
查询性能⽬标:平均响应时间<300ms,95%响应时间<500ms,单机 TPS>100;
下单性能⽬标:平均响应时间<800ms,95%响应时间<1000ms,单机 TPS>30;
系统核⼼功能可⽤性⽬标:>99.97%;
数据持久化⽬标:>99.99999%。
2. 系统整体设计和部署图
2.1 系统部署图
为了达到更好的扩展性和高可靠性,整个系统将采用微服务集群架构。
用户和快递员请求通过负载均衡服务器分发给网关集群,网关集群再把请求路由给相应的应用服务。
各应用服务的微服务间采用消息队列进行异步通信。
数据存储使用 MySQL,MySQL 进行主从复制,实现读写分离。
订单管理微服务和订单查询微服务分开,实现数据读写分离
5. 快递员位置更新存入缓存服务器
订单状态更新现存入缓存,再存入数据库
7. 所有查询,先查缓存,再查数据库
整个系统的部署图如下:
2.2 下单场景子系统活动图
用户通过 app 下单
系统创建订单,提供支付链接
用户支付成功,系统更新订单状态为已支付,向距离用户直线距离 5km 内的所有快递员发送通知
快递员进行抢单
系统向第一个抢单的快递员发送用户详细地址
快递员到用户处收取快递,更新订单状态为配送中
快递员将快递送到目的地,更新订单状态为完成
2.3 下单抢单场景子系统时序图
从时序图,我们可以看到用户通过 APP 下单到达负载均衡服务器,负载均衡服务器把请求转发给网关。网关把请求路由给订单管理微服务,订单管理微服务缓存订单信息到缓存,保存订单信息到数据库,然后向支付微服务请求支付链接,支付微服务创建支付链接返回给订单管理微服务,订单管理微服务把支付链接提供给用户。用户向支付链接提交支付,支付微服务更新支付状态,发布支付成功消息到消息队列。订单管理微服务订阅了支付消息,于是收到了支付成功消息,更新订单状态,发布订单支付成功消息到消息队列。抢单微服务订阅了订单支付成功消息,于是收到了此消息,启动抢单处理,向快递员查询微服务查询里下单地点 5KM 内的快递员列表,快递员查询微服务返回列表,抢单微服务发布指定接收者为快递员列表,内容为订单信息的数据到消息队列。推送微服务订阅了此消息,于是,推送订单消息到指定快递员列表(也就是 5km 内的快递员)。快递员收到消息,进行抢单,抢单请求通过负载均衡、网关到达抢单微服务,抢单微服务接受第一个抢单的请求,拒绝后面的请求,发布指定接收者为第一个枪弹的快递员,内容为订单详细地址的消息到消息队列,推送服务订阅了此消息,于是向指定快递员(也就是第一个抢单的快递员)推送地址信息。后面就是快递员取件,送件,更新订单状态了。
2.4 订单状态图
订单有 9 种状态,初始状态是待支付,当支付完成转换为已支付,当抢单成功时,状态转换为已派送,当取件成功,状态转换为配送中,当送达目的地,状态转换为配送完成。支付超时,失效和退件是异常状态。
评论