2 期架构师训练营 - 大作业(一)
1 设计概述
同城快递系统是公司进军同城快递行业的战略性系统,承担着公司开拓新业务的业务目标。
1.1 功能概述
用户通过 app 发起快递下单请求并支付
快递员通过自己的 App 上报自己的地理位置,每 30 秒上报一次
系统收到快递请求后,向距离用户直线距离 5km 内的所有快递员发送通知
快递员需要进行抢单,第一个抢单的快递员得到配单,系统向其发送用户详细地址
快递员到用户处收取快递,并记录到系统中:已收件
快递员将快递送到目的地,并记录到系统中:已送达
用例图:
1.2 非功能约束
预计上线后三个月日单超过 1 万,一年日单超过 50 万。
查询性能⽬标:平均响应时间<100ms,95%响应时间<300ms,单机 TPS>500;
下单性能⽬标:平均响应时间<800ms,95%响应时间<1000ms,单机 TPS>50;
上报性能目标:平均响应实践<100ms,95%响应实践<200ms,单机 TPS>600;
抢单性能⽬标:平均响应时间<300ms,95%响应时间<500ms,单机 T PS>200;
系统核⼼功能可⽤性⽬标:>99.9%;
系统安全性⽬标:系统可拦截 XSS 、SQL 注入攻击,密码数据散列加密,客户端数据
HTTPS 加密,外部系统间通信对称加密;
数据持久化⽬标:>99.999%。
2 系统部署图与整体设计
2.1 系统部署图
部署说明:
图片存储和推送服务使用成熟的第三方 SaaS 服务,降低开发成本和维护成本
MySQL 使用一主二从并实现读写分离,一主用于数据写入和修改,一从用于对快递员/用户提供读服务,一从用于对内相关系统的读服务
微服务使用 Spring Cloud Alibaba 框架,每个微服务暂时都只部署两个节点
消息队列使用 RocketMQ,吞吐量大,可靠性高
Redis 除了用于缓存、分布式锁之外,也用于提供 GIS 服务
2.2 下单抢单场景活动图
2.3 下单抢单场景时序图
2.4 订单状态图
3 核心功能设计
3.1 抢单
快递员在抢单时使用 Redis 的 set 命令进行分布式加锁,避免并发问题。
3.2 快递员匹配
使用 Redis 记录快递员的地理位置信息,利用 Redis 的 GEO 功能获取快递员。
3.3 消息推送
支付成功之后发送广播信息,由推送微服务进行消费,调用第三方推送服务进行推送。
评论