Apache Airflow-将DAG工作流程与外部域集成,例如Java服务

时间:2020-02-19 22:29:31

标签: domain-driven-design airflow messagebroker

我们假设 Apache Airflow 中有一个工作流程,其中包含一些任务。

  • 需要集成一个运算符(我们称其为DOMAIN_1) 外部域(例如DOMAIN_2)的结果/信息。
  • 可以通过发布在Message中的Doman Event来实现 经纪人。我提到的外部域(DOMAIN_2)可以在上面订阅 消息并执行业务逻辑。

这种分布式体系结构的目标之一是努力拥有自治模块:

  • 因此异步消息似乎是最合理,最有利的
  • 它允许一个模块暂时不可用或独立部署
  • 另一方面,
  • 团队应负责Message Broker的HA(高可用性)

替代解决方案可能是:

  • 通过REST端点触发外部域-但在我看来,这似乎是暂时的耦合。
  • 这会影响模块的自治性,在生产中会有大量流量的情况下,您无法计划DOMAIN_2的发布
  • 这是一种临时耦合
  • 如果DOMAIN_1做了一些工作却无法与DOMAIN_2集成,该怎么办-谁会注意并尝试重复以前失败的DOMAIN_2端点请求。

可能还有其他一些架构解决方案,例如将DOMAIN_1状态保留在数据库中,然后在DOMAIN_2中具有一些计划的Java服务,该服务将尝试根据上述保留的信息来处理业务逻辑。

Apache Airflow中是否有可以解决这种情况的模式?

  1. 可能总是通过REST作为具有某些重复策略的单独运算符来触发DOMAIN_2。 Apache Airflow中有GUI,用户可以过滤过滤器并尝试不时手动重复失败的任务。

    • 缺点:似乎会产生耦合
  2. Apache Airflow是可扩展的,由Message Broker和分布式任务引擎(Celery)驱动。也许仅仅是为了与其他域集成而引入额外的维护RabbitMQ的开销是没有意义的?

    • 至少这样的解决方案似乎很糟糕
  3. 即使异步通信也不能保证DOMAIN_2将正确传递和处理消息
    • 恰好一次交付/至少一次交付-哪个可以实现?

0 个答案:

没有答案