互联网公司技术架构资料.淘宝.数据魔方系统架构.pdf

  • 文件大小: 1.61MB
  • 文件类型: pdf
  • 上传日期: 2025-08-17
  • 下载次数: 0

概要信息:

淘宝数据魔方的系统架构 
殷琳君(长林) 

Agenda 
□ 数据产品总体架构 
□ 分布式MySQL集群 
□ NoSQL存储与计算 
□ 统一的数据中间层 
□ 通用数据报表框架 
 
 
每天的数据 
□ 淘宝主站: 
• 30亿店铺、宝贝浏览 
• 千万量级交易笔数 
□ 数据产品: 
• 60G统计汇总结果 
• 千万量级数据查询请求 
海量数据带来的挑战 
□ 计算 
□ 存储 
□ 读写 
 
架构总览 
MyFOX Prom 
存
储 
层 
Hadoop集群 
计
算
层 
实时流数据 
数据中间层 / glider 
查
询 
层 
数据魔方 淘宝指数 开放API 产
品 
DataX / TimeTunnel 
主站备库 RAC 主站日志 
数
据
源 
分布式MySQL集群—MyFOX 
需求: 
□ SQL查询 
□ 海量存储 
□ 可横向扩展 
□ 对应用透明 
□ 兼顾性能 
分布式MySQL集群—MyFOX 
□ 分库分表 
• 基于业务特点 
□ 透明的中间层(MyFOX) 
• 查询代理 
• 数据装载 
• 集群管理 
云梯 APP 
MySQL 
集群 
数据装载 数据查询 
MyFOX 
MyFOX—分片规则 
□ 冗余复制 
• 小表 
• 访问频繁 
• JOIN 
□ 条目切割 
• 按路由字段的值,每N行切片 
• 路由字段是一级索引 
• 分散压力、并行查询 
示例:条目切割 
□ 切片 
• 阈值(200W) 
• 上浮动(5%) 
□ 装桶 
• 一个桶装满再开新桶 
• “桶”即实际的物理表 
thedate=20100816, tid=11^A2090000 
thedate=20100816, tid=12^A2120000 
thedate=20100816, tid=13^A760000 
thedate=20100816, tid=14^A289 
thedate=20100816, tid=11^A2090000 
thedate=20100816, tid=12^A2000000 
thedate=20100816, tid=12^A120000 
thedate=20100816, tid=13^A760000 
thedate=20100816, tid=14^A289 
thedate=20100816, tid=11^A2090000 
thedate=20100816, tid=14^A289 
thedate=20100816, tid=12^A2000000 
thedate=20100816, tid=13^A760000 
thedate=20100816, tid=12^A120000 
MyFOX—数据查询 
SELECT IF(INSTR(f.keyword,' ') > 0, UPPER(TRIM(f.keyword)), 
CONCAT(b.brand_name,' ',UPPER(TRIM(f.keyword)))) AS f0,  
 SUM(f.search_num) AS f1, 
 SUM(f.uv) AS f2,  
 ROUND(SUM(f.search_num) / SUM(f.uv), 2) AS f3, 
 AVG(f.uv) AS f4  
FROM f  
INNER JOIN dim_brand b ON f.keyword_brand_id = b.brand_id  
WHERE f.keyword_type_id = 1 AND f.keyword != ''  
 AND keyword_cat_id IN ('50002535')  
 AND thedate <= '2011-03-10'  
 AND thedate >= '2011-03-08'  
GROUP BY f0  
ORDER BY SUM(f.search_num) DESC LIMIT 0, 1500 
MyFOX—数据查询 
取分片数据(异步并发) 
取
分
片 
结果合并(表达式求值) 
合
并
计
算 
缓存 
路
由 
SQL解析 
语义理解 
查询路由 字段改写 
分片SQL 计算规则 
APC 
缓存 
X 
MyFOX路由层—语义理解 
WHERE thedate <= '2011-03-10'  
 AND thedate > '2011-03-07' 
 AND toprank_id IN (2, 3) 
2 3 
2011-03-08 
{"toprank_id":"2", 
"thedate":"2011-03-08"} 
{"toprank_id":“3", 
"thedate":"2011-03-08"} 
2011-03-09 
{"toprank_id":"2", 
"thedate":"2011-03-09"} 
{"toprank_id":“3", 
"thedate":"2011-03-09"} 
2011-03-10 
{"toprank_id":"2", 
"thedate":"2011-03-10"} 
{"toprank_id":“3", 
"thedate":"2011-03-10"} 
MyFOX路由层—字段改写 
SELECT a AS f0, 
 SUM(f.search_num) AS f1, 
 SUM(f.uv) AS f2,  
 ROUND(SUM(f.search_num) / SUM(f.uv), 2) AS f3, 
 AVG(f.uv) AS f4  
• AVG(a) 
• 1 + SUM(a) 
• SELECT  a  FROM  …  ORDER  BY  b 
• 重复查询列 
MyFOX缓存 
 
结果合并 
取分片数据 
查
询
层 
计
算
层 
缓存 
缓存 
• 缓存哪部分数据? 
¾最终结果 
¾分片数据 
MyFOX—数据装载 
MyFOX 
热节点(MySQL) 
15k SAS盘,300G * 12,raid10 
成本:4.5W / T 
冷节点(MySQL) 
7.2k SATA盘,1T * 12,raid10 
成本:1.6W / T 
路由表 
30天无访问的冷数据 
新
增
热
数
据
 
这个问题能解决吗 
Prom—应用场景 
□ 数据量很大 
□ 无法穷举所有可能的查询条件组合  
□ 大量穷举出来的条件组合无意义 
 
Prom—算法 
13寸、商务定位的笔记本昨天的交易金额是多少? 
 
1、查询13寸笔记本昨天的交易ID 
2、查询商务定位笔记本昨天的交易ID 
3、求交易ID交集 
4、根据3中的交易ID查询明细数据,按照金额进行汇总 
 
Prom—第一版Redis 
□ Redis 
• Key-Value的内存数据库 
• 支持List、Set等数据结构 
□ 瓶颈 
• 大量随机读取明细 
• 内存受限,数据持久化问题 
 
Prom—第二版HBase 
□ 定制化的存储 
• HBase建立在hdfs之上,和Hadoop无缝集成 
• 可水平扩展 
□ 实时计算 
• 百万记录 
Prom—HBase表设计  
Row-key 列族1 
(交易ID,索引) 
列族2 
(交易明细) 
笔记本尺寸:
13寸 
1,2,4,9 {58, 600,35}, {72,999,14}, {92,103,77}, {36,702,101} 
笔记本定位:
商务定位 
1,4,7 {58, 600,35}, {92,103,77}, {85, 442, 152} 
Prom—HBase实时计算 
求SUM(alipay) 
属性 属性值 
笔记本尺寸 13寸 
笔记本定位 商务定位 
节点1 1, 2, 3, 4, 5, 6, 7, 8, 9 
节点2 1, 2, 3, 4, 5, 6, 7 
查索引 
求
交
集
 
汇总计算 
写入缓存 
节点2 1,       4 
本地SUM运算(Hbase扩展) 
Prom—小结 
□ 历史数据的实时计算 
□ 通用性强,支持sum, count, avg, group by, sort 
□ 空间换时间 
• 变大量随机读为顺序读 
• 避免明细数据网络传输 
SQL与NoSQL 
□ 互为补充,适用场景不同 
□ SQL 
□ 应用开发更简单 
□ 支持跨行跨表事务 
□ 运维更成熟 
□ NoSQL 
□ 水平扩展性更好 
□ 更适合解决海量数据存储与计算 
统一的数据中间层—Glider 
□ 统一数据出口 
• 类SQL 
• HTTP REST 
• JSON返回 
□ 前后端解耦 
□ 数据缓存管理 
Glider架构 
Dispatcher 
Controller 配置解析 请求解析 
一级缓存 
action 
MyFOX Prom 
二级缓存 
datasource 
JOIN UNION 
filter 
glider 
Glider缓存管理 
前端产品 
action cache 
data 
datasource cache 
URL请求,nocache? 
nocache? 
nocache? ttl 
ttl, http header 
etag, http header 
Glider—小结 
□ 用中间层隔离前后端 
• 底层架构对前端透明 
• 水平可扩展性 
□ 缓存是把双刃剑 
• 降低后端存储压力 
• 数据一致性问题 
通用数据报表框架—Cubex 
□ 通过配置生成报表,快速开发  
□ 与组件化、事件驱动的JS框架集成 
• 基础服务封装:http, event 
• 可复用的组件库 
• 统一的组件生命周期管理,易于维护 
前端JS框架 
 
回顾 
MySQL HBase 
存
储 
层 
Hadoop集群 
计
算
层 
实时流数据 
数据中间层 
查
询 
层 
数据魔方 淘宝指数 开放API 产
品 
数据传输 
用户、店铺、商品库 收藏夹 日志 
数
据
源 
交易表 …… 
谢谢!

缩略图:

  • 缩略图1
  • 缩略图2
  • 缩略图3
  • 缩略图4
  • 缩略图5
当前页面二维码

广告: