Logo
Section 1 / 4

批处理

了解数据处理在分布式系统中的重要性。

导入

批处理

了解数据处理在分布式系统中的重要性。

现代系统比以往任何时候都更加依赖数据。这一点如此明显,以至于我们有时反而忽略了它。

本质上,你与系统的每一次交互都是由数据驱动的。那么,我们该如何处理如此庞大的数据量呢?

处理海量数据

在过去十年中,互联网接入已成为常态。如今,全球约有60%的人口拥有互联网访问能力。这也是为什么我们见证了全球范围内在线业务的迅猛增长。

许多公司开始在其系统中迎来越来越多的用户。当一个系统拥有庞大的用户基础时,这些用户共同产生的数据量也极为可观。

然而在过去,人们很难以有意义的方式利用这些数据。以应用程序中的用户行为为例:一个每天拥有数百万活跃用户的大型系统,可以从用户互动中挖掘出非常有价值的洞察。但由于数据量空前庞大,过去并不清楚如何最好地使用这些数据。

最终,一些技术应运而生,解决了这一问题。如今,系统可以轻松处理以TB为单位的数据。在数据的基础上,数据科学和机器学习等领域的实力也达到了前所未有的高度。

简而言之,数据现在已成为任何系统的核心。由于互联网对许多人开放,相比十年前,当今世界存在更多大规模系统。因此,讨论在分布式系统背景下如何处理海量数据变得尤为重要。

在了解了这一背景之后,让我们来探讨批处理。

什么是批处理?

到目前为止,在本课程中,我们举的例子都是客户端发送请求,服务器接收请求,执行操作,连接数据库获取数据,最后返回响应的系统。用户通常期望尽快获得响应。这种系统被称为在线系统。

另一方面,还存在批处理系统,其定义如下:

批处理系统接收大量输入数据,运行一个任务进行处理,并生成输出数据。

设计数据密集型应用,M·克莱普曼

这个定义包含三个关键要素:

  • 接收大量输入数据:这意味着在数据量较小、能轻易通过请求-响应模式处理的情况下,进行批处理并无意义。
  • 运行一个任务:该任务可以按周期运行,或由外部触发。在批处理的语境中,每当系统处理一批数据时,就称其正在运行一个“作业”。这个作业可能持续几分钟到几小时,甚至长达数天。
  • 生成输出数据:这意味着作业完成后会有明确的结果,通常是生成一组输出数据。

批处理的一个重要特点是,通过多个进程(通常是在节点集群上)协同执行任务。

批处理的一个实例

让我们通过一个例子来加深理解。假设我们要使用批处理方式构建 Pinterest 的用户行为追踪系统。

...
批处理示例

在图中,展示的是 Pinterest 的事件处理系统。流程如下:

  • 客户端的交互被记录为事件,并发送至服务器。
  • 服务器读取事件,根据预定义的结构解析事件,并将事件持久化存储到某个存储系统中,例如 AWS 的 S3 存储桶。
  • 有一个批处理系统,每隔一小时或一天(视业务需求而定)启动一次,从事件存储中读取数据,并利用多个进程和节点进行处理。
  • 最终,批处理系统生成输出数据,并将其持久化到另一个数据库中,如 MySQL 或 Cassandra。

以上是一个批处理在现实系统中作用的高层次示例。在工业界,构建批处理流水线来处理海量数据是一种常见做法。

核心要点

  • 在许多场景下,我们无需实现在线请求-响应系统,离线处理方式已足够有效。
  • 批处理是一种方法,即由一个或多个节点(或进程)集群对一批数据进行处理。

节点之间的通信

MapReduce 在批处理中的应用