批处理
了解数据处理在分布式系统中的重要性。
现代系统比以往任何时候都更加依赖数据。这一点如此明显,以至于我们有时反而忽略了它。
本质上,你与系统的每一次交互都是由数据驱动的。那么,我们该如何处理如此庞大的数据量呢?
处理海量数据
在过去十年中,互联网接入已成为常态。如今,全球约有60%的人口拥有互联网访问能力。这也是为什么我们见证了全球范围内在线业务的迅猛增长。
许多公司开始在其系统中迎来越来越多的用户。当一个系统拥有庞大的用户基础时,这些用户共同产生的数据量也极为可观。
然而在过去,人们很难以有意义的方式利用这些数据。以应用程序中的用户行为为例:一个每天拥有数百万活跃用户的大型系统,可以从用户互动中挖掘出非常有价值的洞察。但由于数据量空前庞大,过去并不清楚如何最好地使用这些数据。
最终,一些技术应运而生,解决了这一问题。如今,系统可以轻松处理以TB为单位的数据。在数据的基础上,数据科学和机器学习等领域的实力也达到了前所未有的高度。
简而言之,数据现在已成为任何系统的核心。由于互联网对许多人开放,相比十年前,当今世界存在更多大规模系统。因此,讨论在分布式系统背景下如何处理海量数据变得尤为重要。
在了解了这一背景之后,让我们来探讨批处理。
什么是批处理?
到目前为止,在本课程中,我们举的例子都是客户端发送请求,服务器接收请求,执行操作,连接数据库获取数据,最后返回响应的系统。用户通常期望尽快获得响应。这种系统被称为在线系统。
另一方面,还存在批处理系统,其定义如下:
批处理系统接收大量输入数据,运行一个任务进行处理,并生成输出数据。
设计数据密集型应用,M·克莱普曼
这个定义包含三个关键要素:
- 接收大量输入数据:这意味着在数据量较小、能轻易通过请求-响应模式处理的情况下,进行批处理并无意义。
- 运行一个任务:该任务可以按周期运行,或由外部触发。在批处理的语境中,每当系统处理一批数据时,就称其正在运行一个“作业”。这个作业可能持续几分钟到几小时,甚至长达数天。
- 生成输出数据:这意味着作业完成后会有明确的结果,通常是生成一组输出数据。
批处理的一个重要特点是,通过多个进程(通常是在节点集群上)协同执行任务。
批处理的一个实例
让我们通过一个例子来加深理解。假设我们要使用批处理方式构建 Pinterest 的用户行为追踪系统。
在图中,展示的是 Pinterest 的事件处理系统。流程如下:
- 客户端的交互被记录为事件,并发送至服务器。
- 服务器读取事件,根据预定义的结构解析事件,并将事件持久化存储到某个存储系统中,例如 AWS 的 S3 存储桶。
- 有一个批处理系统,每隔一小时或一天(视业务需求而定)启动一次,从事件存储中读取数据,并利用多个进程和节点进行处理。
- 最终,批处理系统生成输出数据,并将其持久化到另一个数据库中,如 MySQL 或 Cassandra。
以上是一个批处理在现实系统中作用的高层次示例。在工业界,构建批处理流水线来处理海量数据是一种常见做法。
核心要点
- 在许多场景下,我们无需实现在线请求-响应系统,离线处理方式已足够有效。
- 批处理是一种方法,即由一个或多个节点(或进程)集群对一批数据进行处理。