大作业 1
系统场景分析
产品需求
用户通过 app 发起快递下单请求并支付
快递员通过自己的 App 上报自己的地理位置,每 30 秒上报一次
系统收到快递请求后,向距离用户直线距离 5km 内的所有快递员发送通知
快递员需要进行抢单,第一个抢单的快递员得到配单,系统向其发送用户详细地址
快递员到用户处收取快递,并记录到系统中:已收件
快递员将快递送到目的地,并记录到系统中:已送达
说明:预计上线后三个月日单超过 1 万,一年日单超过 50 万
用例场景
系统设计目标
设计目标
整体架构可弹性伸缩
早期精简部署
未来迁移到第三方云计算平台,尽量选取兼容云计算厂商的开源解决方案
系统部署和整体设计
系统整体部署模型
部署说明
CDN 加速图片、样式、脚本等静态资源访问速度
负载均衡采用 Ngnix,后期可做 Ngnix 双击主备,并发量大时可以采用 LVS 部署
网关服务器采用 Zuul
微服务框架采用 Dubbo
消息队列采用 ActiveMQ
位置服务数据存储采用 Redis
数据库采用 MySQL 并配置主从复制
下单抢单活动图
下单抢单时序图
订单状态图
系统关键算法
订单位置匹配算法
早期,快递员少,订单位置采用全部遍历法,用取件地址经纬度和快递员最新经纬度,根据欧式距离计算公式计算直线距离,进行匹配
中期,合并快递员位置,用经纬度小数点后两位做区域定位,先选定区域,后进行区域内快递员位置匹配
后期,在区域定位基础上,根据最优路线匹配
抢单加锁算法
早期 Redis 实现抢单加锁
未来计划用 Zookeeper 实现分布式锁
评论