专业书籍精读 · Fundamentals of Data Engineering · 第 4 章
Fundamentals of Data Engineering · Ch 4 · Choosing Technologies Across the Data Engineering Lifecycle · Reis & Housley · 2022
你在公司里看到的每一张报表,背后都有一串工具在搬数据、存数据、算数据。市面上这类工具有几百种,每家都说自己最快、最省。这一章不推荐哪个牌子,而是教你挑工具时该问哪几个问题。
很多小团队照着大厂的做法,搭了一整套自己运维的系统,结果三个人天天修机器,没空做真正的业务。反过来,有的大公司把业务从云上搬回自己的机房,一年省下好几千万。同一个选择,对一家是明智,对另一家是灾难。
团队小,就尽量用现成的托管服务,把精力花在业务上;规模大到账单本身成了大问题,才考虑自己接手一部分。一句诚实的代价:越依赖现成服务越省心,但也越难离开那家供应商。
选技术不是挑最酷的工具,而是先定架构,再挑最省团队精力、能随时换掉、总账算得过来的那一个。
想看书里的总拥有成本(TCO)与机会成本(TOCO)、不变技术与易逝技术、本地 / 云 / 混合 / 多云怎么选、开源与商业产品的评估清单,以及无服务器何时比服务器贵? → 切到精读版
你以为选型是在比较哪个工具更强,其实本章的第一句判断是:架构是战略,工具是战术。先定架构(做什么、为什么),再选工具(怎么做);评判一个工具的标准不是它多酷,而是它为业务增加的价值、它让团队省下的精力、以及将来换掉它要付出的代价。
Part I「基础与构件」的最后一章。第 3 章讲好架构的原则,这一章把原则落到「具体买什么、用什么」;从第 5 章起进入 Part II,逐站讲生命周期的每个阶段。对应现实里技术选型评审和「这个平台要不要自建」的预算讨论。
数据工具在 2010 年代后井喷:采集、存储、转换、编排、BI 各有几十种选择,营销语言高度相似。作者观察到的典型失败有三种:团队先爱上工具,再倒推架构;小团队照搬大厂的自建方案,把时间花在运维而不是产出;只看价签,忽略了人力、迁移和被锁定的代价。
后果很具体:一个 5 人数据团队若自己运维一套 Hadoop 或 Kafka 集群,可能一半人手都耗在升级、扩容和半夜告警上;而一份三年的云厂商专有方案,等发现不合适时,数据已经大到搬不动。本章给出一组贯穿整个生命周期的选型考量,让选择可解释、可回退。
团队规模与能力是第一个约束。小团队或技术能力偏弱的团队,应该尽量用托管服务和 SaaS,把有限人手用在业务上。作者明确警告「货物崇拜工程(cargo-cult engineering)」:看到大厂发布了某套架构,就以为照搬就能得到同样的效果——大厂有上百人维护它,你没有。
上市速度(speed to market):数据团队的价值在于尽快、持续地交付有用的数据。作者的立场是选择「够用」且能快速交付的技术,避免为了追求完美而无休止地评估。互操作性(interoperability):任何工具都要和上下游连接,要先问它支持哪些标准接口和数据格式,比如 JDBC/ODBC 数据库连接协议、REST API、Parquet 这类开放文件格式。互操作性差的工具,连接本身就会变成一项长期工程。
总拥有成本(TCO, total cost of ownership)= 直接成本(服务器、订阅、云账单)+ 间接成本(运维人力、培训、停机损失)。开源软件许可证免费,但如果需要两名工程师全职维护,按一线城市人力成本算,一年可能就是上百万元级的隐性支出。另一个维度是 CapEx 与 OpEx:云把一次性的大额资本支出变成按月的运营支出,换来了可以随时缩减、随时退出的灵活性。
本章更有洞见的是总机会成本(TOCO, total opportunity cost of ownership):选了一套技术栈,就等于放弃了其他所有选择所能带来的收益。作者用「熊夹(bear trap)」形容那种进去容易、出来难的技术——如果一套方案会让你几年后无法切换到更好的东西,它的真实成本远高于账单。所以评估时要问:如果两年后它不行了,换掉要多久、多贵?
作者把第 3 章的 FinOps 再推了一步:云账单是动态的,需要工程、财务、业务共同持续盯,像监控延迟一样监控成本。
作者把技术分成两类。不变的技术(immutable technologies)是经受了时间考验的底座:对象存储、网络、服务器、SQL、bash、C 语言、x86 指令集。易逝的技术(transitory technologies)是来得快、去得也快的上层工具,前端框架是典型。作者引用林迪效应(Lindy effect):一项技术已经存在得越久,它未来继续存在的时间往往也越长。
由此得出的策略是:为当下选最好的工具,但用不变的技术做底座,用易逝的技术做可更换的上层。比如数据放在对象存储的开放格式里,上面的查询引擎今天用 A、明天换 B,数据不用动。作者建议定期重新评估工具,而不是一劳永逸。
本地部署(on-premises):自己买机器、自己运维,容量必须按峰值提前规划,扩容周期以月计。云:按需租用,几分钟扩到上千核,但作者提醒云不是别人的机房——把本地架构原样「搬上云(lift and shift)」往往更贵,要按云的方式重写,比如用对象存储替代常驻集群、用完即停。
作者特别讲了云的经济学:云厂商把存储和算力切成不同耐久度、不同可用性的商品来定价,像金融衍生品一样各有条款;数据进云免费、出云收钱,出口流量费让数据有了「引力」,越大越难搬走。混合云(hybrid cloud)常见形态是分析放云上、核心业务系统留本地;多云(multicloud)能挑各家最好的服务、降低对单一厂商的依赖,代价是出口流量费和工程复杂度成倍上升。
至于「从云上搬回来(cloud repatriation)」,作者的判断很克制:只有当公司规模极大、且存储或网络本身就是核心产品时才合理,书中点名的例子是 Dropbox 和 Cloudflare;对绝大多数公司,默认先上云。
作者的原则是:只在能带来竞争优势的地方自建,其余的「无差异化重活(undifferentiated heavy lifting)」交给别人。买的那一侧又分三类:
单体(monolith):一个系统包办多项功能,简单、好理解,但一处升级牵动全局。作者还点名了一种最差的形态——分布式单体(distributed monolith):看起来是多台机器、多个服务,实际共享依赖、必须一起升级,典型是多个作业挤在同一个 Hadoop 集群、被同一个版本绑住。模块化(modular):用开放格式(如 Parquet)和标准接口把可替换的组件拼起来,再用编排工具(如 Airflow)串成管道。作者总体倾向模块化,因为它让每个组件都是「双向门」,代价是集成和编排的复杂度落在团队身上。
无服务器 vs 服务器:无服务器按调用计费,适合规模小、频率低、任务离散的负载,零运维、不用时零成本;但单价远高于同等算力的常驻机器,调用量一大,账单会反超。此外它有执行时长、内存、语言运行时的限制。作者的建议次序是:能用无服务器先用;超出它的边界后,再用容器加编排(如 Kubernetes);最后才是直接管服务器;关键是先建模用量,算出交叉点。
基准测试之战(benchmark wars):作者提醒厂商跑分常有猫腻——用小得离谱的数据集测「大数据」性能、拿优化过的自家产品对比默认配置的对手、只比查询速度不比成本。对策是用自己的数据和自己的查询做测试,买家自慎(caveat emptor)。最后,第 2 章的六条暗流(安全、数据管理、DataOps、数据架构、编排、软件工程)也是选型清单:一个工具若权限模型粗糙、没有元数据和监控接口,再快也要扣分。
表 1 · 放在哪:本地、云、混合、多云
| 位置 | 适合 | 代价 |
|---|---|---|
| 本地 | 负载稳定、规模大、有成熟运维团队;合规要求数据不出机房 | 按峰值预购,扩容以月计;硬件与人力全自担 |
| 云 | 大多数公司的默认选择;负载波动、想快速试错 | 照搬本地架构会更贵;出口流量费让数据越大越难搬走 |
| 混合 | 核心系统已在本地、分析想上云 | 两套环境的网络、权限、运维要同时维护 |
| 多云 | 需要各家最好的服务,或强烈规避单一厂商 | 跨云流量费与工程复杂度成倍上升 |
表 2 · 自建、开源、商业开源、专有
| 选项 | 适合 | 代价 |
|---|---|---|
| 自建 | 这块能力就是公司的竞争优势 | 开发、运维、招人全在自己身上;机会成本最高 |
| 社区开源自托管 | 有运维能力、想要最大控制与零许可费 | 许可免费但人力不免费;项目若失去活力要自己接手 |
| 商业开源托管 | 想要托管的省心,又想保留开源退路 | 托管版功能与开源版可能分叉;订阅费随用量涨 |
| 专有 / 云自有 | 小团队、要最快上线、深度用某一家云 | 锁定最深;定价与路线图由厂商决定 |
表 3 · 计算形态:无服务器、容器、服务器
| 形态 | 适合 | 代价 |
|---|---|---|
| 无服务器 | 低频、突发、离散的小任务;事件触发的轻量处理 | 单价高,量大时反超;时长、内存、运行时受限 |
| 容器 + 编排 | 超出无服务器边界、需要可移植性和弹性 | Kubernetes 本身就是一门要学的运维学问 |
| 直接管服务器 | 稳定高负载、需要特定硬件或极致调优 | 容量规划、补丁、故障都自己扛 |
判据:先问「这块能力是不是我们的核心竞争力」,再问「团队有没有人长期运维它」,最后估用量看成本交叉点。三个问题都答「否」,就买托管服务。
这一章就是技术选型评审的问题清单。被问「为什么用 Snowflake 而不自建 Spark 集群」,好的回答不是比跑分,而是说清团队几个人、上线期限多紧、两年后换掉要花多少、数据放在开放格式里还是厂商格式里、调用量落在成本交叉点的哪一侧。业界的现代数据栈——Fivetran 一类托管采集、Snowflake 或 BigQuery 做仓、dbt 做转换、Airflow 编排——本质上就是「小团队尽量买、用开放接口拼」的模块化实践。
大厂与开源实证
① 架构是战略,工具是战术:先定架构,再选工具;评判标准是业务价值、团队精力和换掉的代价。
② 小团队优先托管与 SaaS,警惕照搬大厂的货物崇拜;够用、能快速交付比完美更重要。
③ TCO = 直接成本 + 运维人力等间接成本;TOCO 提醒你选了一条路就放弃了其他路,避开进去容易出来难的「熊夹」。
④ 用不变的技术(对象存储、SQL、开放格式)做底座,把易逝的上层工具设计成可替换。
⑤ 默认先上云但要按云的方式用;出口流量费让数据有引力;回迁只对规模大、存储或网络是核心业务的公司合理。
⑥ 只为竞争优势自建;开源、商业开源、专有产品分别用控制力换省心、用订阅换兜底、用锁定换速度。
⑦ 模块化让每个组件都是可回退的选择,警惕分布式单体;无服务器 → 容器编排 → 服务器,按用量找成本交叉点。
⑧ 跑分只信自己的数据;安全、数据管理、DataOps、编排等暗流也是选型清单的一部分。