Java 为什么12要素应用程序应该是独立的?

Java 为什么12要素应用程序应该是独立的?,java,paas,12factor,microservices,Java,Paas,12factor,Microservices,在关于端口绑定的12因素文章中 有一个要求是每个应用程序 是自包含的,并且没有注入运行时,例如Tomcat。对于 这是什么原因。。。用于微服务的自包含应用程序有哪些优点?我认为,这是因为当需要扩展应用程序时,它为您提供了很大的灵活性。如果您使用tomcat,您必须复制.war并将其放入另一个tomcat中,然后将您的请求负载平衡到其中任何一个 相反,如果你的应用程序有一个自包含的http服务器,你只需在另一个端口上运行另一个实例,就可以忘记所有tomcat的东西。您仍然需要将您的请求负载平衡到任

在关于端口绑定的12因素文章中 有一个要求是每个应用程序 是自包含的,并且没有注入运行时,例如Tomcat。对于
这是什么原因。。。用于微服务的自包含应用程序有哪些优点?

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


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

要了解端口绑定和自包含应用程序的相关规则,从设计用于运行12因素应用程序的平台(如或)的角度来看问题是很有帮助的

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


端口绑定的存在是为了解决平台级的“端口代理”问题。如果每个应用程序工作人员都在端口80上侦听,则会发生冲突。为了解决这个问题,端口绑定是一种约定,应用程序在平台分配的端口上侦听,该端口作为
$port
环境变量传入。这确保了a)应用程序工作人员在正确的端口上侦听,b)平台知道在何处路由发送给该工作人员的流量。

您可以使用嵌入式tomcat或嵌入式jetty公开您的服务