暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Google分布式系统的回顾和研究

译数据 2021-01-10
1103

Colossus是GFS的下一代分布式文件系统,它成为了GCS(Google Cloud Storage)存储系统的基石。

Curators是构建在Google BigTable之上,可扩展的元数据管理系统。Custodians是一个离线服务,用来实现数据片的分布管理。Reed-Solomon code是Colossus使用的一种Erase Coding编码格式,可以大大降低数据副本的冗余,提高存储效率。例如HDFS的副本数是3,可以容忍2个机器同时宕机,数据存储效率大概是33%。那么一个使用RS(6,3)编码的存储系统,可以容忍最多3个机器出现宕机,存储效率高达6/(6+3)=67%。这种技术在RAID-6, Hadoop3.0以及Ceph等系统中得到了成熟的运用,现已成为云存储系统提高持久性(Durablity)的重要优化方案。

OLTP->OLAP->HTAP 演化发展中的数据查询服务

Dremel最初发布在2010年的VLDB大会。它提出了一种以repetation/definition描述有嵌套关系和稀疏特征的列式存储,设计了一种多个层次的执行框架,现在已经成为Google Cloud产品BigQuery的系统内核。除此之外,该系统对开源系统带来了深远的影响。
  • Apache Parquet 列式存储。它是Dremel的数据存储模型(Capacitor)的开源实现,已经成为数据湖/数据仓库等核心技术的默认存储方案。

  • 存储和计算的分离架构。无论是分布式计算架构还是OLAP架构,计算和存储分离的架构思想,在弹性/扩展性/资源利用率等众多方面都带来了比较大的提升。所以,在VLDB2020,Dremel回归了过去10年该技术在Google的演化,指出分离存储和计算的模型也迎合了过去10年云计算Pay-As-You-Use的哲学。在Google BigQuery的架构里,更是将Shuffle Tier从计算和存储架构中独立出来。最近,Spark Remote Shuffle Service的快速演化,也在推动这种面向Cloud更友好的架构思想潮流。



Procella是针对Youtube业务线,面向数据处理和分析的统一服务。随着数据需求的演化,会出现多种数据查询服务。它们的存储格式、数据管理模型、数据更新接口、查询引擎接口往往会针对不同需求有深度定制化的能力。现实世界是,一份数据,在不同系统里有一种特殊的存在和服务形式,这导致了维护一致性和成本的负担。那么,针对报表、绘图、集成的统计分析、监控和即时分析等场景,有没有一个统计的解决方案呢?

Procella在计算和存储分层的整体框架的基础上,提出了实时数据增量导入,以及本地缓存系统,缓存列式存储的metadata/Index/raw data。为了进一步降低跨层访问Colossus的开销,充分利用缓存,它还在调度任务时,引入了类似于Data Locality的affinity调度,也就是提供一套降低直接访问远程存储的任务分配和调度方案。


它还优化Dremel的列式存储方案(Capacitor),在支持数据扫描的基础上,提出了一种面向点查询和范围查询优化的列式存储格式Artus。为了提供更好的查询谓词下推的功能,Procella在数据导入过程中,会生成更多的元数据信息和索引信息,这些信息会和数据信息一起使用更加灵活高效的编码方案,例如,dictionary and indexer types, run-length, delta 等。


Procella的架构和设计的影响:

  • 开源系统Cortex/Druid等一大批实时数据OLAP系统,在一定程度上,架构设计非常接近。它们的出现直接影响了我们管理数据更新和查询的方式。

  • 数据缓存是面向云平台存储的OLAP架构优化的关键。如何结合查询引擎做更高效的查询优化,如何高效地利用缓存等问题在工业界还面临较大的挑战。

  • 编码技术在查询引擎优化的运用。Bloom Filter,Roaring Bitmap,Data Sketch等,给我们优化带来新的思路。


对于Google分布式系统的回顾,F1/Mesa/Spanner/Borg等系统的特点和它的指导意义也会在后面的文章里给大家解读。


请关注译数据公众号,会尽可能为大家推送更高质量的数据系统架构的思考。

(本文所有架构图均来自于Google发布的Paper里的截图)

文章转载自译数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论