PCF将运行嵌入在Spring boot jar中的tomcat,还是它运行自己的Tomcat。在PCF中,我们从不提及端口号。在经典的方法中,我们在不同的端口号上启动3个Tomcat实例,并在此之前拥有apache服务器。PCF也是这样工作的吗?
发布于 2019-04-16 20:59:16
这是一个相当宽泛的问题,所以我将用一个相当宽泛的回答来回答,但如果你倾向于挖掘更多细节,请链接到你可以找到更多细节的地方。
在内部如何工作当部署Spring boot项目时,PCF将运行嵌入到Spring boot jar中的tomcat,或者它运行自己的Tomcat。
当您运行cf push -p my/cool/file.jar (甚至是file.war)时,CF cli会从该归档文件中提取所有内容,并将其推送到cf。CF存储您的应用程序文件,然后将您的应用程序暂存。
在试运行期间,Java构建包将运行。它会查看所有推送的文件,并尝试确定如何处理这些文件。它知道如何处理几种不同类型的应用程序1,包括标准WAR文件和Spring Boot应用程序。build pack将检查你的应用程序,看看它是否是order 2中支持的类型之一,并选择第一个匹配类型。
选择应用程序类型后,它会运行并安装运行应用程序所需的内容。对于Spring Boot应用程序,这基本上就是JVM。对于WAR文件,它安装Tomcat &一个JVM。此外,它还写出了CF启动应用程序所需的配置和启动命令。
在这一点上,阶段是完成的,你有了所谓的“液滴”。如果您对试运行工作流程有任何其他问题,请阅读此处以了解更多详细信息3。
此时,应用程序将启动。该平台获取创建的快捷批处理程序,并执行构建包指定的命令来启动应用程序4。如果一切顺利,您的应用程序将在CF上启动并运行。
在
中,我们从不提及端口号。
对,是这样。平台将告诉您应用程序应该侦听的端口。对于Java应用程序,您无需执行任何操作。Java构建包将处理配置Spring Boot或Tomcat以在正确的端口上启动和侦听。
对于Spring Boot应用程序,您可以查看start up命令来了解它是如何做到这一点的。对于Tomcat,它发生在由Java buildpack5生成的server.xml中。
在经典的方法中,我们在不同的端口号上启动3个Tomcat实例,并在此之前拥有apache服务器。PCF也是这样工作的吗?
是也不是。您运行的每个应用程序都可以有多个实例。如果您将您的应用程序扩展到有三个实例,这将大致相当于在您的经典方法中有三个Tomcat实例。
主要区别在于前面没有Apache Web Server。在Cloud Foundry上,这是不必要的,因为它有自己的负载均衡器,称为Gorouter 6,它处理代理到您的应用程序的流量,并在可用应用程序实例之间进行负载平衡。
这是CF新手犯的一个经典错误。他们试图复制经典的架构,并在不必要的时候在他们的应用程序中硬塞一个反向代理。这是CF的优点之一。它以一种可扩展的方式将流量路由到您的应用程序,让您可以更多地专注于您的应用程序。
标准容器1请参见“ Containers -> https://github.com/cloudfoundry/java-buildpack#additional-documentation
”
发布于 2019-11-26 04:30:11
不是的。简单的答案是,您的应用程序jar的每个实例都运行在PCF中自己的容器中。因此,使用相同的端口号不会发生冲突。
https://stackoverflow.com/questions/55699991
复制相似问题