微服务架构

Microservice architecture

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

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

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

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

以后打算用nifi处理CSV数据导入SQL数据库

这是个好方法吗?我打算在 Java.

中编写此应用程序

解决方案背后的原因

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

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

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