阿⾥里搜索流计算技术

⺩王峰

1
个⼈人背景简介
• 真名:⺩王峰	
  	
  
• 淘宝花名:莫问	
  	
  	
  	
  	
  
• 微博:淘莫问	
  
• 2006年毕业后加⼊入阿⾥里巴巴集团	
  
• ⼀一淘及搜索事业部(⾼高级技术专家)	
  
• 技术...
提纲
• iStream业务背景	
  
• iStream	
  On	
  YARN	
  
• iStream计算模型	
  
• iStream服务调度	
  
• iStream⽣生产应⽤用

3
iStream业务背景
• ⼀一淘全⺴⽹网商品搜索	
  &	
  淘宝站内商品搜索	
  
• 商品搜索的时效性⾮非常⾼高	
  
• 淘宝卖家更新商品后需要实时处理并推送到搜索引擎	
  
• 全⺴⽹网商品抓取后需要实时处理并推送到搜索引擎...
⼀一淘全⺴⽹网商品搜索系统架构

互联⺴⽹网

⺴⽹网⻚页抓取

⺴⽹网⻚页选取

淘宝商品库

⺴⽹网⻚页抽取

搜索应⽤用

同步⼊入库

搜索引擎

全⺴⽹网电商⺴⽹网⻚页库(HBase)

业务处理服务

5
⼀一淘全⺴⽹网商品离线处理流程
商品⼊入库

全⺴⽹网商品库

触发器

商品更新队列
类⺫⽬目预测

运费处理
产品匹配
促销信息处理

业务处理服务

相关性计算

返利计算
商品过滤
商家信息处理
优惠挖掘服务

商品输出队列

搜索引擎...
Hadoop-­‐1.0	
  to	
  2.0

7
iStream	
  On	
  YARN
iStream

8
iStream计算模型
• 基本概念	
  
• 拓扑结构	
  
• 消息管理	
  
• 进度管理	
  
• 编程接⼝口

9
基本概念
• Stream	
  Service:完成⼀一套业务功能的流计算服务	
  
• Stream	
  Role:具备相同计算逻辑的计算单元组合	
  
• Stream	
  Worker:Stream	
  Role中的计算单元	...
拓扑结构
Stream	
  Service
Stream	
  Source

数据源

Stream	
  Source

Stream	
  Role

Stream	
  Role
Stream	
  Sink/Source

Stre...
消息管理
• iStream设计理念	
  
– 计算和存储分层,计算之间解耦	
  
• 计算层之间采⽤用持久化分布式消息队列进⾏行消息传递	
  
– 消息不会丢失	
  
– 消息队列可插件化⾃自由选择	
  
– HQueue(基于HB...
进度管理
• 如何衡量流进度的快慢?	
  
– 消息⽣生成时间	
  vs	
  消息处理时间	
  
• Master管理Workers进度	
  
– Master	
  WebUI展⽰示Workers进度	
  
– Master发现W...
编程接⼝口
• InputFormat:对Stream	
  Source的
操作封装	
  
– getSplits(Source):为Stream	
  
Source进⾏行数据分⽚片拆分	
  
– createReader(Split)...
编程接⼝口
• Worker:定制消息业务处理逻辑	
  
– setUp():消息处理前的初始化⼯工作	
  
– cleanUp():消息处理结束后的清理⼯工作	
  
– process(message):处理输⼊入消息	
  
– co...
编程接⼝口
• StreamRouter:消息的路由
策略	
  
– getSinks(message):获
取消息的输出sink列
表,决定消息向那⾥里路
由发送

Stream	
  Worker

Message
Router
Stre...
编程接⼝口
• OutputFormat:对Stream	
  Sink的操作封
装	
  
– getPartitionNum(Sink):获取sink的
partition数量	
  

Stream	
  Sink	
  Writer

...
iStream服务调度
• 调度流程	
  
• 调度策略	
  
• Failover处理

18
调度流程
4.	
  start,	
  register	
  to	
  master

Resource	
  Manager

Stream	
  Worker

! Stream	
  Worker
!
3.	
  allocate	...
调度策略
• Locality调度	
  
– 让计算单元更加靠近数据,减少⺴⽹网络传输,类似MR的
Locality调度策略	
  
• 弹性调度	
  
– 根据流处理进度动态调整worker数量,保证进度的同时
不浪费资源	
  
• 动...
Locality调度
Switch1

!
!
!
!
!
!
!

Switch2

Node1	
  

Node2	
  

Node3	
  

Data  Split1

Data  Split2

Data  Split3

...
弹性调度	
  -­‐	
  动态扩容

Stream	
  Source

Data	
  Split

Stream	
  Role

Data	
  Split

Stream	
  Worker

1.	
  进度太慢 2.	
  分裂...
弹性调度	
  -­‐	
  动态收缩

Stream	
  Source

Stream	
  Role

Data	
  Split

Data	
  Split

Stream	
  Worker

3.	
  资源被合理回收 2.合并
...
Failover处理
checkpoint

!
!
!
!
!
!
!
!

Zookeeper

RM	
  HA
Resource	
  Manager	
  
(active)

heartbeat

heartbeat
Stream ...
iStream⽣生产应⽤用
增量更新10分钟级别

秒级

⼀一淘⺴⽹网⻚页抓取

B2B实时搜索

淘宝问答搜索

⼀一淘商品搜索

⼀一淘优惠挖掘

淘宝知识搜索

⼀一淘降价提醒

⼀一淘点评搜索

天猫商品搜索

阿⾥里搜索Hadoop...
Q&A
微博:淘莫问

26
Upcoming SlideShare
Loading in...5
×

王峰:阿里搜索实时流计算技术

377

Published on

BDTC 2013 Beijing China

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
377
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

王峰:阿里搜索实时流计算技术

  1. 1. 阿⾥里搜索流计算技术 ⺩王峰 1
  2. 2. 个⼈人背景简介 • 真名:⺩王峰     • 淘宝花名:莫问           • 微博:淘莫问   • 2006年毕业后加⼊入阿⾥里巴巴集团   • ⼀一淘及搜索事业部(⾼高级技术专家)   • 技术⽅方向:搜索离线系统,Hadoop  Ecosystem 2
  3. 3. 提纲 • iStream业务背景   • iStream  On  YARN   • iStream计算模型   • iStream服务调度   • iStream⽣生产应⽤用 3
  4. 4. iStream业务背景 • ⼀一淘全⺴⽹网商品搜索  &  淘宝站内商品搜索   • 商品搜索的时效性⾮非常⾼高   • 淘宝卖家更新商品后需要实时处理并推送到搜索引擎   • 全⺴⽹网商品抓取后需要实时处理并推送到搜索引擎   • 全⺴⽹网商品降价后需要实时通知给订阅⽤用户   • 全⺴⽹网商品出现优惠打折需要实时在⾸首⻚页推荐 4
  5. 5. ⼀一淘全⺴⽹网商品搜索系统架构 互联⺴⽹网 ⺴⽹网⻚页抓取 ⺴⽹网⻚页选取 淘宝商品库 ⺴⽹网⻚页抽取 搜索应⽤用 同步⼊入库 搜索引擎 全⺴⽹网电商⺴⽹网⻚页库(HBase) 业务处理服务 5
  6. 6. ⼀一淘全⺴⽹网商品离线处理流程 商品⼊入库 全⺴⽹网商品库 触发器 商品更新队列 类⺫⽬目预测 运费处理 产品匹配 促销信息处理 业务处理服务 相关性计算 返利计算 商品过滤 商家信息处理 优惠挖掘服务 商品输出队列 搜索引擎 降价提醒服务 6
  7. 7. Hadoop-­‐1.0  to  2.0 7
  8. 8. iStream  On  YARN iStream 8
  9. 9. iStream计算模型 • 基本概念   • 拓扑结构   • 消息管理   • 进度管理   • 编程接⼝口 9
  10. 10. 基本概念 • Stream  Service:完成⼀一套业务功能的流计算服务   • Stream  Role:具备相同计算逻辑的计算单元组合   • Stream  Worker:Stream  Role中的计算单元   • Stream  Source:Stream  Worker的数据输⼊入源   • Stream  Sink:Stream  Worker的数据输出终端   • Stream  Master:负责调度管理Stream  Workers 10
  11. 11. 拓扑结构 Stream  Service Stream  Source 数据源 Stream  Source Stream  Role Stream  Role Stream  Sink/Source Stream  Sink/Source 分布式消息队列 Stream  Role Stream  Role Stream  Sink 最终⺫⽬目的地 11
  12. 12. 消息管理 • iStream设计理念   – 计算和存储分层,计算之间解耦   • 计算层之间采⽤用持久化分布式消息队列进⾏行消息传递   – 消息不会丢失   – 消息队列可插件化⾃自由选择   – HQueue(基于HBase的分布式消息队列)   • 优势   – 消息管理机制简单,系统吞吐量⼤大   – 上下游计算解耦,不相互阻塞进度,⽅方便新业务接⼊入   – 持久化的消息流,⽅方便多业务共享数据以及问题追查 12
  13. 13. 进度管理 • 如何衡量流进度的快慢?   – 消息⽣生成时间  vs  消息处理时间   • Master管理Workers进度   – Master  WebUI展⽰示Workers进度   – Master发现Worker进度慢进⾏行报警   • Worker进度持久化和恢复   – Worker定期将进度CheckPoint到Zookeeper   – Worker重启从Zookeeper上的CheckPoint进⾏行恢复 13
  14. 14. 编程接⼝口 • InputFormat:对Stream  Source的 操作封装   – getSplits(Source):为Stream   Source进⾏行数据分⽚片拆分   – createReader(Split):为Data   Split创建Reader   – reader.next():流式读取消息 Stream  Source Split Split Split Split reader reader reader reader message message message message 14
  15. 15. 编程接⼝口 • Worker:定制消息业务处理逻辑   – setUp():消息处理前的初始化⼯工作   – cleanUp():消息处理结束后的清理⼯工作   – process(message):处理输⼊入消息   – context.write(message):输出新消息 15
  16. 16. 编程接⼝口 • StreamRouter:消息的路由 策略   – getSinks(message):获 取消息的输出sink列 表,决定消息向那⾥里路 由发送 Stream  Worker Message Router Stream  Sink Stream  Sink Stream  Sink 16
  17. 17. 编程接⼝口 • OutputFormat:对Stream  Sink的操作封 装   – getPartitionNum(Sink):获取sink的 partition数量   Stream  Sink  Writer – createWriter(Sink):为Stream  Sink创 建Writer   Message – writer.write(partitionID,  message): partitionID 根据groupID向Stream  Sink分发消息   • StreamPartitioner:消息的分发策略   – getPartitionID(message,partitionNum) partition partition partition partition :获取消息的partitionID, OutputFormat根据此partitionID决定 Stream  Sink 如何分发消息 17
  18. 18. iStream服务调度 • 调度流程   • 调度策略   • Failover处理 18
  19. 19. 调度流程 4.  start,  register  to  master Resource  Manager Stream  Worker ! Stream  Worker ! 3.  allocate  resource,launch  worker ! 5.    heartbeat  request  (metrics)   ! ! Stream  Worker Stream  Master ! 6.  heartbeat  response(ok)   ! Stream  Worker 8.  heartbeat  response(stop)   ! 2.  launch  master 1.  start  service 7.  stop  service 10.    stop …… Client 9.    unregister  to  master,stop   19
  20. 20. 调度策略 • Locality调度   – 让计算单元更加靠近数据,减少⺴⽹网络传输,类似MR的 Locality调度策略   • 弹性调度   – 根据流处理进度动态调整worker数量,保证进度的同时 不浪费资源   • 动态负载均衡   – 动态调整Worker的位置,使分布更加均匀,Locality更 加合理 20
  21. 21. Locality调度 Switch1 ! ! ! ! ! ! ! Switch2 Node1   Node2   Node3   Data  Split1 Data  Split2 Data  Split3 Stream  Worker1 Stream  Worker2 Stream  Worker3 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Switch3 Node4   Node5   Node6   Data  Split4 Data  Split5 Data  Split6 Stream  Worker4 Stream  Worker5 Stream  Worker6 ! ! ! ! ! ! ! ! ! 21
  22. 22. 弹性调度  -­‐  动态扩容 Stream  Source Data  Split Stream  Role Data  Split Stream  Worker 1.  进度太慢 2.  分裂 Stream  Worker Data  Split Stream  Worker …  … 3.  并发能⼒力增加,进度追上 22
  23. 23. 弹性调度  -­‐  动态收缩 Stream  Source Stream  Role Data  Split Data  Split Stream  Worker 3.  资源被合理回收 2.合并 Data  Split Stream  Worker Stream  Worker …  … 1.Worker清闲,浪费资源 23
  24. 24. Failover处理 checkpoint ! ! ! ! ! ! ! ! Zookeeper RM  HA Resource  Manager   (active) heartbeat heartbeat Stream  Master Resource  Manager   (standby) ! ! ! ! ! ! ! ! Stream  Worker Stream  Worker … serialize/replay HDFS 24
  25. 25. iStream⽣生产应⽤用 增量更新10分钟级别 秒级 ⼀一淘⺴⽹网⻚页抓取 B2B实时搜索 淘宝问答搜索 ⼀一淘商品搜索 ⼀一淘优惠挖掘 淘宝知识搜索 ⼀一淘降价提醒 ⼀一淘点评搜索 天猫商品搜索 阿⾥里搜索Hadoop/HBase集群(近千台规模) 25
  26. 26. Q&A 微博:淘莫问 26
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×