Heroku负载平衡器与Netflix zuul

根据这个答案https://stackoverflow.com/a/41811770/2849613我想获得有关Heroku的微服务的最佳做法的一些信息。

问题是哪种方法更好?

  1. 安装每个服务作为独立的应用程序,并使用其中之一作为REST“代理”(例如Netflix Eureka)?

要么

  1. 创build基于Docker的方法,例如Netflix Zuul作为负载均衡器?

就我自己而言,我已经看到两种方法的优点和缺点:

  1. 优点 :更好的可扩展性(易于创build更大的负载的新机器)。 缺点 :服务之间的通信是“在heroku之外”换句话说:因为heroku应用程序有公共地址,所有人都可以直接连接到服务(不用扔尤里卡),因为每个服务都需要提供一些authentication方法,并在每个服务之间共享其他 – 我认为这是风险。

  2. 优点 :易于复制testing和开发的生产环境(docker图像),服务之间的通信是“内部”完成的(图像到图像而不是应用程序到应用程序)。 缺点 :难以扩展(我认为Heroku应用程序和Docker镜像之间的负载平衡有一点点负担)。

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

老实说,我相信唯一的事情是,我想用rabbitMQ作为消息队列…

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

Docker非常好,但是如果你在Heroku上部署的话,它的好处是非常有限的。 之所以Heroku已经完成了Docker所做的一切:pipe理依赖关系,安装和stream程pipe理。 Heroku已经为您做了所有这些工作,而无需使用Docker进行额外的工作。

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

如果你想使用Docker / zuul,你肯定需要在Heroku的外面做。 这意味着你需要做各种其他的事情,找一个docker主持人,pipe理你自己的基础设施等等。

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

  1. 一切都已经为你照顾。
  2. 你可以专注于编写可伸缩的代码,而不是pipe理各种其他的东西。
  3. 您的所有服务都将位于同一个AWS区域,因此即使它们将通过HTTP进行对话,也会非常快速。