gpt4 book ai didi

web-services - ETL 的微服务架构

转载 作者:行者123 更新时间:2023-12-02 08:12:36 27 4
gpt4 key购买 nike

我正在重新设计一个用 Python 编写的小型单体 ETL 软件。我发现微服务架构很合适,因为它可以让我们在需要时灵活地使用不同的技术(在我看来,Python 并不是企业软件最好的语言)。因此,如果我们有三个微服务(称它们为 Extract、Transform、Load),我们将来可以使用 Java 来实现 Transform 微服务。

问题是,在 API 响应(比如 HTTP)中传递服务调用的结果是不可行的。 Extract 的输出将是千兆字节的数据。

一个想法是调用 Extract 并将结果存储在数据库中(这确实是该模块在单体应用程序中所做的事情,因此很容易实现)。在这种情况下,服务将只返回一个是/否响应(过程是否成功)。

我想知道是否有更好的方法来解决这个问题。什么是更好的架构?我的提议合理吗?

最佳答案

如果您的 ETL 过程适用于单个记录(一些可并行化的计算单元),那么您可以使用很多选项,这里有一些:

基于消息系统

您可以基于消息传递系统进行处理,例如 Apache Kafka .它需要仔细设置和配置(取决于特定用例的持久性、可用性和可扩展性要求),但可能比关系数据库更适合您。

在这种情况下,ETL 步骤将完全独立工作,并且只消耗一些主题,生成一些其他主题。这些其他主题然后由下一步处理,等等。E/T/L 步骤之间将没有直接的通信(调用)。

这是一个干净且易于理解的解决方案,具有独立的组件。

现成的加工解决方案

有几个用于数据处理/计算和转换的 OTS 解决方案:Apache Flink , Apache Storm , Apache Spark .

尽管这些解决方案显然会将您限制在一种特定的技术上,但它们可能比从头开始构建类似的系统要好。

非持久性

如果实际数据是基于流/记录的,并且不需要在步骤之间保留结果,则您可以通过长轮询上一步的 HTTP 输出来摆脱困境。

你说这只是太多的数据,但这些数据不必进入数据库(如果不需要的话),可以直接进入下一步。如果数据是在同一个本地网络上连续生成的(不是一批中的所有数据),我认为这不是问题。

这在技术上很容易做到,验证和监控也很简单。

关于web-services - ETL 的微服务架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45047011/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com