为啥在编排的容器化架构中,我们需要一个 Web 服务器和一个应用服务器?

Posted

技术标签:

【中文标题】为啥在编排的容器化架构中,我们需要一个 Web 服务器和一个应用服务器?【英文标题】:Why do we need a web server along side an app server in an orchestrated containerised architecture?为什么在编排的容器化架构中,我们需要一个 Web 服务器和一个应用服务器? 【发布时间】:2020-06-10 12:05:51 【问题描述】:

假设我使用像 Flask 这样的框架来处理请求,我知道 Web 服务器处理静态文件请求并将任何程序执行请求定向到应用程序服务器。示例:nginx。应用服务器既可以处理静态文件,也可以处理程序执行。示例:gunicorn。

拥有一个 Web 服务器来处理静态文件、缓存、请求重定向、负载平衡是很有意义的。请求首先到达 Web 服务器,它知道如何处理它并将任何程序执行重定向到应用服务器。

但是,在我们使用编排和容器化的架构中,即 - 存在节点集群,每个节点运行一个容器 - 假设容器只有应用服务器(例如:gunicorn),并且请求到达API 管理/网关(具有与 Web 服务器相同的功能 - 除了提供静态文件),被重定向到节点集群(进行负载平衡),最终请求到达包含应用服务器的节点(例如:gunicorn)处理请求。

在这样的配置中让 Web 服务器与应用服务器一起运行有什么好处吗?

在 Azure 中,API 网关是否扮演 webserver 等价物的角色?

【问题讨论】:

【参考方案1】:

这取决于。在 API 网关中有一些代理/路由逻辑(例如 url 重写)是很常见的,所以这可能就是为什么您可以在容器中拥有应用服务器和 Web 服务器的原因。

在 Azure 中,API 管理是一个完全托管的 API 网关,它允许您实现缓存、路由、安全性、API 版本控制等。

更多信息:

https://microservices.io/patterns/apigateway.html

https://docs.microsoft.com/en-us/dotnet/architecture/microservices/architect-microservice-container-applications/direct-client-to-microservice-communication-versus-the-api-gateway-pattern

【讨论】:

你的答案中的“两者”是什么意思? 您还没有提到让 Web 服务器与容器内的应用服务器一起运行而不是只有应用服务器有什么用? 如果您需要代理/路由逻辑(例如 url 重写),您会发现应用服务器和 Web 服务器在容器内运行。另一种选择是外部工具,正如您在 Azure 上提到的 API 管理。 你的意思是-如果代理/路由位由API网关处理,那么容器内就不需要Web服务器(只有应用服务器就足够了)。如果没有 API 网关,那么我们需要容器内的 Web 服务器(配置代理/路由)以及应用服务器。对吗? 您总是需要 API 网关。您可以将一些东西移动到 sidecar 模式(服务网格)或将其留在 API 网关中。没有对错之分……取决于您的场景、API 网关中可用的功能、成本、许多因素……

以上是关于为啥在编排的容器化架构中,我们需要一个 Web 服务器和一个应用服务器?的主要内容,如果未能解决你的问题,请参考以下文章

从容器化编排到代理,一个完整的微服务架构总共分几步?

架构师修炼之微服务部署 - 容器与集群编排

测试环境docker化—容器集群编排实践

测试环境docker化—容器集群编排实践

kubeadm安装Kubernetes 1.14最佳实践

技术培训 | 资源编排,人人都可以成为架构师