写点什么

大作业 1

用户头像
钟杰
关注
发布于: 2021 年 01 月 05 日

系统场景分析

产品需求


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

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

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

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

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

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

  • 说明:预计上线后三个月日单超过 1 万,一年日单超过 50 万

用例场景



系统设计目标

设计目标

  • 整体架构可弹性伸缩

  • 早期精简部署

  • 未来迁移到第三方云计算平台,尽量选取兼容云计算厂商的开源解决方案

系统部署和整体设计

系统整体部署模型


部署说明

  • CDN 加速图片、样式、脚本等静态资源访问速度

  • 负载均衡采用 Ngnix,后期可做 Ngnix 双击主备,并发量大时可以采用 LVS 部署

  • 网关服务器采用 Zuul

  • 微服务框架采用 Dubbo

  • 消息队列采用 ActiveMQ

  • 位置服务数据存储采用 Redis

  • 数据库采用 MySQL 并配置主从复制

下单抢单活动图


下单抢单时序图


订单状态图


系统关键算法

订单位置匹配算法

  • 早期,快递员少,订单位置采用全部遍历法,用取件地址经纬度和快递员最新经纬度,根据欧式距离计算公式计算直线距离,进行匹配

  • 中期,合并快递员位置,用经纬度小数点后两位做区域定位,先选定区域,后进行区域内快递员位置匹配

  • 后期,在区域定位基础上,根据最优路线匹配

抢单加锁算法

  • 早期 Redis 实现抢单加锁

  • 未来计划用 Zookeeper 实现分布式锁


用户头像

钟杰

关注

还未添加个人签名 2019.02.12 加入

还未添加个人简介

评论

发布
暂无评论
大作业1