每当我部署一个 spring boot 应用程序时,它都嵌入了 tomcat 容器。它依赖于容器可用。这是否意味着这些不符合 12 因素应用程序取决于网络服务器的运行时注入?
TCP 路由对非 http 服务意味着什么?
端口绑定
通过端口绑定导出服务。12-factor 应用程序是完全独立的,不依赖于将 Web 服务器运行时注入到执行环境中来创建面向 Web 的服务。
对于 Pivotal Cloud Foundry,非 HTTP 服务需要 TCP 路由才能重新平台化。
每当我部署一个 spring boot 应用程序时,它都嵌入了 tomcat 容器。它依赖于容器可用。这是否意味着这些不符合 12 因素应用程序取决于网络服务器的运行时注入?
TCP 路由对非 http 服务意味着什么?
端口绑定
通过端口绑定导出服务。12-factor 应用程序是完全独立的,不依赖于将 Web 服务器运行时注入到执行环境中来创建面向 Web 的服务。
对于 Pivotal Cloud Foundry,非 HTTP 服务需要 TCP 路由才能重新平台化。
当您在本地运行时,Spring Boot 应用程序会使用default
配置文件运行。因此,Spring 将在运行时利用您的端口和其他设置。
当您推送到云端时,Spring Boot 应用程序会使用cloud
配置文件运行。在cloud
配置文件中,端口设置由云决定,您提供的设置将被忽略。
在 PCF 中,Diego 单元托管所有应用程序实例。Diego 单元有自己的 CIDR 块,用于托管应用程序。因此,您的应用实例将从该范围内获得 IP。而且您无法通过其 ip 访问该应用程序。
不过,Diego cell vm 运行的 IP 来自网络的 CIDR 范围。Diego cell 还使用 NAT-ing 将您的应用 ip 映射到 Diego cell vm 上的端口。这就是将流量路由到您的应用程序的方式。
如您所见,PCF 中的 Diego 单元不能依赖您提供的端口。相反,它将在可能的地方运行应用程序,并 NAT 到可用端口。
看看Diego 参考架构。
至于您的第二个问题,Cloud Foundry 中的 Go-Routers 将请求路由到应用程序实例。默认情况下,Go-Router 上仅启用 http/https 流量。您可以在 Go-Routers 上启用 TCP 路由。我相信这是在 PCF 1.9 中添加的。这是文档。