15:30 16:20 郭斯杰 从文件存储,对象存储到流存储 重新思考流计算时代的分布式存储

2020-03-01 273浏览

  • 1.从⽂文件存储,对象存储到流存储 — 重新思考流计算时代的分布式存储 Sijie Guo —twitter:@sijiegwechat:guosijie_
  • 2.Who am I • Sijie Guo • 开源项⽬目爱好者:Pulsar, BookKeeper, Hive, HBase, … • Streamlio联合创始⼈人 • Yahoo -> Twitter -> Streamlio • 华中科⼤大 -> 中科院计算所
  • 3.Storage
  • 4.批: Hadoop
  • 5.流: Storm + Kafka
  • 6.The Current Mess
  • 7.The Current Mess (2) • Stream Data Silo • • Batch Data Silo • • 数据通常以Topics/Streams来进⾏行行组织,消息系统作为“存储” 数据通常以⽂文件、对象来进⾏行行组织,⽂文件系统、对象存储作为其存储 两个不不同的Silo,有两套不不同的数据、API和相应的⼯工具
  • 8.Lambda Architecture
  • 9.Kappa Architecture
  • 10.Kappa Architecture • 看起来可以解决批流⼀一体的问题 • 但是Kappa Architecture使⽤用messaging system作为data layer • 这个Data Layer是为“messaging”设计的,⽽而不不是为“Storage”设计的 • 我们需要⼀一个真正意义上的“Stream Storage”
  • 11.流存储 • “Stream”Storage:数据在写⼊入后消费(读)者即可⻅见,Pub/Sub接⼝口 • Stream “Storage”: 存储系统,可靠、稳定地保存数据。 • “Big Data”: ⽔水平扩展性 • ⾼高吞吐量量
  • 12.什什么是Apache Pulsar
  • 13.
  • 14.“Flexible Pub/Sub messaging backed by durable log/stream storage”
  • 15.项⽬目状态 • 2012在Yahoo内部启动,经历了了⽆无数的迭代 • 2016年年九⽉月Yahoo将Pulsar开源 • 2017年年六⽉月Yahoo将Pulsar捐献给了了Apache软件基⾦金金会 • 2018年年九⽉月Pulsar毕业成为顶级项⽬目 • 2353 commits - 22 Yahoo releases - 9 Apache releases • 23 committers from 7 companies, 59 contributors • 30+ companies on production
  • 16.跟传统的消息系统不不同在哪⾥里里 • 灵活的、统⼀一的消息模型:队列列 + 流 • 云原⽣生:存储(storage)和计算(serving/messaging)分离 • 降维:从分区到分⽚片
  • 17.队列列 + 流
  • 18.流:独占式订阅
  • 19.流:灾备式订阅
  • 20.队列列:共享式订阅
  • 21.存储和计算分离 分层架构: Brokers & Bookies • 独⽴立扩展 • 灵活容错 • 快速扩容
  • 22.Apache BookKeeper 分布式⽇日志存储 • 低延时、⾼高吞吐、持久化 • 强⼀一致 (repeatable read consistency) • ⾼高可⽤用 • 单节点可以存储很多⽇日志 • I/O隔离
  • 23.Apache BookKeeper Source of Truth of Everything … • HDFS NameNode •Databases:• • Twitter Manhattan, Salesforce NewSQL DatabaseMessaging:• Twitter EventBus, Pulsar
  • 24.分⽚片存储 • 分区(Partition)是逻辑上的⼀一个概念 • 分区按照时间或者⼤大⼩小被切成分⽚片 (Segment) • 分⽚片被打散存放到集群中的所有节点
  • 25.Broker容错
  • 26.Bookie容错
  • 27.扩容
  • 28.分区 vs 分⽚片 逻辑分区 物理理分区 Segment 1 紧耦合 Broker Broker Broker 分区 (主副本) 分区 (拷⻉贝) 分布 (从拷⻉贝) Segment 2 Broker Segment 3 Broker Segment n Broker 存储和计算 分离 Segment 1 Segment 2 Segment 3 Segment 1 Segment 2 .. Segment 3 .. Segment 1 .. Segment 2 Segment n Segment n Segment n Segment n 分区架构 ! ! ! ! 物理理分区 存储和计算紧耦合 容错恢复需要拷⻉贝物理理分区 扩容需要迁移物理理分区来达到负载均衡 分⽚片架构 ! ! ! ! 逻辑分区,“物理理”分⽚片 存储和计算分离 失效处理理相互分离,快速、⽆无痛点 弹性扩容 ..
  • 29.分区 vs 分⽚片https://jack-vanlightly.com/sketches/2018/10/2/kafka-vs-pulsar-rebalancing-sketch
  • 30.层级存储 • • • • InfiniteStream:以“流”的⽅方式“永远” 保存原始数据 分区的容量量不不再受限 充分利利⽤用云存储或者现有的廉价存 储(e.g. HDFS) 数据统⼀一表征:客户端不不需要关⼼心 数据究竟存在哪⾥里里
  • 31.例例⼦子 “Interactive Queries on Stream Storage”
  • 32.Pulsar SQL • • • 2.2 release的⼀一个预览特性 对存储在Pulsar上的数据(⽆无论在BK还是层级存储),进⾏行行交互式的 SQL查询 实时数据和历史数据的交互查询 • 只要数据进⾏行行到Pulsar中,就可以被查 • 具有Interactive SQL的复杂性 + Streaming SQL的实时性
  • 33.Pulsar SQL (2) • 基于Facebook的Presto进⾏行行深度开发 • Presto是⼀一个分布式的SQL查询引擎 • 不不重复造轮 • Presto可以查询不不同的数据源,你不不需要把所有数据都导⼊入到Pulsar 中再进⾏行行查询。
  • 34.Pulsar SQL (3) … 63 62 61 60 … 43 42 41 40 … 23 22 21 20 … 4 3 2 Segment 1 Segment 2 Segment 4 Segment 3 Segment 1 Segment 3 Segment 1 Segment 2 Segment 3 Segment 2 Segment 4 Segment Reader Segment Reader Segment 4 Coordinator Segment Reader Segment Reader 1
  • 35.Pulsar SQL (4) • 与Presto集成 • 从BK或者层级存储直接读数据,不不需要访问Brokers • 多对多的数据访问 • • Pulsar的数据是分⽚片存储的,所以多个Presto worker可以并发访 问同⼀一个分区中的不不同分⽚片 时间索引:根据PublishTime快速定位分⽚片,只需要读取相应分⽚片
  • 36.总结 • 批(Batch)、流(Streaming)计算⼀一体化 : Spark, Flink, Beam, … • “Messaging, Storage, or Both” [1]: 同⼀一枚硬币的两⾯面 • “流”是数据最⾃自然的表征态:“流⽔水不不腐,户枢不不蠹” • 流存储是实时时代的分布式存储
  • 37.https://pulsar.apache.org@apache_pulsarhttps://bookkeeper.apache.org@asfbookkeeper