王峰:阿里搜索实时流计算技术
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

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

on

  • 465 views

BDTC 2013 Beijing China

BDTC 2013 Beijing China

Statistics

Views

Total Views
465
Views on SlideShare
465
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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