MillWheel:在网络规模上可容错的流式处理(第一节)

MillWheel:在网络规模上可容错的流式处理(第一节)

MillWheel 是 Google 2013年公开的其内部主要的流式计算框架,本文是对论文MillWheel: Fault-Tolerant Stream Processing at Internet Scale的翻译。

摘要

MillWheel 是一个在 Google 内部广泛使用的用于构建低延迟数据处理应用的架构。用户为单独节点指定一个有向计算图和应用程序,这个系统会管理持久化状态和连续的 record 流,这些都是在这个架构的容错保证之内的。

本文介绍了 MillWheel 的编程模型以及它的实现。对于在 Google 内部使用的一个连续异常探测器的 case 研究,是为了展示有多少 MillWheel 的特性被使用了。MillWheel 的编程模型提供了一个逻辑时间概念,使得写基于时间的聚合变得很容易。MillWheel 从设计一开始就考虑到容错和可扩展性。在实践中,我们发现 MillWheel 对可扩展性,容错以及通用的编程模型的独特结合,使得它在 Google 可以支持广泛的问题。

1. 引言

流式处理系统对于为用户提供内容以及支持组织做出更快更好的决定是至关重要的,这主要是由于它们具备提供低延迟结果的能力。用户想要得到关于他们周围世界的实时新闻。商业对于由像作弊过滤和入侵检测这样的实时情报来源提供的确切含义感兴趣。类似地,科学家必须从巨大的原始数据流中精选出显著的结果。

在 Google 的流式系统需要具备容错,持久化状态以及可扩展性。分布式系统运行在上千台共享机器上,任何一台都可能在任何时间挂掉。基于模型的流式系统,像异常探测器,依赖于根据数周数据生成的预测,并且它们的模型必须随着新数据到达而在运行中更新。按数量级扩展这些系统不应该引起在构建和维护系统的操作成本上同量的增加。针对分布式系统的编程模型,像 MapReduce [11],在背后隐藏了架构的实现细节,允许用户通过简单的表达创建大量的分布式系统。通过允许用户只关注他们的应用逻辑,这种编程模型允许用户推出他们的系统的语义而不用成为分布式系统专家。特别地,用户可以依赖架构级别的公理化的正确性和容错保证,极大地限制 bug 和错误能够出现的范围。相比于限制到一种特定领域的语言,支持一系列通用编程语言进一步驱动了系统的推广,因为用户可以以一种熟悉的语言利用公共设施和便利的已有库。

MillWheel 是一种编程模型,它是为流式处理量身定做的低延迟系统。用户就像为在一个有向计算图中的单独节点写应用逻辑,这样他们可以定义一个任意的动态拓扑。Records 在图中沿着边被连续地传递。MillWheel 提供架构级别的容错,拓扑中的任何节点或者任何边在任何时间都可以失败,而不会影响结果的正确性。作为这种容错的一部分,可以保证系统中的每一个 record 都被传递给它的消费者。进一步,MillWheel 为 record 处理提供的 API 是以幂等的方式来处理每个 record 的,使得从用户的角度看 record 传递只会精确的出现一次。MillWheel会按合适的间隔粒度对它的进度设置 checkpoint,消除任何在外部发送者缓存 checkpoint 之间长时间行将到来的数据的需要。

其他流式系统无法提供这种对容错,通用性和可扩展性的结合。Spark Streaming [34] 和 Sonora [32] 很擅长做高效的 checkpointing 工作,但是限制了对用户代码可用的操作符的空间。S4 [26] 无法提供对持久化状态的完全容错,Storm [23] 无法支持对传递 record 的 exactly-once 机制,Trident [22] 要求严格的事物有序。尝试扩展 MapReduce 和 Hadoop [4] 的批处理模型,来提供低延迟系统,导致在灵活性上有所妥协,例如在 Spark Streaming 中依赖 Replicated Distributed Datasets [33]的特定操作符。流式 SQL 系统 [1] [2] [5] [6] [21] [24] 为许多流式问题提供了简单的解决方案,但是直观的状态抽象和复杂的应用逻辑(例如矩阵乘法)可以使用命令式语言的操作流更自然地表达,而不是像 SQL 这种声明式语言。

我们的贡献是一个针对流式系统的编程模型以及对 MillWheel 架构的实现。

  • 我们设计了一种编程模型,允许创建复杂的流式系统而不需要有分布式系统的专业知识。
  • 我们构造了对 MillWheel 架构的一种高效实现,证明了同时具备可扩展性和容错性的系统的可行性。

本文的剩余部分是这样组织的。第2节概括了一个激发 MillWheel 不断发展的例子,以及它所利用的对应的需求。第3节提供了一个对系统的高级概述。第4节定义了 MillWheel 模型的基本抽象,第5节讨论了MillWheel提供的 API。第6节概述了在 MillWheel 中容错的实现,第7节涵盖了总体的实现。第8节提供了实验结果来说明 MillWheel 的性能,第9节讨论了相关工作。

下一篇:MillWheel:在网络规模上可容错的流式处理(第二节)

发表评论

电子邮件地址不会被公开。 必填项已用*标注