写点什么

2 期架构师训练营 - 大作业(一)

用户头像
Vicente
关注
发布于: 2021 年 02 月 06 日

1 设计概述

同城快递系统是公司进军同城快递行业的战略性系统,承担着公司开拓新业务的业务目标。

1.1 功能概述

  • 用户通过 app 发起快递下单请求并支付

  • 快递员通过自己的 App 上报自己的地理位置,每 30 秒上报一次

  • 系统收到快递请求后,向距离用户直线距离 5km 内的所有快递员发送通知

  • 快递员需要进行抢单,第一个抢单的快递员得到配单,系统向其发送用户详细地址

  • 快递员到用户处收取快递,并记录到系统中:已收件

  • 快递员将快递送到目的地,并记录到系统中:已送达

用例图:

1.2 非功能约束

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

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

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

  3. 上报性能目标:平均响应实践<100ms,95%响应实践<200ms,单机 TPS>600;

  4. 抢单性能⽬标:平均响应时间<300ms,95%响应时间<500ms,单机 T PS>200;

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

  6. 系统安全性⽬标:系统可拦截 XSS 、SQL 注入攻击,密码数据散列加密,客户端数据

HTTPS 加密,外部系统间通信对称加密;

  1. 数据持久化⽬标:>99.999%。

2 系统部署图与整体设计

2.1 系统部署图


部署说明:

  1. 图片存储和推送服务使用成熟的第三方 SaaS 服务,降低开发成本和维护成本

  2. MySQL 使用一主二从并实现读写分离,一主用于数据写入和修改,一从用于对快递员/用户提供读服务,一从用于对内相关系统的读服务

  3. 微服务使用 Spring Cloud Alibaba 框架,每个微服务暂时都只部署两个节点

  4. 消息队列使用 RocketMQ,吞吐量大,可靠性高

  5. Redis 除了用于缓存、分布式锁之外,也用于提供 GIS 服务

2.2 下单抢单场景活动图

2.3 下单抢单场景时序图

2.4 订单状态图

3 核心功能设计

3.1 抢单

快递员在抢单时使用 Redis 的 set 命令进行分布式加锁,避免并发问题。

3.2 快递员匹配

使用 Redis 记录快递员的地理位置信息,利用 Redis 的 GEO 功能获取快递员。

3.3 消息推送

支付成功之后发送广播信息,由推送微服务进行消费,调用第三方推送服务进行推送。


用户头像

Vicente

关注

还未添加个人签名 2008.09.18 加入

功不唐捐,玉汝于成

评论

发布
暂无评论
2 期架构师训练营 - 大作业(一)