大数据时代feed架构 (archsummit beijing 2014)

59
数据时代 feed架构 新浪微博 @TimYang

Upload: tim-y

Post on 12-Jul-2015

655 views

Category:

Technology


14 download

TRANSCRIPT

Page 1: 大数据时代feed架构 (ArchSummit Beijing 2014)

⼤大数据时代 feed架构新浪微博 @TimYang

Page 2: 大数据时代feed架构 (ArchSummit Beijing 2014)

中间层

存储层

当前架构

MySQL HBase Redis(存储) 分布式⽂文件

Cache-Service !

MC

MQ(mcq)

FirehoseRedisCon

fig

Serv

ice

RPC Motan

Trace体系超⻓长列表

平台 服务层

feed 算法

微博 内容 关系 评论 短链⽤用户

SLA体系

平台 接⼊入层 内⺴⽹网核⼼心池 内⺴⽹网池 公⺴⽹网池

私信

端 Web 客户端 开放平台

计数服务TouchStone

算法 策略

Page 3: 大数据时代feed架构 (ArchSummit Beijing 2014)

中间层

存储层

当前架构

MySQL HBase Redis(存储) 分布式⽂文件

Cache-Service !

MC

MQ(mcq)

FirehoseRedisCon

fig

Serv

ice

RPC Motan

Trace体系超⻓长列表

平台 服务层

feed 算法

微博 内容 关系 评论 短链⽤用户

SLA体系

平台 接⼊入层 内⺴⽹网核⼼心池 内⺴⽹网池 公⺴⽹网池

私信

端 Web 客户端 开放平台

计数服务TouchStone

算法 策略

每天数百亿调⽤用

Page 4: 大数据时代feed架构 (ArchSummit Beijing 2014)

中间层

存储层

当前架构

MySQL HBase Redis(存储) 分布式⽂文件

Cache-Service !

MC

MQ(mcq)

FirehoseRedisCon

fig

Serv

ice

RPC Motan

Trace体系超⻓长列表

平台 服务层

feed 算法

微博 内容 关系 评论 短链⽤用户

SLA体系

平台 接⼊入层 内⺴⽹网核⼼心池 内⺴⽹网池 公⺴⽹网池

私信

端 Web 客户端 开放平台

计数服务TouchStone

算法 策略

服务化 !!!!

每天数百亿调⽤用

Page 5: 大数据时代feed架构 (ArchSummit Beijing 2014)

中间层

存储层

当前架构

MySQL HBase Redis(存储) 分布式⽂文件

Cache-Service !

MC

MQ(mcq)

FirehoseRedisCon

fig

Serv

ice

RPC Motan

Trace体系超⻓长列表

平台 服务层

feed 算法

微博 内容 关系 评论 短链⽤用户

SLA体系

平台 接⼊入层 内⺴⽹网核⼼心池 内⺴⽹网池 公⺴⽹网池

私信

端 Web 客户端 开放平台

计数服务TouchStone

算法 策略

服务化 !!!!

性能 !!!!

每天数百亿调⽤用

Page 6: 大数据时代feed架构 (ArchSummit Beijing 2014)

扩展性 !!!!

中间层

存储层

当前架构

MySQL HBase Redis(存储) 分布式⽂文件

Cache-Service !

MC

MQ(mcq)

FirehoseRedisCon

fig

Serv

ice

RPC Motan

Trace体系超⻓长列表

平台 服务层

feed 算法

微博 内容 关系 评论 短链⽤用户

SLA体系

平台 接⼊入层 内⺴⽹网核⼼心池 内⺴⽹网池 公⺴⽹网池

私信

端 Web 客户端 开放平台

计数服务TouchStone

算法 策略

服务化 !!!!

性能 !!!!

每天数百亿调⽤用

Page 7: 大数据时代feed架构 (ArchSummit Beijing 2014)

扩展性 !!!!

中间层

存储层

当前架构

MySQL HBase Redis(存储) 分布式⽂文件

Cache-Service !

MC

MQ(mcq)

FirehoseRedisCon

fig

Serv

ice

RPC Motan

Trace体系超⻓长列表

平台 服务层

feed 算法

微博 内容 关系 评论 短链⽤用户

SLA体系

平台 接⼊入层 内⺴⽹网核⼼心池 内⺴⽹网池 公⺴⽹网池

私信

端 Web 客户端 开放平台

计数服务TouchStone

算法 策略

可⽤用性 !!!!

服务化 !!!!

性能 !!!!

每天数百亿调⽤用

Page 8: 大数据时代feed架构 (ArchSummit Beijing 2014)

扩展性 !!!!

中间层

实时数据流 !!!!

存储层

当前架构

MySQL HBase Redis(存储) 分布式⽂文件

Cache-Service !

MC

MQ(mcq)

FirehoseRedisCon

fig

Serv

ice

RPC Motan

Trace体系超⻓长列表

平台 服务层

feed 算法

微博 内容 关系 评论 短链⽤用户

SLA体系

平台 接⼊入层 内⺴⽹网核⼼心池 内⺴⽹网池 公⺴⽹网池

私信

端 Web 客户端 开放平台

计数服务TouchStone

算法 策略

可⽤用性 !!!!

服务化 !!!!

性能 !!!!

每天数百亿调⽤用

Page 9: 大数据时代feed架构 (ArchSummit Beijing 2014)

架构特点✓ 解决了数据规模⼤大且超⻓长LIST访问的问题 ✓ MySQL sharding by time range

✓ 解决了数据存储可扩展的问题 ✓ 2~3 years

✓ 解决了百万QPS访问的问题 ✓Cache replication及分级

✓ 解决了可⽤用性及错误隔离问题 ✓ by SLA体系,核⼼心功能 99.99%+

Page 10: 大数据时代feed架构 (ArchSummit Beijing 2014)

读写⽐比例⾼高 10:1读写⽐比以上

冷热数据明显 80%访问的是当天内的数据

存在热点问题 峰值写⼊入80万/分钟!(2014元旦)

⾼高访问量 每天超过7000万⽤用户访问!(2014Q3数据)

Page 11: 大数据时代feed架构 (ArchSummit Beijing 2014)

⼤大数据环境的性能解决之道 — 缓存

读写⽐比例⾼高 10:1读写⽐比以上

冷热数据明显 80%访问的是当天内的数据

存在热点问题 峰值写⼊入80万/分钟!(2014元旦)

⾼高访问量 每天超过7000万⽤用户访问!(2014Q3数据)

Page 12: 大数据时代feed架构 (ArchSummit Beijing 2014)

Service

L1/LRUPool 1

L1/LRUPool 2

L1/LRUPool 3

MasterPool

SlavePool

⼤大数据环境的 性能解决之道

Page 13: 大数据时代feed架构 (ArchSummit Beijing 2014)

Service

L1/LRUPool 1

L1/LRUPool 2

L1/LRUPool 3

MasterPool

SlavePool

⼤大数据环境的 性能解决之道

主数据

Page 14: 大数据时代feed架构 (ArchSummit Beijing 2014)

Service

L1/LRUPool 1

L1/LRUPool 2

L1/LRUPool 3

MasterPool

SlavePool

⼤大数据环境的 性能解决之道

主数据 副本(对等)

Page 15: 大数据时代feed架构 (ArchSummit Beijing 2014)

Service

L1/LRUPool 1

L1/LRUPool 2

L1/LRUPool 3

MasterPool

SlavePool

⼤大数据环境的 性能解决之道

主数据 副本(对等)

分级缓存 - 副本 (可选)

Page 16: 大数据时代feed架构 (ArchSummit Beijing 2014)

Service

L1/LRUPool 1

L1/LRUPool 2

L1/LRUPool 3

MasterPool

SlavePool

⼤大数据环境的 性能解决之道

主数据 副本(对等)

分级缓存 - 副本 (可选)

分层设计 解决热数据 性能

Page 17: 大数据时代feed架构 (ArchSummit Beijing 2014)

• 如何使⽤用缓存模型来解决可⽤用性及性能问题

• ⼆二级缓存的运作机制详解

Cache service

Master Slave

Client0

L1L1

read

Write

Cache service

Client1

Page 18: 大数据时代feed架构 (ArchSummit Beijing 2014)

feed性能 - 总结

‣ Local cache?

‣删除实现复杂 ‣可以通过短超时⽅方式 ‣极热数据的带宽问题需要提前考虑

Page 19: 大数据时代feed架构 (ArchSummit Beijing 2014)

Hadoop / Spark

feed消息队列Feed 发表

feed mq

mcq mcq

多机房分发

worker (in)

worker (out)

Data C

enter 2

Firehose

Fanout

feed存储

cache redis mysql画像 标签

⼲⼴广告 推荐

Data change event

开放 平台

其他 业务

msg processorworker worker

worker worker

Appli- cations

Fanout Fanout

Input

Page 20: 大数据时代feed架构 (ArchSummit Beijing 2014)

Hadoop / Spark

feed消息队列Feed 发表

feed mq

mcq mcq

多机房分发

worker (in)

worker (out)

Data C

enter 2

Firehose

Fanout

feed存储

cache redis mysql画像 标签

⼲⼴广告 推荐

Data change event

开放 平台

其他 业务

msg processorworker worker

worker worker

Appli- cations

Fanout Fanout

Input

信息流处理

Page 21: 大数据时代feed架构 (ArchSummit Beijing 2014)

流式计算

Hadoop / Spark

feed消息队列Feed 发表

feed mq

mcq mcq

多机房分发

worker (in)

worker (out)

Data C

enter 2

Firehose

Fanout

feed存储

cache redis mysql画像 标签

⼲⼴广告 推荐

Data change event

开放 平台

其他 业务

msg processorworker worker

worker worker

Appli- cations

Fanout Fanout

Input

信息流处理

Page 22: 大数据时代feed架构 (ArchSummit Beijing 2014)

流式计算 分布式 多机房

Hadoop / Spark

feed消息队列Feed 发表

feed mq

mcq mcq

多机房分发

worker (in)

worker (out)

Data C

enter 2

Firehose

Fanout

feed存储

cache redis mysql画像 标签

⼲⼴广告 推荐

Data change event

开放 平台

其他 业务

msg processorworker worker

worker worker

Appli- cations

Fanout Fanout

Input

信息流处理

Page 23: 大数据时代feed架构 (ArchSummit Beijing 2014)

架构特点(1)✓实时:处理时间 100ms 以内

✓可扩展:⽆无状态设计,简单增加节点扩容

✓可⽤用性:99.99%+,⾃自动failover,⽆无单点

性能

Page 24: 大数据时代feed架构 (ArchSummit Beijing 2014)

架构特点(2)

✓统⼀一实时推送通道 — mcq & firehose

✓统⼀一数据流,职责分明,解决三⼤大需求

✓标准化格式,internal probuf 格式

数据流

Page 25: 大数据时代feed架构 (ArchSummit Beijing 2014)

firehose - 实时的业务数据流Consumer!Group

Config!Service

broker

broker!(slave)

Consumer Consumer Producer Producer✓ ⼀一对多(pub-sub)

✓ 实时数据流

✓ 补推能⼒力

✓ 数据量⼤大,每秒数万条

✓ 可靠性

✓ Fan-outBroker

Memory!Queue

Offset!Magager

Topic!Magager

Cold!Data!

Buffer

broker

broker!(slave)

broker

broker!(slave)

放⼤大

Page 26: 大数据时代feed架构 (ArchSummit Beijing 2014)

Storm⽐比较

‣ msg processor相对于storm没有调度(nimbus)功能;

‣ 没有bolt的streaming串联功能,但可以通过在任务中重写对应业务的mq消息间接实现

Page 27: 大数据时代feed架构 (ArchSummit Beijing 2014)

Databus⽐比较

‣ Databus基于数据库事件触发消息到总线; ‣ 我们使⽤用⾃自⾏行写⼊入消息到firehose的⽅方式

Page 28: 大数据时代feed架构 (ArchSummit Beijing 2014)

Kafka⽐比较

‣ feature基本类似,firehose更偏业务 ‣ pub-sub/offset/at least once

‣ 都不⽀支持 timeline consistency,不保证时序 ‣ 社交产品⼤大多数场景适合

Page 29: 大数据时代feed架构 (ArchSummit Beijing 2014)

实时数据流 - 总结

‣罗⻢马不是⼀一天建成的 ‣⾃自定义队列满天⻜飞的时代的痛苦 ‣尝试过databus trigger⽅方式

‣需要具有抽象共性的意识 ‣ Lambda architecture

Feed Events Queue

Application

Application

Application

Page 30: 大数据时代feed架构 (ArchSummit Beijing 2014)

多元化存储数据类型 特点 存储解决⽅方案 存储产品

微博内容 类型简单 海量访问

关系型数据库 分布式Key - Value MySQL

微博列表 结构化列表数据 多维度查询

关系型数据库 NoSQL

HBase MySQL

关系 类型简单 ⾼高速访问

内存式 key-value key-list结构

MySQL Redis

⻓长微博 图⽚片/短视频

块数据 ⼩小⽂文件 分布式⽂文件系统

计数 (微博数 阅读数…)

结构简单 数据及访问量⼤大

内存紧凑型 NoSQL Redis

Page 31: 大数据时代feed架构 (ArchSummit Beijing 2014)

多元化存储数据类型 特点 存储解决⽅方案 存储产品

微博内容 类型简单 海量访问

关系型数据库 分布式Key - Value MySQL

微博列表 结构化列表数据 多维度查询

关系型数据库 NoSQL

HBase MySQL

关系 类型简单 ⾼高速访问

内存式 key-value key-list结构

MySQL Redis

⻓长微博 图⽚片/短视频

块数据 ⼩小⽂文件 分布式⽂文件系统

计数 (微博数 阅读数…)

结构简单 数据及访问量⼤大

内存紧凑型 NoSQL Redis

Page 32: 大数据时代feed架构 (ArchSummit Beijing 2014)

列表型数据数据类型 结构 单个List

⻓长度 规模

关注 {“uid”: “follow_uid1”, “follow_uid2”… “follow_uidn”} 1-3000 千亿级

粉丝 {“uid”: “fan_uid1”, “fan_uid2”… “fan_uidn”} 1-8000万 千亿级

发表微博列表 {“uid”: “feed_id1”, “feed_id2”… “feed_idn”} 1-100万+ 千亿级

转发微博列表 {“weibo_id”: “repost_id1”, “repost_id2”… “repost_idn”} 1-500万+ 千亿级

评论列表 {“weibo_id”: “cmt_id1”, “cmt_id2”… “cmt_idn”} 1-500万+ 千亿级

Page 33: 大数据时代feed架构 (ArchSummit Beijing 2014)

列表型数据数据类型 结构 单个List

⻓长度 规模

关注 {“uid”: “follow_uid1”, “follow_uid2”… “follow_uidn”} 1-3000 千亿级

粉丝 {“uid”: “fan_uid1”, “fan_uid2”… “fan_uidn”} 1-8000万 千亿级

发表微博列表 {“uid”: “feed_id1”, “feed_id2”… “feed_idn”} 1-100万+ 千亿级

转发微博列表 {“weibo_id”: “repost_id1”, “repost_id2”… “repost_idn”} 1-500万+ 千亿级

评论列表 {“weibo_id”: “cmt_id1”, “cmt_id2”… “cmt_idn”} 1-500万+ 千亿级

类型多

Page 34: 大数据时代feed架构 (ArchSummit Beijing 2014)

列表型数据数据类型 结构 单个List

⻓长度 规模

关注 {“uid”: “follow_uid1”, “follow_uid2”… “follow_uidn”} 1-3000 千亿级

粉丝 {“uid”: “fan_uid1”, “fan_uid2”… “fan_uidn”} 1-8000万 千亿级

发表微博列表 {“uid”: “feed_id1”, “feed_id2”… “feed_idn”} 1-100万+ 千亿级

转发微博列表 {“weibo_id”: “repost_id1”, “repost_id2”… “repost_idn”} 1-500万+ 千亿级

评论列表 {“weibo_id”: “cmt_id1”, “cmt_id2”… “cmt_idn”} 1-500万+ 千亿级

类型多 变⻓长/超⻓长

Page 35: 大数据时代feed架构 (ArchSummit Beijing 2014)

列表型数据数据类型 结构 单个List

⻓长度 规模

关注 {“uid”: “follow_uid1”, “follow_uid2”… “follow_uidn”} 1-3000 千亿级

粉丝 {“uid”: “fan_uid1”, “fan_uid2”… “fan_uidn”} 1-8000万 千亿级

发表微博列表 {“uid”: “feed_id1”, “feed_id2”… “feed_idn”} 1-100万+ 千亿级

转发微博列表 {“weibo_id”: “repost_id1”, “repost_id2”… “repost_idn”} 1-500万+ 千亿级

评论列表 {“weibo_id”: “cmt_id1”, “cmt_id2”… “cmt_idn”} 1-500万+ 千亿级

类型多 变⻓长/超⻓长 ⼤大数据

Page 36: 大数据时代feed架构 (ArchSummit Beijing 2014)

列表访问效率

Page 37: 大数据时代feed架构 (ArchSummit Beijing 2014)

列表访问效率

Page 38: 大数据时代feed架构 (ArchSummit Beijing 2014)

列表访问效率

Page 39: 大数据时代feed架构 (ArchSummit Beijing 2014)

列表访问效率

Page 40: 大数据时代feed架构 (ArchSummit Beijing 2014)

列表访问效率

Page 41: 大数据时代feed架构 (ArchSummit Beijing 2014)

列表访问效率

关系数据库并⾮非为list scan设计

Page 42: 大数据时代feed架构 (ArchSummit Beijing 2014)

通⽤用的⼆二级索引

Page 43: 大数据时代feed架构 (ArchSummit Beijing 2014)

通⽤用的⼆二级索引

count index [6, 12]

Page 44: 大数据时代feed架构 (ArchSummit Beijing 2014)

通⽤用的⼆二级索引

Offset index [15, 8]

count index [6, 12]

Page 45: 大数据时代feed架构 (ArchSummit Beijing 2014)

shard-3shard-2shard-1

2013

2012~

2009

2014

2013

2014

2013

2014

2012~2011

列表性能及成本

Page 46: 大数据时代feed架构 (ArchSummit Beijing 2014)

shard-3shard-2shard-1

2013

2012~

2009

2014

2013

2014

2013

2014

2012~2011

列表性能及成本

Page 47: 大数据时代feed架构 (ArchSummit Beijing 2014)

shard-3shard-2shard-1

2013

2012~

2009

2014

2013

2014

2013

2014

2012~2011

pool 1 ⾼高速 设备

列表性能及成本

Page 48: 大数据时代feed架构 (ArchSummit Beijing 2014)

shard-3shard-2shard-1

2013

2012~

2009

2014

2013

2014

2013

2014

2012~2011

pool 1 ⾼高速 设备

列表性能及成本

Page 49: 大数据时代feed架构 (ArchSummit Beijing 2014)

shard-3shard-2shard-1

2013

2012~

2009

2014

2013

2014

2013

2014

2012~2011

pool 1 ⾼高速 设备

列表性能及成本

Page 50: 大数据时代feed架构 (ArchSummit Beijing 2014)

shard-3shard-2shard-1

2013

2012~

2009

2014

2013

2014

2013

2014

2012~2011

pool 1 ⾼高速 设备

pool 3 廉价 设备

列表性能及成本

Page 51: 大数据时代feed架构 (ArchSummit Beijing 2014)

加速层!⼆二级索引

列表存储服务

存储!引擎 MySQL HBase

存储!策略层

接⼝口 saveList(id, offset, size)

⼀一致性 SLA(QoS) Metrics超⻓长列表 Sharding Trace

offset index count index

loadList(id, offset, size)

Page 52: 大数据时代feed架构 (ArchSummit Beijing 2014)

feed存储 - 总结

‣从各⾃自建设到可复⽤用的⽅方向发展 ‣曾尝试mysql-proxy⽅方向,但业务⽅方需求不强烈

‣类似超⻓长列表的服务得到了较好⽀支持 ‣抽象共性问题并解决,⽽而不是增加熵

Page 53: 大数据时代feed架构 (ArchSummit Beijing 2014)

聚合 Feed流 Timeline

反垃圾策略

微博特征

⽤用户特征

⽇日志 Firehose

分析

⽤用户 feed-list⽤用户

feed-list⽤用户

feed-list

MySQL

Cache

Redis

Read/write Through

反馈

算法!(推荐、提权、排序)

feed展⽰示过程

关注关系

Page 54: 大数据时代feed架构 (ArchSummit Beijing 2014)

聚合 Feed流 Timeline

反垃圾策略

微博特征

⽤用户特征

⽇日志 Firehose

分析

⽤用户 feed-list⽤用户

feed-list⽤用户

feed-list

MySQL

Cache

Redis

Read/write Through

反馈

算法!(推荐、提权、排序)

⽤用户维度feed展⽰示过程

关注关系

Page 55: 大数据时代feed架构 (ArchSummit Beijing 2014)

聚合 Feed流 Timeline

反垃圾策略

微博特征

⽤用户特征

⽇日志 Firehose

分析

⽤用户 feed-list⽤用户

feed-list⽤用户

feed-list

MySQL

Cache

Redis

Read/write Through

反馈

算法!(推荐、提权、排序)

⽤用户维度feed展⽰示过程

关注关系⽤用户维度

Page 56: 大数据时代feed架构 (ArchSummit Beijing 2014)

聚合 Feed流 Timeline

反垃圾策略

微博特征

⽤用户特征

⽇日志 Firehose

分析

⽤用户 feed-list⽤用户

feed-list⽤用户

feed-list

MySQL

Cache

Redis

Read/write Through

反馈

算法!(推荐、提权、排序)

⽤用户维度feed展⽰示过程

关注关系⽤用户维度

兴趣聚类

Page 57: 大数据时代feed架构 (ArchSummit Beijing 2014)

๏ 基于⽤用户维度组织内容⾼高效满⾜足兴趣阅读的难度

๏ 信息识别及低质内容鉴定的技术挑战

๏ 反垃圾算法的难度

不⾜足的做对的

✓ 成熟的feed推拉聚合模型

✓ 成熟的⽤用户数据组织⽅方式

feed展⽰示- 总结

Page 58: 大数据时代feed架构 (ArchSummit Beijing 2014)

总结与展望• Key List • Key Value • SQL

MQ firehose

• 趋势 • 降噪、提权 • 反垃圾 • 排序

缓存复制 proxy

微博 feed

feed 存储

feed 消息队列

Feed展⽰示 聚合、排序

feed 性能与可⽤用性

Page 59: 大数据时代feed架构 (ArchSummit Beijing 2014)

Q&A

TimYang 微信公众号

http://timyang.net