【问题标题】:Should I make a service for shared Docker dependencies?我应该为共享的 Docker 依赖项提供服务吗?
【发布时间】:2015-01-17 00:26:07
【问题描述】:

我有 3 种不同的服务,它们使用 GraphicsMagick 作为依赖项,我刚开始使用 Docker。所以我想知道,我是否应该为 GraphicsMagick 制作一个单独的轻 API(可能使用 PHP)并将它放在一个单独的 Docker 容器中?由于 GraphicsMagick 只是一个可执行文件。

或者它会很慢,最好的方法是安装 GraphicsMagick 作为每个服务容器的依赖项?

谢谢!

【问题讨论】:

  • GraphicsMagick 是否作为单独的进程运行?这 3 个服务如何与之通信?
  • @UsmanIsmail 这只是一个可执行文件。由于它与所有这 3 个服务都安装在同一台机器上,因此我可以在 Java 中执行类似的操作: Process p=Runtime.getRuntime().exec(command);我正在考虑制作一个简单的 REST API,以便可以将其作为服务调用。
  • 为什么不将它安装到一个卷中,然后在 3 个容器之间共享该卷?或者更好的是在众所周知的位置创建一个包含 GraphicsMagick 库的基础容器,然后在 3 个 dockerfile 中使用 with base。
  • @UsmanIsmail “与基地”可能是最好的主意。我只是想知道制作一个 API 并将其作为服务调用是否会更好。谢谢!
  • 我认为将其作为服务运行没有任何优势。

标签: api docker soa


【解决方案1】:

正如 cmets 和您最初的问题中所述,这里有两种方法。一种是仅在基础映像或单个服务映像中安装 GraphicsMagick。另一种方法是构建一个特定于 GraphicsMagick 的单独服务(一种工作程序或图像处理 API)。我想答案将取决于目前对您来说最重要的利弊。

基本图像中的GraphicsMagick 具有易于实现的优点。您不必构建额外的东西。 GraphicsMagick 二进制文件安装起来应该不会很麻烦,并且可能只会为最终生成的图像增加几 MB 大小。

使用 GraphicsMagick 构建单独的 API 服务映像会产生开发时间和服务复杂性的开销。您可能还需要使用此模型实现某种服务发现,以便您的其他服务映像知道如何访问此新 API。不过,在未来,这将是更具可扩展性的模型。根据您的负载位置,这可以帮助与其他服务容器分开扩展,并且如果需要也可以在单独的主机上运行,​​尤其是当图像操作可能使用 CPU 并饿死其他服务时。

所以我会问自己这些问题:

  • 您能负担得起额外的开发时间吗?
  • 应用程序是否需要这种单独的可扩展性?
  • 管理可能还需要一些服务发现的附加服务是否没有问题?

如果您对所有这些问题的回答都是肯定的,那么您可能会为此构建一个单独的服务。 Docker 绝对适合面向服务的架构,这可能是构建应用程序的更合适的方式。但是对于“刚刚好”并且现在实施所需时间最短的东西,可以说很多话,特别是如果它可以在很长一段时间内正常工作的话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2016-02-18
    • 2020-10-22
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多