8

在关于端口绑定的 12 Factor 文章 http://12factor.net/port-binding中,要求每个应用程序都是独立的,并且没有注入运行时,例如 Tomcat。出于什么原因,建议这样做......微服务的自包含应用程序有什么优势?

4

2 回答 2

11

要了解有关端口绑定和自包含应用程序的规则,从旨在运行 12 要素应用程序(如HerokuDeis )的平台的角度来看待事物会很有帮助。

这些平台正在流程级别扩展应用程序。当流程扩大时,平台会尝试将这些额外的工作人员放置在路由网格后面,以便他们可以开始服务流量。如果应用程序不是自包含的,例如,它与使用的前端 Apache 服务器紧密耦合,mod_jk则无法通过运行更多隔离的工作进程来扩展。

端口绑定的存在是为了解决平台级别的“端口代理”问题。如果每个应用程序工作人员都在端口 80 上进行侦听,则会发生冲突。为了解决这个问题,端口绑定是一种约定,应用程序在该端口上侦听平台已分配的端口——并将其作为$PORT环境变量传入。这可以确保 a) 应用程序工作人员在正确的端口上进行侦听,并且 b) 平台知道将发往该工作人员的流量路由到哪里。

于 2014-11-26T02:27:23.900 回答
3

我认为这是因为当需要扩展您的应用程序时,它为您提供了很大的灵活性。如果您使用 tomcat,则必须复制您的 .war 并将其放入另一个 tomcat 中,然后将您的请求负载平衡到其中任何一个。

相反,如果您的应用程序有一个自包含的 http 服务器,那么您只需在另一个端口上运行另一个实例,而忘记所有那些 tomcat 的东西。您仍然需要将您的请求负载平衡到您的任一应用程序实例,但似乎更直接。

于 2014-10-22T11:52:00.517 回答