我曾经看到有人build议将所有这些内容合并到一个stream程中,但是它们似乎有很多重叠的特性,所以我想深入了解为什么在访问实际的Web服务器之前可能需要通过3个不同的程序。
nginx的:
漆:
HAProxy的:
将所有这些链接在主要Web服务器之前的目的仅仅是为了获得其主要function优势?
有这么多的守护进程一起做类似的事情似乎相当脆弱。
你的部署和订购偏好是什么?为什么?
简单的说..
HaProxy是市场上最好的开源负载均衡器。
清漆是市场上最好的开源静态文件夹。
Nginx是市场上最好的开源networking服务器。
(当然这是我和许多其他人的意见)
但是一般情况下,并不是所有的查询都通过整个堆栈。
一切都通过haproxy和nginx /多个nginx的。
唯一的区别就是你对静态请求的“清除”。
总的来说,这个模型适合一个可扩展的和不断增长的架构(如果你没有多个服务器,那就把haproxy拿出来)
希望这有助于:D
注:我其实也介绍庞德SSL查询:D
你可以有一个专用于解密SSL请求的服务器,并将标准请求传递给后端堆栈:D(它使整个堆栈运行更快,更简单)
在2016年更新。事情正在发展,所有服务器都变得越来越好,它们都支持SSL,networking比以前更加惊人。
除非另有说明,以下是针对商业和初创企业的专业人士,支持数千至数百万用户。
这些工具和架构需要大量的用户/硬件/资金。 你可以在家庭实验室尝试这个,或者运行一个博客,但这没有多大意义。
作为一般规则,请记住,您要保持简单 。 附加的每个中间件都是维护中间件的另一个关键部分。 当没有东西要添加,但没有什么可以去除的时候,完美还没有实现。
networking服务器是运行php的nginx。 当nginx已经存在时,它可能会处理caching和redirect。
HAProxy ---> nginx-php A ---> nginx-php P ---> nginx-php r ---> nginx-php o ---> nginx-php x ---> nginx-php y ---> nginx-php
HAProxy可以根据请求URI(* .jpg * .css * .js)redirect到Varnish。
HAProxy ---> tomcat A ---> tomcat ---> tomcat P ---> tomcat <----+ r ---> tomcat <---+| o || x ---> varnish <--+| y ---> varnish <---+
即使每个人都必须说出SSL( 尤其是这个HAProxy-WebServer链接,私人用户信息通过EC2 ),networking服务器也不会说SSL。 添加一个本地nginx允许把SSL带到主机。 一旦nginx在那里,它可能做一些caching和URL重写。
注意 :端口redirect443:8080正在发生,但不是function的一部分。 做端口redirect没有意义。 负载均衡器可以直接与web服务器通话:8080。
(nginx + webserver on same host) HAProxy ---> nginx:443 -> webserver:8080 A ---> nginx:443 -> webserver:8080 P ---> nginx:443 -> webserver:8080 r ---> nginx:443 -> webserver:8080 o ---> nginx:443 -> webserver:8080 x ---> nginx:443 -> webserver:8080 y ---> nginx:443 -> webserver:8080
主要特点 :
相似的select :nginx(可configuration为负载平衡器的多用途networking服务器)
不同的select :Cloud(Amazon ELB,Google负载均衡器),硬件(F5,fortinet,citrix netscaler),其他&全球(DNS,任播,CloudFlare)
HAProxy是做什么的,你什么时候使用它?
每当你需要负载平衡。 HAProxy是解决scheme。
除非你想要很便宜或快速肮脏,或者你没有这方面的技能,那么你可以使用ELB:D
除了银行/政府/类似的需要使用自己的数据中心(需要专门的基础设施,可靠的故障转移,2层防火墙,审计工作,SLA每分钟支付x%的停机时间)您可以将2个F5放在包含30个应用程序服务器的机架上。
除非你想要通过100k HTTP(S)[和多站点],那么你必须有多个 HAProxy,在它们前面有一层[全局]负载平衡(cloudflare,DNS,任播)。 从理论上讲,全球平衡器可以直接与networking服务器进行沟通,以便消除HAProxy。 但是,通常情况下,您应该将HAProxy作为公共入口点保存到您的数据中心,并调整高级选项以平衡主机之间的平衡并最小化差异。
个人意见 :一个小型的,包含的,开源项目,完全致力于一个真实的目的。 其中最简单的configuration(ONE文件),最有用和最可靠的开源软件,我在我的生活中遇到过。
主要特点 :
相似的select :Apache,Lighttpd,Tomcat,Gunicorn …
Apache是事实上的Web服务器,也被称为数十个模块和数千行httpd.conf
的破坏请求处理体系结构之上的一个巨大clusterfuck。 nginx重做了所有这些,使用更less的模块,(略)更简单的configuration和更好的核心架构。
nginx是做什么的,你什么时候使用它?
Web服务器旨在运行应用程序。 当你的应用程序开发在nginx上运行时,你已经有了nginx,你也可以使用它的所有function。
除非你的应用程序不打算在nginx上运行,并且nginx无处可找(在Java商店任何人?),那么在nginx中没有什么意义。 networking服务器function可能存在于您当前的networking服务器中,其他任务可以通过适当的专用工具(HAProxy / Varnish / CDN)更好地处理。
除非你的networking服务器/应用程序缺乏特性,难以configuration和/或你宁愿死于工作而不是看它(Gunicorn任何人?),那么你可以把nginx放在前面(即在每个节点本地)来执行URL重写,发送301redirect,强制访问控制,提供SSLencryption,以及即时编辑HTTP头。 [这是从networking服务器预计的function]
主要特点 :
类似的select :nginx(可configuration为caching服务器的多用途网页服务器)
不同的select :CDN(Akamai,Amazon CloudFront,CloudFlare),硬件(F5,Fortinet,Citrix Netscaler)
什么是清漆,你什么时候使用它?
它做caching,只caching。 这通常是不值得的,这是浪费时间。 试试CDN。 请注意,caching是运行网站时应该关心的最后一件事。
除了当你运行一个专门关于图片或video的网站时,你应该仔细研究CDN,认真考虑caching。
除非你不得不在自己的数据中心使用自己的硬件(CDN不是一个选项),而且你的networking服务器在传送静态文件时很糟糕(添加更多的networking服务器并不能帮上忙),那么Varnish是最后的select。
除了当你有一个主要是静态但复杂的dynamic生成内容的网站(见下面的段落),然后清漆可以节省你的networking服务器的处理能力。
caching几乎没有configuration,免费,免费。 只需订阅CloudFlare,或CloudFront或Akamai或MaxCDN。 我写这行的时间比设置caching的时间要长,我手中拿着的啤酒花费的时间比中间的CloudFlare订阅还要贵。
所有这些服务开箱即可使用静态* .css * .js * .png等等。 实际上,他们主要是遵守HTTP头中的Cache-Control
指令。 caching的第一步是configuration您的Web服务器发送适当的caching指令。 不pipe什么CDN,什么Varnish,什么浏览器在中间。
当平均networking服务器窒息为博客上的猫照片时,Varnish被创build。 如今,一个平均的现代multithreadingasynchronousstream行语驱动的web服务器的一个实例可以可靠地将小猫送到整个国家。 礼貌sendfile()
。
我为最后一个项目做了一些快速的性能testing。 单个tomcat实例可以通过HTTP每秒提供21 000到33 000个静态文件(testing从20B到12kB的文件以及不同的HTTP /客户端连接数)。 持续出站stream量超过2.4 Gb / s。 生产将只有1 Gb / s接口。 不能做比硬件更好,甚至没有点尝试光油。
CDN和高速caching服务器通常会忽略带有像?article=1843
这样的参数的URL,它们会忽略具有会话cookie或authentication用户的任何请求,并忽略大部分MIMEtypes,包括来自/api/article/1843/info
的application/json
。 有可用的configuration选项,但通常不是细粒度的,而是“全部或全部”。
清漆可以有自定义的复杂规则(见VCL)来定义什么是可以清除的,什么不清除。 这些规则可以通过URI,标题和当前用户会话cookie以及MIMEtypes和内容来caching特定的内容ALL TOGETHER。 这可以节省一些非常具体的负载模式的web服务器的处理能力。 这是什么时候清漆是方便和真棒。
我花了一段时间去了解所有这些东西,什么时候使用它们以及它们如何组装在一起。 希望这可以帮助你。
原来是相当长的(6个小时写OMG!:O)。 也许我应该开始一个博客或一本关于这个的书。 有趣的事实:答案的长度似乎没有限制。
这三种工具的共同特点是真实的。 大多数设置都可以,3个中的任意两个都可以。这取决于它们的主要目的是什么。 如果你知道你的应用服务器在静态的时候是快速的(比如:nginx),那么接受牺牲一些caching是很常见的。 如果要安装数十台或数百台服务器,并且不关心如何充分利用这些服务器,还是要解决问题,通常会牺牲一些负载平衡function。 如果您打算在任何地方运行带有许多组件的分布式应用程序,那么牺牲一些Web服务器function是很常见的。 尽pipe如此,有些人还是build立了一些有趣的农场。
你应该记住,你正在谈论3固体产品。 一般来说,你不需要负载平衡它们。 如果你需要前面的SSL,那么nginx首先作为反向代理是好的。 如果你不需要,那么在前面的清漆是好的。 然后你可以把haproxy负载平衡你的应用程序。 有时候,你也希望根据文件types或path,在haproxy本身上切换到不同的服务器场。
有时候你必须防止严重的DDoS攻击,而且前面的haproxy会比其他的更合适。
一般来说,你不应该担心在你的select之间做什么妥协。 您应该select如何组装它们以获得现在和未来的最佳灵活性。 即使您多次堆叠其中几个,根据您的需要,有时也可能是正确的。
希望这有助于!
所有其他的答案是2010年以前,因此增加了一个更新的比较。
Nginx的
漆
HAProxy的
所以最好的方法似乎是以适当的顺序实施所有这些方法。
但是,对于一般用途,Nginx是最好的,因为您可以获得高于平均水平的性能: caching,反向代理,负载平衡 ,资源利用率很低。 然后你有SSL和完整的Web服务器function。
Varnish支持负载平衡: http : //www.varnish-cache.org/trac/wiki/LoadBalancing
Nginx支持负载均衡: http : //wiki.nginx.org/NginxHttpUpstreamModule
我会简单地configuration这个清漆+ stunnel。 如果因为其他原因需要使用nginx,我只会使用nginx + varnish。 您可以让nginx接受SSL连接,并将其代理清除,然后通过http与varnish交谈。
有些人可能会抛出nginx(或Apache),因为这些是比Varnish更通用的工具。 例如,如果要在代理层转换内容(例如,使用XDV,apachefilter等),您将需要其中一个,因为Varnish本身不能这样做。 有些人可能只是更熟悉这些工具的configuration,所以使用Varnish作为一个简单的caching,并在另一层进行负载平衡比较容易,因为他们已经熟悉Apache / nginx / haproxy作为负载均衡器。