1 / 57

淘宝在线交易数据演变

淘宝在线交易数据演变. 胡嘉川(牧劳) 2012-04-21. 主要内容. 一次淘宝购物之旅 交易业务和系统结构介绍 2003~2008 从 Mysql 到小型机 Oracle 2009 年交易库拆分为买家库和卖家库 2010 年交易卖家库的优化和买家库一拆二 2011 年交易卖家库从 Oracle 到 Mysql , 磁盘 SSD 2011 年交易买家库去小型机和 Oracle, 磁盘 FusionIO. 一次淘宝购物之旅. 一次淘宝购物之旅. 第一步:找到想买的宝贝. 一次淘宝购物之旅. 第二步:查看宝贝详情. 一次淘宝购物之旅.

gail-mullen
Download Presentation

淘宝在线交易数据演变

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 淘宝在线交易数据演变 胡嘉川(牧劳) 2012-04-21

  2. 主要内容 • 一次淘宝购物之旅 • 交易业务和系统结构介绍 • 2003~2008从Mysql到小型机Oracle • 2009年交易库拆分为买家库和卖家库 • 2010年交易卖家库的优化和买家库一拆二 • 2011年交易卖家库从Oracle到Mysql,磁盘SSD • 2011年交易买家库去小型机和Oracle,磁盘 FusionIO

  3. 一次淘宝购物之旅

  4. 一次淘宝购物之旅 • 第一步:找到想买的宝贝

  5. 一次淘宝购物之旅 • 第二步:查看宝贝详情

  6. 一次淘宝购物之旅 • 第三步:把想买的宝贝加入购物车

  7. 一次淘宝购物之旅 • 第四步:结算订单

  8. 一次淘宝购物之旅 • 第五步:付款

  9. 一次淘宝购物之旅 • 第六步:查看购买的宝贝

  10. 交易业务和系统结构介绍

  11. 淘宝交易数据库的组成结构 交易数据库 买家库1 买家库2 买家库3 买家库32 卖家库1 卖家库2 卖家库3 卖家库16 Hbase集群 Mysql + FusionIO Mysql + SSD 历史库

  12. 买家库的业务结构 买家数据库 已买到 交易流程 单条查询 下单 付款 确认收货 退款

  13. 卖家库的业务结构 卖家数据库 已卖出 Detail页交易查询 TOP导出订单

  14. 淘宝交易流程介绍 COD交易 卡易售 自动发货 分销交易 确认收货 酒店交易 商城家装 下单 付款 发货 机票交易 普通宝贝 直冲交易 商超交易

  15. 淘宝交易角色介绍 买家 卖家 下单 付款 确认收货 交易查询 发货 修改价格 交易查询

  16. 淘宝交易数据库的系统结构 写 买家库 读 交易服务系统 卖家库 消息中间件 交易复制系统

  17. 2003~2008从MYSQL到Oracle

  18. 2003年的数据库体系 …… Search Auction Member Apache Apache Apache Apache Mod_php4 Mod_php4 Mod_php4 Mod_php4 Pear DB Pear DB Pear DB Pear DB 读 读写 读 MySQL Master • MySQL Slave MySQL Slave 复制 复制

  19. 2003年到2008年数据库的演变 商品 Mysql Oracle,小型机 业务发展 垂直拆分 交易 用户 2008年交易日均达到200万订单

  20. 2009年交易库拆分为买家库和卖家库

  21. 2009年交易库概况 Oracle 交易主库 小型机 EMC 2009年日均交易达到600万订单 TOP导订单 交易写入 已买到查询 已卖出查询 宝贝详情

  22. 把卖家查询分离出去 各种卖家辅助工具 已卖出 TOP导出订单 累计售出数 Detail页 销售列表

  23. 如何拆分卖家库(2009年7月) 写交易,已买到 买家 买家单条查询交易 买家库 卖家单条查询交易和写交易 16个Oracle节点 卖家 按卖家查询交易 卖家库

  24. 如何迁移和实时复制订单数据 订单更改发Notify消息 卖家库 交易系统 订阅交易消息 实时更新卖家库数据 交易复制系统

  25. 卖家库拆分后所承担的业务结构 Detail页交易查询 卖家库备1 卖家库主库 TOP及其它卖家查询 已卖出查询 卖家库备2

  26. 卖家库拆分后的一些故障 卖家库1 卖家库2 卖家库3 变慢 卖家库3 卖家库4 HSF服务 前端请求

  27. 防止此问题采取的措施-流控

  28. 防止此问题采取的措施-监控 卖家主库监控 卖家备一监控 卖家备二监控

  29. 2010年交易卖家库的优化和买家库一拆二

  30. 卖家库的压力越来越大 卖家数据库 大卖家查询 各类卖家辅助工具 卖家主库 TOP订单导出 Detail订单查询 备2 备1

  31. 卖家库的优化-查询Tair化 累计售出Tair化 销售列表Tair化 卖家提醒Tair化

  32. 卖家查询Tair化原理 获取累计售出数和销售列表 Detail Tair Tair里没数据,到TP取 业务变更,实时更新Tair 交易复制系统 交易系统 Notify

  33. 买家库拆分方案准备-选型 一拆二 Oracle 小型机+EMC comm Comm备库 Oracle Comm2备库 comm2 一拆多 Oracle PC+EMC Oracle

  34. 买家拆分方案准备-业务模型 已买到查询 买家 交易流程 单条查询

  35. 买家拆分确定最终方案 一拆二 Comm(交易老主库) Comm备(原IC主) Comm(交易老备库) Comm2备(原IC备) 交易数据是冗余两份,不需要迁移数据 不使用TDDL,对DAO层暴露路由

  36. 买家拆分准备工作,订单ID路由 卖家ID后两位 订单ID 6323940234 79 64 Sequence 买家ID后两位 (1) 定位具体库 (2) 为保持简单老订单ID,直接查两次 (3) 不依赖路由表

  37. 2011年卖家库去O和买家库去IOE

  38. 卖家库继续只有一倍余量 卖家查询的IO瓶颈越来越大 Oracle的授权费用问题

  39. 卖家库的去O选型 KSearch OceanBase 卖家库 目标:解决磁盘IO瓶颈 Mysql + SSD

  40. 卖家库去O的详细步骤 1. 设定4倍容量,4倍性能余量目标 2. 收集接口访问数据,准备性能测试方案 3. 准备交易增量复制和全量导入 4. Beta卖家查询,观察日志 5. 全部切换到Mysql,添加监控

  41. 买家库去IOE前的准备-已买到的Tair化 已买到列表 订单详情

  42. 交易买家库扩展目标(2011年) 当前性能情况 极限性能情况 拆分后目标 集群QPS:7万/秒 集群QPS:14万/秒 集群QPS:42万/秒 集群TPS:3000/秒 集群TPS:6000/秒 集群TPS:19万/秒 交易买家库Oracle集群只有一倍余量 目标:4倍数据量下,支撑6倍现有系统压力

  43. 交易买家库去IOE硬件选型-Fusion IO IOPS性能很高 寿命较长 稳定性比SSD好 较SSD成本高

  44. 交易买家库去IOE硬件选型-SSD 相对FIO便宜不少 满足买家库性能要求 极端情况稳定性较FIO差 极端情况稳定性较FIO差

  45. 交易买家库去IOE硬件选型-EMC+PC Oracle结合很好,不丢数据 有4倍余量 成本过高,扩展性不好

  46. 交易买家库去IOE硬件选型-成本对比 当前买家Oracle主库成本:2200万RMB RAID:504万RMB 不做RAID:364万RMB RAID:294万RMB 1060万RMB

  47. 交易买家库去IOE最终硬件选定-FusionIO 稳定性好 性能最好,性价比高 硬件在发展,成本在降低 性能测试结果:MYSQL成为了性能瓶颈,FIO的极限远未达到 单台QPS:3.5W * 16 = 56万 单台TPS:1.2W * 16 = 19.2万

  48. 交易买家库去IOE-如何分库分表 分库分表目标 考虑 未来节点扩展 保持简单 考虑 4 倍 数据量 考虑 4 倍 性能 分32逻辑库, 16台服务器 1024张表,尽量只对核心表作分库分表 减少各表事务依赖,把其它业务放到杂表库

  49. 交易买家库去IOE-新订单ID路由准备 买家ID后3,4位 订单ID 6323940234 79 64 Sequence 买家ID后两位 (1) 定位具体库 (2) 添加路由Tair,通过Tair拿到具体的买家ID (3) 新订单ID直接通过ID里的路由信息定位库和表 (4)老订单ID会随着历史库迁移,访问慢慢变少

  50. 交易买家库去IOE-更新丢失如何补偿 交易系统 买家库 通过支付宝恢复淘宝交易 支付宝 对账系统

More Related