作者:Matteo —— Co-Founder @ Dozer
英文原文:https://getdozer.io/blog/why-you-might-not-need-a-data-platform
现如今,我见到的每一家公司都有数据平台。即便现在没有的,他们也想要一个。但问题是,建立和维护一个数据平台并不是一件简单的事情。首先,需要将多个工具进行集成,包括 Airflow、Spark、Presto、Kafka、Flink、Snowflake 等等。但更重要的是,需要建立一个专门的工程团队来维护以确保一切运行顺利。通常情况下,当数据积累了数月之后,运行这样的基础设施的成本会比收益还高。
所以问题来了:数据平台真的是必须的吗?
Get back to the basics
让我们以一个中等规模的公司为例,开始一个搭建数据平台的奇遇。一般来说,这么做有两个目的:
- 数据分析:能够从历史数据生成 analytical dashboards
- AI 和高级用例,如实时用户个性化
通常,为了实现第一个用例,会设置一个Snowflake 或 Databricks 实例,并将所有数据都转储到那里。但是等等!你真的需要它吗?很可能您没有要管理的 Petabytes 级别的数据。那么换个更轻量的方案如何?
如果你熟悉数据领域,你可能听说过像 Pola.rs、Datafusion 或 DuckDB 这样的工具!它们是小巧而高效的 OLAP 查询引擎,可以实现惊人的性能。它们之所以如此高效,是因为它们的作者决定回归基础。忘记像 Apache Spark 这样的分布式数据处理框架,忘记像 Java 或 Scala 这样20年的老语言(它们带来的所有 GC 问题都忘掉!),采用像 C/C++ 这样的低级语言来拥抱简单,用 Rust 更好,利用每一个 CPU 周期以获取尽可能多的性能。
因此,将所有 OLTP 数据转储到 S3 存储桶中,并启动多个 DuckDB、Pola.rs 或 DataFusion 的实例,运行所有 OLAP 查询并关闭所有实例,这是非常简单的。这样做的成本几乎可以忽略不计。许多公司意识到了这种方法的潜力,并围绕这些工具构建了我所说的“Poor’s men data platforms”。例如,MotherDuck 正在使用 DuckDB 进行这项工作。
How about real-time ?
尽管这种精益方法在批量工作负载方面非常容易实现,但当我们开始解决更复杂的用例,如人工智能或实时个性化时,情况就不那么简单了。实时性更难以实现,在许多情况下,实时用例的目标不仅是生成 analytical dashboards,而是将数据与面向客户的应用程序完全集成,从而实现另一种交互水平。最简单的例子可能是用户个性化。对于这种用例,需要结合来自多个源的数据,应用 ML 模型,而且在某些情况下,需要根据用户行为更新数据。所有这些都要在实时环境下完成!
如今要实现这一点并不容易。一些公司已经放弃了在实时环境下处理所有这些数据的做法,因为它太过复杂和昂贵。例如,想象一下反向 ETL 和个性化 API 在大多数情况下如何实现:所有的一切仍然都是批处理!使用像 AirByte 或 Fivetran 这样的工具提取数据,并加载到你的 Snowflake 或 Databricks 中。然后,每天或每小时运行 DBT 作业,提取所需的数据,运行 ML 模型,并将结果加载到某些缓存或低延迟数据库中以提供服务。很多公司都在尝试提出简化这一过程的解决方案,但一切仍然是:分批处理!
如果你想要的比这更多,那肯定是可能的,但这很复杂!你需要一个能够处理实时数据的整个基础设施(例如 Kafka),一个流处理引擎(例如 Spark Streaming、Flink、Kafka Streams),一个或多个低延迟的数据存储,这取决于你的应用程序的查询模式(例如 Redis、Aerospike、ElasticSearch),一个 API 层,最重要的是,需要有一个数据工程师团队,能够把所有这些组件放在一起!
Enter the Data Apps world
那么,有没有一种方法可以像 DuckDB 或 Pola.rs 一样实现这种简单性?可能是的,答案是数据 APP。什么是数据 APP ?实际上没有一个准确的定义,但我喜欢这样描述一个数据 APP :
一个自包含的单体应用程序,能够高效地提供数据,并且同时能够实时响应数据变化,并执行复杂的操作,如 joins, aggregations, ML predictions, notifications 等。
这个定义是比较宽泛的。但是,从根本上来说,我认为数据 APP 是源系统和用户面向应用程序之间的桥梁,实现高级数据交互和可操作性。
忘掉 streams, caches, pipelines 等等!只需在源系统和用户应用程序之间放置一个数据 APP 后端,就会有奇效产生!
其中一些想法是由一个非常成功的工具StreamLit 所开创的:一种允许数据科学家使用 Python 快速制作 数据APP 的原型的 Python 框架。虽然 StreamLit 是一个美好且强大的工具,但还未发挥数据 APP 的全部潜力,特别是当整个后端生态系统需要连接时。
The software engineer’s perspective
StreamLit 最初的想法是让没有 UI 开发经验的数据科学家展示他们的工作,并让用户与他们的 ML 模型交互。现在,让我们从全栈或前端工程师的角度来思考数据 APP。我想要的是一种快速的方式,可以从多个来源中获取生产数据,使用熟悉的工具(如 SQL、Javascript 和 Python)实时处理数据,并具有预制的 APIs,允许我与数据交互。我想要查询,并且我想触发事件,这些事件可能会传播回源系统,并且实时查看我的更改如何影响系统。
作为全栈工程师,我想要全面的数据工程团队的能力!
The bottom line
如果所有这些都是可能的,意味着有 lambda 或 kappa 架构的典型数据平台不再那么复杂了。使用像 DuckDB 这样的工具可以轻松处理批处理工作负载,而一堆分散在源系统和用户之间的组织中的实时数据 APP 可以轻松处理实时工作流程。
这一切促使我们创建 Dozer。一个专门针对全栈和前端工程师的实时数据 APP 后端。我们的使命是赋予全栈开发者数据超能力!
了解更多
- GitHub:https://github.com/getdozer/dozer
- Discord:https://discord.com/invite/3eWXBgJaEQ
- 推特:https://twitter.com/GetDozer
- 领英:https://www.linkedin.com/company/getdozer/
- 公众号:GetDozer