Heroku负载均衡器与Netflix zuul

时间:2017-01-23 19:20:54

标签: heroku docker microservices netflix-zuul netflix-eureka

根据这个回答https://stackoverflow.com/a/41811770/2849613我想了解更多有关Heroku微服务最佳实践的信息。

问题是哪种方法更好?

  1. 将每个服务安装为独立应用,并将其中一个用作REST“代理”(例如Netflix Eureka)?
  2. 或者

    1. 创建基于docker的方法,例如Netflix Zuul作为负载均衡器?
    2. 我自己已经看到了两种方法的优点和缺点:

      1. 优点:更好的可扩展性(易于为更大的负载创建新机器)。 缺点:服务之间的通信换句话说“在heroku之外”换句话说:因为heroku app有公共地址,每个人都可以直接连接到服务(不会扔掉Eureka),因为每个服务都需要提供一些服务身份验证方法并在彼此之间共享 - 我认为这很容易发生风险。

      2. 优点:易于重现生产环境以进行测试和开发(docker image),服务之间的通信是“内部”完成的(图像到图像而不是app到app)。 缺点:难以扩展(我认为Heroku应用程序和docker镜像之间的负载平衡有点开销)。

      3. 哪种方法更好?也许我可以将它们混合在一起?或者也许有一些不同的,更好的解决方案?

        老实说我唯一确定的是,我想将rabbitMQ用作消息队列......

1 个答案:

答案 0 :(得分:4)

我更喜欢方法#1(特别是因为我知道你已经使用过Heroku)。

Docker很棒,但如果你在Heroku上部署,那么好处非常有限。原因是Heroku已经完成了Docker所做的一切:管理依赖项,安装和进程管理。 Heroku已经为您完成了所有这些工作,而无需Docker化您的环境。

关于负载平衡:它实际上并不重要。在两种情况下,如果您想在Heroku上运行,您将使用Heroku负载均衡器。这是因为没有办法绕过' Heroku堆栈的那层。

如果你想使用Docker / zuul,你肯定需要在Heroku外面做这件事。这意味着您需要执行各种其他操作,找到docker主机,管理自己的基础架构等。

所以,在我看来,#1是一个更好的选择(如果你正在使用Heroku),因为:

  1. 一切都已经为你照顾。
  2. 您可以专注于编写可扩展代码,而不是管理各种其他事情。
  3. 您的所有服务都将位于同一个AWS区域,因此即使它们会通过HTTP进行相互通信,也会非常快。