我对sys-admin很陌生,只为VPS配置了nginx(提供静态文件)和gunicorn作为web服务器。
我最近一直在读其他不同的东西。我开始了解其他工具:
nginx:高性能HTTP服务器和反向代理,以及IMAP/POP3代理服务器
haproxy:高性能负载平衡器
varnish:缓存HTTP反向代理
gunicorn:python WSGI http服务器
uwsgi:另一个python WSGI服务器
我一直在读关于以上5种工具的文章,我不知道哪一种工具是用于什么目的的?有人能不能用外行的话来解释一下,每一个工具放在一起有什么用,一起使用的时候有什么用,他们要解决的具体问题是什么?
我将为每一个设置一个非常简洁(非常非正式)的描述,按照您在web浏览器中提出请求时的顺序:
HAProxy平衡你的流量负载,因此如果你的网页每秒收到5000次点击,你就不能只处理一次 网络服务器,所以HAProxy会在你的网络服务器之间平衡点击 在后面。
Varnish是一个缓存服务器,它位于web服务器的前面和HAProxy的后面,因此如果Varnish已经缓存了一个资源,那么它将为请求本身提供服务,而不是 将请求传递给后面的web服务器。
gingx,gunicorn,uwsgi是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堆栈与Varnish或Memchached等技术结合起来,以更有效地实现这种优化和服务器网站Gamma。
First gunicorn和uwsgi都是应用服务器。换句话说,它们负责以稳定和高效的方式运行您的python代码。通常作为常规web服务器的后端。
webserver将是nginx,它擅长于为静态资产提供服务,并将对动态内容的请求传递给appserver。
如果你在nginx和客户端之间的varnish中没有提供足够的性能,那么它应该会加速对同一事物的重复请求。
haproxy是一个负载平衡器,如果您有多个服务器用于相同的内容,则此软件将尝试以最佳方式在这些服务器之间分发请求。
所以基本上:
相关问题 更多 >
编程相关推荐