【问题标题】:Microservice architecture微服务架构
【发布时间】:2017-07-20 08:52:04
【问题描述】:

我们有多个用 Java、C#、nodeJS 和 python 编写的独立应用程序。所有这些应用程序都有一个共同的属性——它们使用 REST API 根据每个客户的时间表从某个源中提取数据并将其存储在 CSV 文件中,然后使用存储的过程将数据从 CSV 文件导入不同的 SQL 数据库。每个应用程序都用于集成来自不同第三方服务的数据。

例如 - 应用 A 从源 A' 获取数据,应用 B 从源 B' 获取数据

我正在考虑通过编写一个可以处理从不同来源提取数据的多租户单一应用程序来替换这些多个单独的应用程序。所有这些单独的小型应用程序都将配置为用 Java 编写的自定义作业。例如 - REST API 身份验证、创建 CSV 之前的数据预处理等。

所以,我想编写一个从源 A' 获取数据的作业(Java 文件)和另一个从源 B' 获取数据的作业。主应用程序将执行此自定义作业。主应用程序将支持诸如作业调度、日志记录等常用功能。

以后我打算用nifi来处理从CSV到SQL数据库的数据导入。

这是一个好方法吗?我打算用 Java 编写这个应用程序。

解决方案背后的原因

  • 要维护多个代码库
  • 拉取数据没有并发
  • 所有这些应用程序都部署为单个实例

如果我需要更新一项作业,我需要部署整个应用程序。如何绕过这个过程?有什么方法可以只部署作业而不是整个应用程序?

构建此解决方案的好方法是什么?

【问题讨论】:

  • DBIS 可以帮助您整合数据。它是用Java编写的。不需要编写脚本。只有配置。 dbisweb.wordpress.com
  • 如果公司有资源和预算,这种情况非常适合使用 Microsoft BizTalk Server。

标签: architecture microservices apache-nifi distributed-system


【解决方案1】:

我认为,如果您能够稍微调整一下您的命名法/方法,您会发现您可以使用 Apache NiFi 来执行系统中的几乎所有任务。虽然 NiFi 旨在处理流数据而不是批处理/作业,但您可以使用 CRON 计时来安排任务执行(初始 REST API 调用和数据检索),然后将流文件发送到后续处理器。使用此模型,您可以摄取数据,将数据视为离散记录,并在 XML、JSON、CSV、Avro 等各种格式之间轻松转换,过滤、路由、转换和查询数据,然后将其路由到目标 SQL 数据库。所有这些操作都将具有实时监控、出处记录、审计、可重播性、日志记录、细粒度用户访问控制等。这还将带来额外的好处,即您无需编写任何代码来处理这些活动——您只需将组件拖放到流上即可。您可以对流的任何部分进行修改,而不会影响无关的操作,因此不会中断数据流。

【讨论】:

  • 我实际上是在阅读更多 no NIFI 并发现通过编写自定义处理器,我可以处理复杂的步骤。谢谢!