Zuul API GW 作为 docker 容器还是作为 Java Spring 应用程序的一部分?

Zuul API GW as a docker container vs. as part of a Java Spring application?

我正在将我的整体式应用程序分解为一组用 Java Spring 编写的微服务。作为我的微服务架构的一部分,我正在实现一些基本模式,例如服务发现、API 网关等。 我使用“@EnableZuulProxy”将我的 API 网关实现为 Spring 启动应用程序,它是 Spring 云项目的一部分。 我的问题是:

  1. 我的实现和使用 Zuul 有什么不同 docker 图片是现成的?
  2. 每种方法的优缺点是什么?

如果您使用 Zuul API 网关作为 jar 或 Docker 容器,肯定没有区别。在这两种情况下,它都扮演着 API 网关的角色。

Ops(与 DevOps)、构建、检查、销毁和发布的方式、控制实例数量等方面存在差异。

如果您选择 Docker 作为基础设施的主要部分,并使用 Docker Swarm、Mesos & Marathon、Kubernetes、Nomad 等管理它,那么请包装您的 API 通往 Docker.

的门户

如果您手动 运行 您的 Docker 容器,使用控制台和 docker run 命令,您可以将 API 网关保留为 jar 构建。但是,你失去了容器化的所有好处。

这两种解决方案都支持应用程序实例之间的平衡。

主要区别是:

  • Zuul API GW :

    • 无法自动启动新实例(您应该手动缩放)
    • 无需容器化您的应用程序
  • Docker container orchestrator (Docker Swarm, Kubernetes ...) 具有自动扩展的能力(启动新实例在需要的时候)