区分nginx、haproxy、varnish和uWSGI/Gunicorn

2024-05-13 07:56:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我对sys-admin很陌生,只为VPS配置了nginx(提供静态文件)和gunicorn作为web服务器。

我最近一直在读其他不同的东西。我开始了解其他工具:

nginx:高性能HTTP服务器和反向代理,以及IMAP/POP3代理服务器

haproxy:高性能负载平衡器

varnish:缓存HTTP反向代理

gunicorn:python WSGI http服务器

uwsgi:另一个python WSGI服务器

我一直在读关于以上5种工具的文章,我不知道哪一种工具是用于什么目的的?有人能不能用外行的话来解释一下,每一个工具放在一起有什么用,一起使用的时候有什么用,他们要解决的具体问题是什么?


Tags: 文件工具服务器webhttpwsgi代理admin
3条回答

我将为每一个设置一个非常简洁(非常非正式)的描述,按照您在web浏览器中提出请求时的顺序:

  • HAProxy平衡你的流量负载,因此如果你的网页每秒收到5000次点击,你就不能只处理一次 网络服务器,所以HAProxy会在你的网络服务器之间平衡点击 在后面。

  • Varnish是一个缓存服务器,它位于web服务器的前面和HAProxy的后面,因此如果Varnish已经缓存了一个资源,那么它将为请求本身提供服务,而不是 将请求传递给后面的web服务器。

  • gingxgunicornuwsgi是web服务器,它将位于varnish后面,并将获得varnish将允许通过的请求 通过。这些web服务器使用优化的设计来处理高 加载(每秒请求数)。

假设你计划在你的新VPS上托管几个网站。让我们看看每个站点可能需要的工具。

HTTP服务器

网站“Alpha”只是由一些纯HTML、CSS和Javascript组成。内容是静态的。

当有人访问Alpha网站时,他们的浏览器将发出一个HTTP请求。您已配置(通过DNS和名称服务器配置)请求定向到VPS的IP地址。现在您需要您的VPS能够接受该HTTP请求,决定如何处理它,并发出访问者浏览器可以理解的响应。您需要一个HTTP服务器,比如Apache httpd或NGINX,假设您做了一些研究,最终决定使用NGINX。

应用服务器

网站“Beta”是动态的,使用DjangoWeb框架编写。

描述Python应用程序(django应用程序)和应用服务器之间接口的WSGI is an protocol。因此,您现在需要的是一个WSGI应用服务器,它将能够理解web请求,对应用程序的各种对象进行适当的“调用”,并返回结果。这里有很多选项,包括gunicorn和uWSGI。假设你做了一些研究,最终决定了uWSGI。

uWSGI也可以接受和处理静态内容的HTTPS请求,所以如果你想的话,你可以让NGINX完全提供网站Alpha,uWSGI完全提供网站Beta。就是这样。

反向代理服务器

但是uWSGI在处理静态内容方面的性能很差,所以您宁愿使用NGINX来处理静态内容,比如图像,甚至在网站Beta上也是如此。但接下来就必须区分请求并将它们发送到正确的位置。有可能吗?

NGINX不仅是一个HTTP服务器,而且还是一个reverse proxy服务器:它能够将传入的请求重定向到另一个地方,比如uWSGI应用服务器,或者许多其他地方,收集响应并将它们发送回原始请求者。令人惊叹的!因此,您可以将所有传入的请求配置为转到NGINX,NGINX将提供静态内容,或者在需要时将其重定向到app服务器。

多台web服务器的负载平衡

你还主持了Gamma网站,这是一个在国际上很受欢迎的博客,收到了大量的流量。

对于Gamma,您决定设置多个web服务器。所有传入的请求都将通过NGINX发送到原始VPS,然后配置NGINX以循环方式将请求重定向到其他几个web服务器之一,并将响应返回给原始请求者。

HAProxy是一个专门为高流量站点平衡负载的web服务器。在本例中,您可以使用NGINX处理站点Gamma的流量。在其他场景中,可以选择设置高可用性集群:例如,将所有请求发送到像HAProxy这样的服务器,该服务器智能地将流量重定向到与原始VPS类似的nginx服务器集群。

缓存服务器

由于流量太大,网站Gamma超出了VPS的容量。假设您托管的是网站Delta,而您的web服务器无法处理Delta的原因是因为一个流行的功能非常重的内容。

缓存服务器能够理解哪些媒体内容被频繁请求,并以不同的方式存储这些内容,以便能够更快地为其提供服务。这是通过减少磁盘IO操作来实现的;流行的内容可以存储在内存或虚拟内存中。您可能决定将现有的NGINX堆栈与VarnishMemchached等技术结合起来,以更有效地实现这种优化和服务器网站Gamma。

First gunicorn和uwsgi都是应用服务器。换句话说,它们负责以稳定和高效的方式运行您的python代码。通常作为常规web服务器的后端。

webserver将是nginx,它擅长于为静态资产提供服务,并将对动态内容的请求传递给appserver。

如果你在nginx和客户端之间的varnish中没有提供足够的性能,那么它应该会加速对同一事物的重复请求。

haproxy是一个负载平衡器,如果您有多个服务器用于相同的内容,则此软件将尝试以最佳方式在这些服务器之间分发请求。

所以基本上:

  1. python代码位于appserver(uwsgi或gunicorn)中
  2. 您的静态web资产位于nginx中
  3. haproxy和varnish是一种软件,允许您更好地处理大量的请求

相关问题 更多 >