数据的崛起
了解为什么数据是分布式系统的核心。
数据密集化——新的常态
过去二十年间,我们见证了“数据的崛起”。
现代系统已高度以数据为中心,以至于我们习以为常。事实上,我们对数据的使用方式在过去发生了巨大变化。
想想你日常使用的手机应用、网站、软件等。这些系统始终在不断地读取和写入数据。
这对你来说可能显而易见:系统必须处理数据,无论是主动还是被动。那么,这有什么“上升”之处呢?——你可能会问。真正发生变化的是,各类系统中数据的密集程度。
简而言之,现代系统是数据驱动的。这些系统收集数据、处理数据,并从数据中提炼出有价值的洞察,以推动业务发展和增长。
下面我们来探讨数据处理的几个关键步骤:采集、存储、处理与洞察生成。
数据采集
现代系统会从用户那里采集数据。并非所有数据在类型和价值上都相同,这里我们重点介绍两类数据。
个人数据
个人数据是指与用户密切相关且具有私密性的信息。例如,在 Facebook 上,你个人资料中的内容通常都属于个人数据,如姓名、出生日期、信用卡信息、曾到访地点、喜爱的食物、观看过的电影、结识的朋友、购买的产品等。
这类数据非常敏感。如果系统涉及此类数据,就必须遵守大量规则、法规和合规要求。
用户行为数据
现代系统还会在其系统中采集用户行为数据,作为事件记录。你在网站上的各种操作通常会被记录为事件,后续用于分析并生成洞察。举个例子,考虑一个电商网站。
作为用户,当你在电商网站上进行搜索、浏览、点击或下单时,系统会触发一个事件并发送至后端。后端接收这些事件,并将其存储在持久化数据存储中,以便后续处理。
需要注意的是,“事件”不仅限于用户交互。系统内部发生的其他事项也可能被记录为事件,并传递给其他模块进行存储和处理。例如,若系统因检测到欺诈行为而封禁某用户,这一操作同样可以作为一个事件被记录。
数据存储
采集到的数据必须被妥善保存,才能被有效利用。这时,系统所有者需要决定采用何种存储方式,并从众多数据库选项中选择合适的方案。
正如预期,没有绝对最优的数据库选择标准。具体选择取决于数据的形态、数据量大小以及数据的用途。举例说明:
- 如果你的数据是事务型的(如用户之间的资金转账),很可能选择 MySQL 或 PostgreSQL 这类 SQL 数据库。
- 如果数据需要极快的查询响应速度,键值存储(key-value store)是一个可行的选择。
- 如果数据量极大,且对查询速度要求不高,块存储(block storage)则更为合适。在块存储中,数据以文件形式存储,必要时可拆分为多个部分。
综上所述,采集到的数据会被存储在节点中,因此需要选择合适的存储技术。这一决策应基于系统的实际需求和业务场景。
数据处理
系统接收到的数据未必能直接使用。在后端服务器中,你需要对数据进行清洗、扩展或更新数据结构、增删字段等处理。客户端传来的原始信息虽然包含所需内容,但必须经过加工才能真正可用。
这听起来似乎很简单:只是读取输入数据,运行一段代码,然后输出结果,对吧?
在计算机科学中,只要输入规模小,每个问题都显得微不足道。记住,你总可以使用 的算法。
- 作者
但在当今时代,许多系统面对庞大的用户群体,意味着海量数据的处理。对如此大规模的数据进行处理绝非易事。多年来,多种技术应运而生,大大简化了海量数据的处理流程。
这部分内容将在课程后续章节深入讨论。
洞察生成
分布式系统中的最后一个通用步骤是基于数据生成洞察。无论你采集和处理了哪些数据,最终都会被送入系统中某个专门负责生成有用信息和洞察的部分,以支持业务决策和增长。
例如,一些企业希望预测用户行为,从而制定合适的营销策略。为此,你可以将之前收集的用户行为数据输入机器学习模型,用以预测未来行为。
另一个例子是通过数据聚合来实现收入转化。如果你的业务模式是订阅制,每位用户每月有固定额度,那么就需要从用户行为数据中提取洞察,确保其使用量不超出限额。
核心要点
- 现代系统已变得极为数据密集。
- 对许多公司而言,其业务核心正是数据驱动。
- 系统所有者必须熟练掌握大规模数据处理与管理的核心概念。
- 精准地采集、处理、存储和使用数据,是企业成功的关键。