在微服务之间共享大文件的最佳架构

时间:2015-12-19 23:42:44

标签: nfs microservices data-sharing

我即将开始使用面向微服务的架构(教育目的)重新设计旧的单片软件。为了给出一些上下文,旧软件在一个功能强大的服务器上运行,该服务器执行以下操作:

  1. 从制作人处接收批量数据(二进制文件)。
  2. 累积每个制作人的批量数据。
  3. 定期对每个生产者的累积数据执行批处理操作,并存储结果(另一个二进制文件)。
  4. 现在,我想为此批处理操作创建一个单独的微服务。我希望这个微服务在几十台机器上执行并行处理,这样我就可以处理大量的生产者。

    每个微服务实例将接收包含每个生产者数据的二进制文件,并输出另一个二进制文件。问题是这些文件可能很大(例如,每个生产者可能产生20Mb的累积数据)。我遇到了几种解决这个问题的方法,但我不相信任何方法:

    1. 使用HTTP调用在微服务之间发送二进制数据。我没试过,但这似乎不合理。
    2. 将所有数据存储在每个微服务可以下载的中央数据存储库中。也许我可以使用某种NFS,但我不确定这是否是一个不错的选择。此外,这不符合微服务理念吗?
    3. 拥有每个微服务附近的所有数据的副本。我恐怕最终会遇到一致性问题。
    4. 您认为什么是最佳选择(如果有的话)?谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,您的微服务R可以描述为"接收每个生产者批处理数据并公开REST API以列出,管理和检索此数据"。

此服务需要将这些数据保存在商店中(您是否考虑过数据库?Postgresql最多可以存储2个大小的blob),出于架构原因,我建议不要通过实际文件公开内容通过HTTP(你知道你可以使用HTTP检索文件的任意部分吗?)。

这允许您通过网络流式传输文件(无需将整个文件存储在内存中),必要时具有访问控制,记录访问和使用时间等。