我叫徐振中。我于 2015 年加入 Netflix,担任实时数据基础架构团队的创始工程师,后来领导了流处理引擎团队。我在 2010 年代初对实时数据产生了兴趣,从那时起我就相信还有很多价值有待发掘。
Netflix 是一个很棒的地方,周围有许多了不起的同事。我为参与将共同信念变为现实的旅程中的每个人感到无比自豪。我想花点时间分享一下团队的主要成就:
几个月前,我离开了 Netflix,在实时 ML 领域追求类似但扩展的愿景。我认为现在是总结我在 Netflix 构建实时数据基础架构的经验的最佳时机。我希望这篇文章能帮助平台工程师开发他们的云原生、自助式流数据平台,并在许多业务功能中扩展用例(不一定来自我们的成功,也许更多来自我们的失败)。我还相信,了解数据平台的构建方式可以帮助平台用户(例如数据科学家和机器学习工程师)充分利用他们的平台。
我将分享实时数据基础架构在 Netflix(2015-2021 年)的迭代之旅的四个阶段。
在 Netflix 的全球高速增长期间,业务和运营决策比以往任何时候都更依赖于更快的记录数据。2015 年,基于 Chukwa/Hadoop/Hive 的批处理管道难以扩展。在这个阶段,我们从头开始构建了一个流优先平台来替换失败的管道。
在最初的产品发布后,内部对数据移动的需求稳步上升。我们必须专注于常见的用例。在这个阶段,我们通过构建一个具有简单而强大的构建块设计的自助服务、完全托管的平台来扩展以支持 100 多个用例。
随着流处理在 Netflix 中的发展势头,许多团队要求在数据工程、可观察性和机器学习领域具有更低的延迟和更高的处理灵活性。在此阶段,我们构建了新的流处理开发体验以支持自定义用例,并且我们还应对了新的工程和运营挑战。
随着行业数据平台技术的快速演进,出现了许多新的挑战:协调困难、学习曲线陡峭、流到批边界分裂等。在这个阶段,我们探索了流处理发挥更突出的作用在连接技术和提高抽象以使数据平台更易于使用方面。我们面前还有更多的机会。 对于每个阶段,我将回顾不断发展的业务动机、团队的独特挑战、战略赌注以及我们在此过程中发现的用例模式。
致谢
许多人帮助我审阅了这篇文章,如果没有他们的反馈,我永远不会深入研究许多公正的细节。特别感谢 Chip Huyen、Steven Wu、Prashanth Ramdas、Guanhua Jiang、Scott Shi、Goku Mohandas、David Sun、Astasia Myers 和 Matt Willian!
2015 年,Netflix 已经拥有约 60MM 的订户,并正在积极扩大其国际影响力。我们都知道,迅速扩大平台杠杆将是维持快速增长的用户增长的关键。
旁注:对于那些不熟悉的人,平台团队通过集中管理基础设施来提供杠杆作用,因此产品团队可以专注于业务逻辑。
我们的团队必须弄清楚如何帮助 Netflix 扩展日志记录实践。当时,Netflix 拥有约 500 个微服务,每天在生态系统中产生超过 10PB 的数据。
收集这些数据对 Netflix 有两个主要目的:
您可能会问,为什么我们首先需要将日志从边缘移动到数据仓库?由于数量庞大,对在线事务数据库进行大规模按需分析是不可行的。原因是在线事务处理 (OLTP) 和在线分析处理 (OLAP) 是在不同的假设下构建的——OLTP 是为面向行的访问模式而构建的,而 OLAP 是为面向列的访问模式而构建的。在底层,他们使用不同的数据结构进行优化。
例如,假设我们想知道数亿 Netflix 用户的平均会话长度。假设我们将此按需分析查询放在面向行的 OLTP 系统上。它将导致行级粒度的全表扫描并可能锁定数据库,并且应用程序可能会变得无响应,从而导致不愉快的用户体验。这种类型的分析/报告工作负载在 OLAP 系统上完成要好得多,因此需要以低延迟方式可靠地移动日志。
(Figure: Move data from Edge to Data Warehouse)
到 2015 年,日志记录量已从 2011 年的 450 亿事件/天增加到每天 5000 亿个事件(1PB 的数据摄取)。现有的日志记录基础设施(一个使用 Chukwa、Hadoop 和 Hive 构建的简单批处理管道平台)正在失败 与每周惊人增长的订户数量相比。据估计,我们有大约六个月的时间来发展流媒体优先的解决方案。下图显示了从失败的批处理架构到新的基于流的架构的演变。
(Figure: the failing batch pipeline architecture, before migration)
我们决定用 Keystone 替换这个失败的基础设施。
(Figure: the Keystone streaming architecture, after migration)
您可能有的另一个问题是为什么要考虑流优先架构?当时,正确使用流式架构的价值超过了潜在的风险。Netflix 是一家数据驱动型公司,流媒体架构的直接重要性在于:
在构建流媒体平台时,我们必须考虑许多挑战。
(Figure: How does stream processing help with operational and analytical data)
第 1 阶段的流处理模式总结
我包括了一些观察到的用例及其每个创新阶段各自的流处理模式。因此,您可以了解随着时间的推移而发生的演变。
+-----------------------------------------------------------------+
| Pattern | Product | Example Use Cases |
|-----------------------|----------|------------------------------|
| Data Routing | Keystone | Logging, Data Movement (MVP) |
|-----------------------|----------|------------------------------|
| RT Alerts / Dashboard | Mantis | SPS Alert |
+-----------------------------------------------------------------+
(reference: What is Chaos Money in DevOps on Quora)
拥有一个心理安全的失败环境对于任何团队领导变革都是必不可少的。 我们犯了很多错误。我们在产品发布当天惨遭失败,并发生了全公司范围内的事件,导致大量数据丢失。经过调查,事实证明,尽管正确估计了流量增长,但我们构建的庞大的 Kafka 集群(拥有超过 200 个代理)太大并最终达到了其扩展极限。当一个代理死亡时,由于 Kafka(当时)对代理和分区数量的限制,集群无法自行恢复。它最终退化到无法恢复的地步。 以这种规模失败是一次可怕的经历,但由于心理安全的团队环境,我们与所有利益相关者进行了透明的沟通,并将快速的学习转化为永久的解决方案。对于这种特殊情况,我们开发了更细粒度的集群隔离功能(更小的 Kafka 集群 + 隔离的 Zookeeper)来控制爆炸半径。 还有很多其他的失败。当我们挖掘根本原因时,我们意识到我们无法完全预测所有边缘场景,尤其是当我们在托管云上构建时,其中的变化经常超出我们的控制范围,例如实例终止或租户托管,等等。同时,我们的产品被很多人使用,太重要了,不能失败。始终为最坏的情况做好准备已成为一项操作原则。 事件发生后,我们采用了每周一次的 Kafka 集群故障转移演习。每周值班人员都会模拟 Kafka 集群故障。该团队将确保故障转移自动化能够将所有流量迁移到对用户影响最小的健康集群。如果您有兴趣了解有关此练习的更多信息,此视频有更多详细信息。
在交付了最初的 Keystone MVP 并迁移了一些内部客户之后,我们逐渐获得了一些信任,并且消息传到了其他工程团队。流媒体在 Netflix 中获得了发展势头,因为现在可以轻松移动日志以进行分析处理并获得按需运营洞察力。 现在是我们为普通客户扩展的时候了。
(Figure: evolving Keystone architecture diagram, circa 2016. Keystone includes Kafka and Flink engines as its core components. For more technical design details, please refer to blog posts focused on Kafka and Flink)
+-----------------------------------------------------------------+
| Pattern | Product | Example Use Cases |
|-----------------------|----------|------------------------------|
| Data Routing | Keystone | Logging, Data Movement |
| | | (+ At scale) |
|-----------------------|----------|------------------------------|
| RT Data Sampling/ | Mantis | Cost-effective RT Insights |
| Discovery | | |
|-----------------------------------------------------------------|
| RT Alerts / Dashboard | Mantis, | SPS Alert, |
| | Kafka | + Infrastructure Health |
| | | Monitoring (Cassandra & |
| | | Elasticsearch), |
| | | +RT QoE monitoring |
+-----------------------------------------------------------------+
(Figure: Keystone UI. showing a self-serve drag-n-drop experience powered by a fully managed multi-tenant streaming infrastructure)
在最初推出 Keystone 产品一年后,所有组织的用例数量从 2015 年的不到十几个迅速增加到 2017 年的几百个。此时我们已经建立了坚实的运营基础:客户在待命期间很少收到通知,所有基础设施问题都由平台团队密切监控和处理。我们建立了一个强大的交付平台,帮助我们的客户在几分钟后将变更引入生产。 Keystone 产品非常擅长它最初的设计目标:一个易于使用且几乎可以无限扩展的流数据路由平台。然而,很明显,流处理的全部潜力远未实现。为了满足自定义用例,我们不断发现对复杂处理能力进行更精细控制的新需求,例如流连接、窗口化等。 同时,Netflix 拥有独特的自由和责任文化,每个团队都有权做出自己的技术决策。这种文化使每个团队甚至可以投资定制解决方案。作为一个中央平台团队,我们注意到了这种增长。如果我们没有办法提供保险,这将意味着公司的长期成本很高。 是时候让团队扩大其范围了。我们再次面临一些新的挑战。
+-----------------------------------------------------------------+
| Pattern | Product | Example Use Cases |
|-----------------------|----------|------------------------------|
| Stream-to-stream Joins| Flink | Take-fraction computation, |
| (ETL) | | Recsys label computation |
|-----------------------|----------|------------------------------|
| Stream-to-table joins | Flink | Side input: join streams with|
| (ETL) | | slow-moving Iceberg table |
|-----------------------|----------|------------------------------|
| Streaming Sessionizat-| Flink | Personalization Sessionizat- |
| ion (ETL) | | ion, Metrics sessionization |
|-----------------------|----------|------------------------------|
| RT Observability | Mantis | Distributed tracing, |
| | | Chaos EXPER monitoring, |
| | | Application monitoring |
|-----------------------|----------|------------------------------|
| RT Anomaly / Fraud | Mantis, | Contextual alert, |
| Detection | Flink | PII detection, |
| | | Fraudulent login prevention |
|-----------------------|----------|------------------------------|
| RT DevOps Decision | Mantis | Autoscaling, |
| Tool | | Streaming ACA & A/B tests, |
| | | CDN placement optimization |
|-----------------------|----------|------------------------------|
| Event Sourced | Flink | Content Delivery Network |
| Materialized View | | snapshotting |
+-----------------------+----------+------------------------------+
(Figure: how stream processing fits in Netflix — 2021)
随着流处理用例扩展到 Netflix 中的所有组织,我们发现了新模式,并享受了早期的成功。但现在不是自满的时候。 作为一家企业,Netflix 继续探索新领域,并在内容制作工作室以及最近在游戏方面进行了大量投资。出现了一系列新挑战,我们开始着手解决这些有趣的问题空间。
我将在这部分相对简短,并在以后的博客文章中扩展细节。
(Figure: the sweet spot between simplicity and flexibility)
+-----------------------------------------------------------------+
| Pattern | Product | Example Use Cases |
|-----------------------|----------|------------------------------|
| Streaming Backfill / | Flink | Pipeline Failure mitigation, |
| Restatement | | Avoid cold start |
|-----------------------|----------|------------------------------|
| Data Quality Control | Keystone,| Schema evolution management, |
| | Flink | Data Quality SLA, |
| | | Cost reduction via Avro |
| | | compression |
|-----------------------|----------|------------------------------|
| Source/Sink Agnostic | Keystone,| Delta, Data Mesh, |
| Data Synchronization | Flink | Operational reporting, |
| | | Notification, |
| | | Search Indexing Pipeline |
|-----------------------|----------|------------------------------|
| Near-real-time (NRT) | Flink | Customer service recommend- |
| Inference | | ation, Intent-based in- |
| | | session adaptations |
|-----------------------|----------|------------------------------|
| Streaming SQL | Flink | Dynamic feature Engineering |
|-----------------------|----------|------------------------------|
| Intelligent Operation | 4 | Auto-diagnosis & remediation |
+-----------------------+----------+------------------------------+
谢谢你走到这一步。这篇博文描述了在 Netflix 构建流处理基础设施的高级迭代之旅。我很想听听您对有趣之处的反馈,以便我可以跟进未来的博客文章。
根据设计,我在这篇文章中省略了许多技术细节。但如果您有兴趣了解更多信息,请参阅附录部分,了解 Netflix 中所有流处理创新的完整时间线视图。
我对数据基础设施的未来感到非常兴奋,尤其是支持更好的机器学习体验。我相信这是我们要大胆前行的下一个前沿!如果你感兴趣,我强烈推荐我的好朋友兼同事 Chip 的优秀读物“实时机器学习:挑战和解决方案”。
我也很高兴地宣布,我将与 Chip Huyen 一起开始新的旅程,在流媒体优先的机器学习平台上工作。我们还很早,我们正在寻找一位创始基础设施工程师,共同塑造未来!如果您有兴趣,我们很乐意收到您的来信! 如果这篇博文引起您的共鸣,请联系我们。我想连接!
Netflix 中的流处理模式
+-----------------------------------------------------------------+
| Pattern | Phase | Example Use Cases |
|-----------------------|----------|------------------------------|
| Data Routing | 1 | Logging, Data Movement |
|-----------------------|----------|------------------------------|
| RT Alerts / Dashboard | 1, 2 | SPS Alert, |
| | | Infrastructure Health |
| | | Monitoring (Cassandra & |
| | | Elasticsearch), |
| | | RT QoE monitoring |
+-----------------------------------------------------------------+
| RT Data Sampling/ | 2 | Cost-effective RT Insights |
| Discovery | | |
|-----------------------------------------------------------------|
| Stream-to-stream Joins| 3 | Take-fraction computation, |
| (ETL) | | Recsys label computation |
|-----------------------|----------|------------------------------|
| Stream-to-table joins | 3 | Side input: join stream with |
| (ETL) | | slow-moving Iceberg table |
|-----------------------|----------|------------------------------|
| Streaming Sessionizat-| 3 | Personalization Sessionizat- |
| ion (ETL) | | ion, Metrics sessionization |
|-----------------------|----------|------------------------------|
| RT Observability | 3 | Distributed tracing, |
| | | Chaos EXPER monitoring, |
| | | Application monitoring |
|-----------------------|----------|------------------------------|
| RT Anomaly / Fraud | 3 | Contextual alert, |
| Detection | | PII detection, |
| | | Fraudulent login prevention |
|-----------------------|----------|------------------------------|
| RT DevOps Decision | 3 | Autoscaling, |
| Tool | | Streaming ACA & A/B tests, |
| | | CDN placement optimization |
|-----------------------|----------|------------------------------|
| Event Sourced | 3 | Content Delivery Network |
| Materialized View | | snapshotting |
| Streaming Backfill / | | Pipeline Failure mitigation, |
| Restatement | | Avoid cold start |
|-----------------------|----------|------------------------------|
| Data Quality Control | 4 | Schema evolution management, |
| | | Data Quality SLA, |
| | | Cost reduction via Avro |
| | | compression |
|-----------------------|----------|------------------------------|
| Source/Sink Agnostic | 4 | Delta, Data Mesh, |
| Data Synchronization | | Operational reporting, |
| | | Notification, |
| | | Search Indexing Pipeline |
|-----------------------|----------|------------------------------|
| Near-real-time (NRT) | 4 | Customer service recommend- |
| Inference | | ation, Intent-based in- |
| | | session adaptations |
|-----------------------|----------|------------------------------|
| Streaming SQL | 4 | Dynamic feature Engineering |
|-----------------------|----------|------------------------------|
| Intelligent Operation | 4 | Auto-diagnosis & remediation |
+-----------------------+----------+------------------------------+
本文 | 链接 | |
---|---|---|
讨论:知识星球【首席架构师圈】或者加微信小号【cea_csa_cto】或者加QQ群【792862318】 | ||
公众号 | 【jiagoushipro】【超级架构师】精彩图文详解架构方法论,架构实践,技术原理,技术趋势。我们在等你,赶快扫描关注吧。 | |
微信小号 | 【cea_csa_cto】50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化. | |
QQ群 | 【792862318】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。加QQ群,有珍贵的报告和干货资料分享。 | |
视频号 | 【超级架构师】1分钟快速了解架构相关的基本概念,模型,方法,经验。每天1分钟,架构心中熟。 | |
知识星球 | 向大咖提问,近距离接触,或者获得私密资料分享。 | |
喜马拉雅 | 路上或者车上了解最新黑科技资讯,架构心得。 | 【智能时刻,架构君和你聊黑科技】 |
知识星球 | 认识更多朋友,职场和技术闲聊。 | 知识星球【职场和技术】 |
微博 | 【智能时刻】 | 智能时刻 |
哔哩哔哩 | 【超级架构师】 | |
抖音 | 【cea_cio】超级架构师 | |
快手 | 【cea_cio_cto】超级架构师 | |
小红书 | 【cea_csa_cto】超级架构师 | |
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有