物流行业微信小程序架构实战
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C
1、避免大而全,功能拆分
2、由易到难,逐步细化
3、微服务架构
会员服务和用户等级
级别 展示
级别 变更
核心功 能点
级别 特权
定期 发券
会员服务
用户等级服务
定时任务 消息队列 延时消息
更新用户等级
如何解决高并发场 景下数据不一致的 情况? 双缓存清除法
商品服务-场景
A
1、读多写少
B
2、商品不可变
58速运微信小程序架构实战
目 录
58速运简介
小程序的意义
小程序架构实战
总结
Baidu Nhomakorabea
A
B
C
D
覆盖中国及东南亚地区的同城货运平台
100个驻点城市,100万注册司机,累计服务货运用户过亿次
2018年
2014年
服务上线
2015年
2016年
平均日订单突破20W
2017年
速运2.0
企业服务上线
与GOGOVAN合并
速运模式
uid%8
如何解决订单id查询?
基因法
db0 db1 db2
订单服务
基因法:
uid%dbcount 分库基因
订单id生成
40bit时间
9bit机器
9bit分库基因
5bit序号
如何找所在库:(orderId >> 5)&(-1L ^ (-1L << dbBits))
订单服务
web
复杂查询:使用es解决
时间维度?
优点:
进行中直接查最新库(时间最新)
缺点:
如何确定时间维度? 提前建好库?动态申请? 列表查询全部跨库
订单服务
如何确定分库方案?
水平拆分? 优点:
横向扩展方便
缺点:
如何解决跨库查询 横向扩展?
订单服务
场景分析: 85%的查询根据订单id 10%的查询根据用户id 4%的查询根据司机id 1%的后台复杂查询
D B -to o l 访 问 表 2
traceid: u n i q u e _ i d sp a n I d : 0.1.1. 3"
3、数据采集-flume
Cache
DB
总结
1、准确的理解需求很重要 2、对需求进行拆分、由简单到复杂进行拆分 3、根据业务需求进行合适的技术选型 4、任何脱离业务的架构设计都是耍流氓 5、监控、监控、监控。重要的事情说三遍
3、实时性要求高
司机GPS服务
1、mysql压力大
2、缓存无法搜索
3、如何提高处理效率
司机GPS服务
1、异步多线程 2、超时丢弃 3、批量入库 4、ES存储
订单服务现状
A 1、老订单由于业务发 展已经不适用 B 2、老订单按前台业务 分表,后台单表 C 3、前后台采用canal方 式同步
D
4、日增40w数据
s p a n I d : 0. 1
s e r v i c eB Pr ox y
spanId: 0.2
s e r v i c eC Pr oxy
spanId: 0.3
技术点 1、全局唯一的traceid 2、spanId描述调用层级
机器2
traceid:"unique_id spanId: 0.1"
C
3、限购
D
4、库存控制
商品服务
如何保证商品服务稳定? 商品及库存的缓存时效性怎么保证? 某些场景下,库存是否会影响整体性能? 商品服务
商品服务
web
1、可变数据隔离 2、缓存 3、CAS乐观锁
商品服务
库存服务
db
cache
司机GPS服务
PART1 PART2 PART3
1、写多读少 2、请求量大
THANK YOU!
Ser v i c eA
traceid: u n i q u e _ i d s p a n I d : 0.1.1"
Cac he-Cl i ent
traceid: u n i q u e _ i d s p a n I d : 0.1.1. 1"
D B -to o l 访 问 表 1
traceid: u n i q u e _ i d s p a n I d : 0.1.1. 2"
E
5、前后台订单服务、 订单es服务…
订单服务
1、统一订单服务
2、采用分库实现
订单服务
时间维度
订单服务
水平拆库拆表
订单服务
2018
2017 …
DB1 DBEXT1
DB2 DBEXT2
DB3 DBEXT3
订单服务-场景
1、用户订单列表、司机订单列表
2、抢单、订单详情
3、后台复杂查询
订单服务
如何确定分库方案?
监控平台
Dtrack
调 用 链
Dtrack调用链
1、全局跟踪
2、异常报警 3、清晰的调用结构
4、整体效果监测
Dtrack调用链
机器I
w e b - a pp l i c at i o n
traceid: u n i q u e _ i d spanId: 0
s e r v i c eAPr o xy
订单服务
订单id%dbcount 分库?
orderid%8
如何解决列表查询?
uid uid1 uid1 orderid orderid1 orderid2 orderid3
db0
db1
db2
uid1
uid2
uid2
orderid4
orderid5
索 引 表
订单服务
用户id%dbcount 分库?
为什么要做微信小程序,意义是什么?
什么是速运2.0
1
去中心化
2
新方向探索
现有架构
接入层 android
ios
小程 H5
序
新实现
服务层
司机端服务
用户端服务
订单服务
派单服务
数据层
DB
cache
ES
小程序功能
A B C
1、商品售卖
2、等级特权
3、收藏司机
D
E
F
4、自主接单
5、推广码
...
思路
A
B
service
db1
db2
es1
es2
订单服务
用户维度分库
订单id使用snowflake算法生成
订单中记录分库因子
复杂查询使用ES
订单服务
老旧服务的兼容性: 双写 读新,不存在读老 历史数据迁移
推送服务改造
新增推送模式 1、一对一推送 2、一对多推送
总 体 架 构 图
服务治理
1、动态的机器管理 2、流量监控 3、访问耗时 4、抛弃量监控