Mastodon
跳过正文
  1. Posts/

DDIA Chapter1. Trade-offs in Data Systems Architecture

·1502 字·3 分钟·
DDIA - 这篇文章属于一个选集。
§ : 本文
learning.oreilly.com
原文链接
designing-data-intensive-applications
数据密集型应用的一些常见需求

Such applications are typically built from standard building blocks that provide commonly needed functionality. For example, many applications need to:

  • Store data so that they, or another application, can find it again later (databases)
  • Remember the result of an expensive operation, to speed up reads (caches)
  • Allow users to search data by keyword or filter it in various ways (search indexes)
  • Handle events and data changes as soon as they occur (stream processing)
  • Periodically crunch a large amount of accumulated data (batch processing)

Operational Versus Analytical Systems 运营系统与分析系统
#

OLTP vs OLAP:数据处理的分流
#

OLTP也即运营系统,OLAP也即分析系统。这两种类型决定了数据库选型和架构设计。

特性OLTP (联机事务处理)OLAP (联机分析处理)
主要目标支撑业务运行(如下单、支付、评论)商业决策与洞察(如报表、趋势预测、ML)
用户终端用户、后端服务(Java应用)业务分析师 (BI)、数据科学家
读写模式点查询 (Point Query),按Key读写,低延迟全表扫描,聚合计算 (Sum, Count),高吞吐
数据状态当前最新状态 (Current State)历史事件流 (History of events)
数据量级GB ~ TBTB ~ PB
典型代表MySQL, PostgreSQL, OracleRedshift, Snowflake, ClickHouse

数据基础设施的演进
#

为了解决OLTP和OLAP的冲突,架构发生了演变:

  1. Data Warehouse(数据仓库)
    • 目的:将数据从各业务库提取出来,清洗并转换(extract-transform-load, ETL)后存入一个专门的分析数据库。
    • 特点:Schema-on-write(写时模式),通常是关系型的,适合SQL和BI报表。
      ETL
  2. Data Lake(数据湖)
    • 背景:数据科学家需要非结构化数据(文本、图像)或原始数据进行机器学习,SQL不够用了。
    • 特点:Schema-on-read(读时模式),存原始文件(如Parquet, Avro),符合"Sushi Principle"(raw data is better)。

数据流向:记录系统 vs 派生数据
#

  • System of Record (记录系统):数据的权威版本。如果数据不一致,以此处为准。通常是应用连接的OLTP数据库。
  • Derived Data Systems (派生数据系统):通过某种方式从记录系统转换而来的数据。比如搜索索引(Elasticsearch)、缓存(Redis)、数据仓库、机器学习模型。
OLTPAP

Cloud Versus Self-Hosting 云部署与自托管
#

云服务的权衡
#

维度Self-Hosting (自建/自托管)Cloud Services (云服务)
优势完全控制(可魔改源码、深度调优);排查方便(能看底层日志);成本在负载稳定时更低。速度快(无需采购硬件);弹性伸缩(适合负载波动大的场景);运维外包。
劣势需要组建昂贵的运维团队;扩容周期长;资源闲置浪费。Vendor Lock-in (厂商锁定);黑盒(出问题只能等);数据隐私与合规风险。

云原生架构
#

Category 类别Self-hosted systems 自托管系统Cloud native systems 云原生系统
Operational/OLTP 运营/OLTPMySQL, PostgreSQL, MongoDBAWS Aurora, Azure SQL DB Hyperscale, Google Cloud Spanner
Analytical/OLAP 分析/OLAPTeradata, ClickHouse, SparkSnowflake, Google BigQuery, Azure Synapse Analytics

总体而言,自托管软件倾向于使用通用计算资源:CPU、RAM、文件系统和IP网络。

而云原生服务的关键思想不仅在于使用操作系统管理的计算资源,还在于基于较低级别的云服务来创建更高级别的服务。比如对象存储服务如Amazon S3、Azure Blob存储和Cloudflare R2用于存储大文件。它们提供的API比典型的文件系统更有限(仅基本文件读写),但它们的优势在于隐藏了底层的物理机器;服务会自动将数据分布到多台机器上。许多其他服务反过来又建立在对象存储和其他云服务之上。例如,Snowflake是一个基于云的分析数据库(数据仓库),它依赖于S3进行数据存储

在传统的系统架构中,同一台计算机既负责存储(磁盘)也负责计算(CPU 和 RAM);但在云原生系统中,这两种职责已经有所分离(即存算分离)。

  • 计算:是无状态的、临时的(Ephemeral)。如果机器挂了,直接换一台。
  • 存储:不再依赖本地硬盘(容易随机器销毁而丢失),而是依赖对象存储(如S3)或网络块存储(如EBS)。
  • 优势:利用对象存储的超高可靠性和无限容量,可实现近乎无限的扩展性。
cloud-native

Distributed Versus Single-Node Systems 分布式系统与单节点系统
#

tinuvile
作者
tinuvile
一个笨小孩
DDIA - 这篇文章属于一个选集。
§ : 本文