美团到家商品库存系统演进之路
如果无法正常显示,请先停止浏览器的去广告插件。
1. 美团到家商品库存系统演进之路
美团交易系统平台
2. 个人介绍
宋彬,美团高级技术专家
负责美团到家商品&库存相关系统的建设
三高系统&平台化建设有一些思考与实践
北京理工大学
美团
同程艺龙
2013
2017
3. 目录
业务特性 & 系统现状
技术调研 & 架构设计
商
品
库
存
防超售 & 一致性保障
高可用 & 异地容灾
平台化的思考与实践
未来规划与展望
4. 商品库存 - 业务特性&系统现状
订单服务
商品管理服务
O2O业务,LBS电商
最终一致性
① 同步扣减库存
外卖&闪购
② 异步记录流水
建设
库存管理服务
蜂窝
品类有限
库存有限
+
防超售
设置库存
库存交易服务
同步 扣减库存
扣减库存异常
发送补偿消息
①
4000W 订单
支撑
④
补偿
消息
库存
MySQL
口罩抢购活动
③ 流水校验处理
库存流水
MySQL
③
②
binlog
4K 峰值TPS
异步
校验
回滚
记录流水
②
库存异步服务
库存流水记录
库存回滚
流水冲突处理
5. 商品库存 - 问题分析
订单服务
商品管理服务
最终一致性
业务新形态
① 同步扣减库存
② 异步记录流水
库存管理服务
设置库存
③ 流水校验处理
库存交易服务
同步 扣减库存
大促秒杀,常态化
扣减库存异常
发送补偿消息
B2C业务的探索,支持全国售卖
补偿
消息
库存
MySQL
binlog
库存流水
MySQL
异步
校验
回滚
记录流水
支撑
困难
系统能力
防超售 -> 最终一致性
单SKU库存扣减TPS=300
库存异步服务
库存流水记录
全城送,品类丰富,库存充足
库存回滚
流水冲突处理
6. 商品库存 - 目标
洪峰流量
业务目标
大促
秒杀
热点爆品
海量库存
准
快
下单快速准确
用户体验丝滑
热点商品,海量库存,防超售
单热点商品,万级TPS,tp999低于10ms
系统目标
稳 多级容灾(异地,同地域多机房,同机房多副本)
省 硬件成本低,研发成本低,运维成本低
7. 商品库存 - 技术调研&选型
典型方案
类型
Node1
原生MySQL AliSQL/MTSQL*
事务 支持 支持
性能 低 高
可用性 中 高(PAXOS/MGR)
指标
特点
高并发场景,锁资源竞争
、锁等待、上下文切换,
导致吞吐量远低于正常水
平
数据库服务端排队
合并热点key更新
减少事务内交互时长RTT
避免组提交等待
MTSQL*: MySQL 美团定制版内核,对标 AliSQL,预计2021年末
全面替换社区版本 MySQL,同时针对库存场景持续优化
consensus
Node3
Node2
• 计算存储一体,极致优
化,高性能,高可用
• 研发维护成本高(定制
化方案)
• 案例:ebay支付系统
库存扣减
Redis
库存管理
MySQL
•
•
•
•
高性能:Redis同步扣减
高可用:AP > CP
事务性:Lua脚本
最终一致
长期演进:MTSQL + 降级方案
8. 商品库存 - 系统架构
服务层
存储层
基础组件
库存查询 库存管理
批量查询 单个查询 库存设置 每日库存 库存规则
Cellar Cellar
从集群 主集群
Cellar Cellar
消息队列
东
MySQL
MySQL
库存交易
西
库存扣减 库存恢复 Redis Redis 西
Redis 北
东
双向同步
南
数据传输
MySQL
双向同步
MySQL
一致性保障
北
南
Redis
SET路由
定时任务
支撑层
异步服务
缓存异构
流水记录
流水校验
库存迁移
库存校验
库存修复
9. 商品库存 - 演进思路
聚焦单一
核心业务
防超售
核心能力建设
单热
点
高并
发
访问量增长
数据量增长
单元化
稳定性保障
异地
容灾
海量
库存
建设通用
业务能力
业务线变多
复杂度变高
平台化
多业务支撑
质量
好
任意
伸缩
效率
高
成本
低
10. 商品库存 - 防超售
服务约定
订单服务
商家库存管理
PC
APP
开放平台
最终
一致性
消单
提单
02 提单异常,异步回滚库存
冲突,回滚
库存管理服务
库存交易服务
前置防重
库存设置
Lua原子操作
01 提交订单,同步扣减库存
流水冲突检测
03 取消订单,异步回滚库存
核心要点
MQ
库存扣减
扣减成功
发送流水
库存流水
redis
库存设置BinLog
mysql
AOF库存流水
库存流水服务
原子性 Lua脚本操作Redis
一致性 流水校验,最终一致
高性能 Redis同步扣减
异步记录流水
批量
聚合
mysql
10
11. 商品库存 - 一致性保障
正向
逆向
商家库存设置
交易库存扣减
异构
主通道
DTS
Cellar
异构 一致性
备通道 保障
MySQL
问题描述
BCP
Redis
Redis
批量同步
MySQL
Cellar
原因分析 解决方案
binlog积压 一致性保障,延时检查&修复
数据传输服务(DTS)故障 双通道冗余
Cellar/Redis库存丢失 库存异构丢失 消息触发,重新加载
MySQL库存脏数据 Redis覆盖MySQL 设置库存,版本号校验
Cellar/Redis库存老旧
12. 商品库存 - 演进思路
聚焦单一
核心业务
防超售
核心能力建设
单热
点
高并
发
访问量增长
数据量增长
单元化
稳定性保障
异地
容灾
海量
库存
建设通用
业务能力
业务线变多
复杂度变高
平台化
多业务支撑
质量
好
任意
伸缩
效率
高
成本
低
13. 商品库存 - 高可用 - 单元化
单量/万
背景
5000
4000
3000
2000
1000
0
随着业务的快速增长,
到家核心系统需要更高的扩展性与容灾能力
时间/年
2017 2018 2019 2020
20个
问题
存储扩展:MySQL从库数量、主库连接数有限,Redis集群规模有限
资源限制:单机房容量限制,跨机房网络延迟与抖动导致稳定性问题
容灾问题:多机房架构,主从切换时间长,应对地区风险高
易扩展:任意伸缩
目标
方案
高可用:异地容灾
单元化(SET化)
14. 商品库存 - 高可用 - 单元化
核心交易场景
流量(用户&商家)
订单
Nginx + HLB
接入层 接入层 接入层 接入层
服务层 服务层 服务层 服务层
存储层 存储层 存储层 存储层
北部SET 西部SET 南部SET 东部SET
库存
核心
存储
Redis
互备容灾
互备容灾
MySQL
15. 商品库存 - 高可用 - 单元化
库存查询(就近部署)
服务层
路由层
同机房 <
同地域 <
跨地域
跨SET
同SET
DTS
DTS
JD
存储层
YP
Cellar Cellar
从集群 主集群
Cellar
单机房全量数据
Cellar
库存交易(SET部署)
库存管理(中心部署)
ZF
东
MySQL
MySQL
西
MQ
东
Redis
XR
南
MySQL
西
Redis 北
双向同步
双向同步
DTS
Redis
MySQL
北
MQ
南
Redis
单SET全量/2数据
秒级自动切换
30秒快速切换
30秒快速切换
16. 商品库存 - 高可用 - Redis容灾
冲突
流水校验
某分片主桶宕机
AOF日志丢失
新主桶数据不一致
库存修正
最终一致
MySQL
Redis库存 需扣减库存
Master
AOF
Slave
Redis
MySQL库存 状态
老主桶服务 10 1 9 准确
老主桶宕机,AOF日志丢失 9 - 9 准确
新主桶服务,数据不一致 10 2 8 超售
7 准确
库存流水处理服务
计算剩余库存10-2-1=7
双通道扣减日志,库存流水校验,剩余库存修正
主从分片
异步复制
Redis核心问题
Master
解决思路
库存不存在 异步触发事件
库存修复 读取原始库存
Slave
批量去重
某分片完全宕机
库存数据丢失
Redis
最终一致
MySQL
触发库存不存在事件,异步批量修复
17. 商品库存 - 演进思路
聚焦单一
核心业务
防超售
核心能力建设
单热
点
高并
发
访问量增长
数据量增长
单元化
稳定性保障
异地
容灾
海量
库存
建设通用
业务能力
业务线变多
复杂度变高
平台化
多业务支撑
质量
好
任意
伸缩
效率
高
成本
低
18. 商品库存 - 整体架构
库存查询
业务模式
业务能力
部署架构
支撑功能
库存管理
店仓一体
批量查询 单个查询
Cellar Cellar
从集群 主集群
Cellar Cellar
库存缓存 交易库存 店仓库存 组包库存
数据异构
库存交易
区域仓储
库存设置 每日库存 库存规则
东
MySQL
MySQL
西
库存扣减 库存回滚 Redis Redis 西
Redis 北
东
双向同步
南
MySQL
双向同步
MySQL
北
南
Redis
版本控制 流水补偿 流水校验 前置防重 库存核销 延时校验 异常重载
一致性保障
19. 商品库存 - 演进思路
聚焦单一
核心业务
防超售
核心能力建设
单热
点
高并
发
访问量增长
数据量增长
单元化
稳定性保障
异地
容灾
海量
库存
建设通用
业务能力
业务线变多
复杂度变高
平台化
多业务支撑
质量
好
任意
伸缩
效率
高
成本
低
20. 商品库存 - 平台化的思考与实践
背景
万物
到家
餐
饮
品类扩充
业务创新
甜
点
商
超
医
药
团好货
鲜
花
母
婴
跑腿帮买
生
鲜
…
其他
方案
实现
方式
小业务复用大业务流程
存储
大业务兼容小业务逻辑 各种if
产研效率低
问题
代码冗余
中间
件
代码
部署
else
回归量大
运维复杂
沟通频繁
多个业务逻辑耦合,交付质量存在极大隐患
质量风险高
提升产研质效 研发 测试 产品
支撑更多业务 外卖 闪购 医药
目标
团好货
创新业务
平台化建设
21. 商品库存 - 平台化的思考与实践 - 业务身份
如何区分不同业务?
引入业务身份
规则
前提
业务身份是什么?
管理业务个性化资产
流程
存储
如何定义业务身份?
正交 + 唯一
品类1
实现
到家业务身份
业务线
品类2
品类3
如:外卖 + 美食
22. 商品库存 - 平台化的思考与实践 - 整体方案
业务层
接入层
外卖
搜索
业务场景
闪购
医药
团好货
营销
广告
推荐
商品列表
商品详情
购物车
订单
提单页
创新业务 平台化管理中心
商家 业务身份
库存管理
服务层
业务配置
业务能力
支撑层
存储层
流程编排
库存查询
库存扣减
库存设置
基于业务身份的存储路由组件
逻辑隔离
存储路由配置
外卖 闪购 团好货 创新业务
MySQL MySQL MySQL MySQL
Redis Redis Redis Redis
Cellar Cellar Cellar Cellar
存储隔离
23. 基于业务身份的存储路由组件
一次开发
外卖
业务身份SDK
闪购
多方复用
动态路由
统一数据访问接口&注解
服务层
库存查询 库存管理 库存交易
数据源路由
封装公司基础
组件
路由层
业务身份存储路由组件
MySQLMultiClient
RedisMultiClient
mysql
mysql
存储层
redis
cellar
CellarMultiClient
SearchMultiClient
cellar redis
MafkaMultiClient
MultiClient
聚合多业务数据源
24. 商品库存 - 演进思路
聚焦单一
核心业务
防超售
核心能力建设
单热
点
高并
发
访问量增长
数据量增长
单元化
稳定性保障
异地
容灾
海量
库存
建设通用
业务能力
业务线变多
复杂度变高
平台化
多业务支撑
质量
好
任意
伸缩
效率
高
成本
低
25. 商品库存 - 未来规划与展望
业务可隔离
MTSQL
架构
平台
RedisRaft
业务自助式扩展
业务可视化
团队
欢迎优秀的你加入我们!
共建到家交易系统平台,帮助大家吃得更好,生活更好!
CODE A BETTER LIFE!
EAT BETTER, LIVE BETTER!
26. 招贤纳士,渴望优秀的你加入我们
始终坚持
庖丁解牛般的分析业务需求,构建出恰如其分的系统架构,设计出丝丝入扣的微观代码实现!
让我们心情愉悦的Coding~
美团交易系统平台 JAVA专家(商品&库存)
工作职责
1、负责商品中心业务的迭代与创新,打造海量商品在B端的高效管理与运营、在C端的高性能检索与浏览交易;
2、负责商品中心的稳定性建设,99.99%是最基本的目标,带领小伙伴完成应用层性能优化、中间件深度实践、底层存储升级;
3、负责商品中心库存服务的持续升级,打造店仓一体、区域仓储等多模式库存体系,具备防超售、防少售、抗秒杀等系统能力;
4、负责商品中心标品体系的建设,满足更多品类(餐饮,商超、药品、鲜花等)商家的高质量快捷上单诉求;
5、深度参与商品公共服务建设,打造业内领先的商品平台,具备业务可隔离、业务可配置、业务可扩展、业务可视化;
6、负责业内探索性技术在商品中心的实验与落地,包括单元化(SET化)、分布式数据库(TiDB)、MTSQL、RedisRaft等。
诱惑力
1、海量数据,可媲美头部电商平台的商品量级
2、大流量、高并发,午高峰QPS 60W+
3、高吞吐、低延迟,核心接口4个9耗时低于50ms
4、单热点商品库存扣减TPS不低于3万,TP999不高于50ms
5、屈指可数的每日订单均过千万的没有天花板的舞台
招聘:交易系统平台 JAVA 工程师
邮箱:songbin04@meituan.com
更多技术干货
欢迎关注“美团技术团队”
27.
28. 招聘:交易系统平台 JAVA 工程师
邮箱:songbin04@meituan.com
更多技术干货
欢迎关注“美团技术团队”