nginx和memcached协同工作的效果如何?


14

我们在Glassfish应用服务器群集上运行了一个基于Java EE的Web应用程序。传入流量主要是对我们的应用程序资源的基于XML表示形式的RESTful请求,但是可能有5%的流量可能是针对基于JSON或XHTML / CSS的表示形式。

现在,我们正在研究负载平衡解决方案,以在群集中的Glassfish实例之间分配传入流量。我们还在研究如何使用memcached卸载群集,memcached是一种内存中的分布式哈希图,其键将是REST资源名称(例如,“ / user / bob”,“ / group / jazzlovers”),其值为相应的XML表示形式。

听起来很有希望的一种方法是用一块石头杀死两只鸟,并使用轻量级的快速nginx HTTP服务器/反向代理。Nginx将通过首先在memcached中查找其URI来处理每个传入请求,以查看是否已经存在未到期的XML表示形式。否则,nginx将请求发送到其中的Glassfish实例之一。在这篇简短的文章中描述了nginx memcached模块。

使用这种方式对nginx和memcached的总体印象是什么,您对它们有多满意?您发现哪些资源最有助于他们的学习?如果您尝试了它们,但它们不符合您的目的,为什么不这样做?您使用了什么呢?

注意:这是一个相关的问题。在我了解ServerFault之前,我曾在StackOverflow上问过这个问题。

编辑:尽管没有直接的经验,到目前为止,这里所有的答案都非常有帮助。这个答案最终确实出现在StackOverflow上,并且对nginx / memcached设置相当看好。


酷,会的。我们可能会在下个月左右进行实验
Jim Ferrans 09年

Answers:


6

您确实应该在Web服务器之前使用缓存服务器。我建议使用Varnish缓存。我们在斯堪的纳维亚半岛最大,最繁忙的网站上使用它。我们用1个清漆盒替换了13个高负荷鱿鱼盒,并为备用盒替换了1个。

我在自己的私人网站上对一个简单的应用程序进行了基准测试,结果从每秒9个请求增加到2000多个。

您可以决定将其保存在内存中的时间,您可以一直进行到结束,然后在数据更改时将HTTP清除请求发送到缓存服务器。


1
但是Nginx缓存显然比Varnish快
VBart 2012年

4

从我的经验来看,我个人的看法是,如果您使用的是负载均衡器,则希望将该框完全限制为负载均衡功能。使您的负载平衡器即使在缓存中也可以提供内容,从而降低了高负载情况下的负载平衡功能(更多的连接保持活动状态的时间更长,从而降低了整体容量和吞吐量)。

我建议让应用程序本身进行查找并提供缓存的内容,然后让负载平衡器完成其工作。话虽如此,nginx在负载平衡方面并不是完美的,它仅提供了非常基本的循环算法。我建议改为使用haproxy。如果我需要SSL解密服务,根据我的经验,nginx在haproxy之前可以很好地工作。


1

我认为如果需要负载平衡,高可用性等功能,您将陷入僵局。

另外,请考虑以下情况:对用户进行身份验证时,页面外观会有所不同,并为每个用户提供可用的个性化功能。URL是相同的,以便于链接等。例如,当您登录时(如serverfault),已授权用户无需输入其姓名/验证码即可进行评论,或者该网站将用户名显示在顶部。在这种情况下,nginx将不可用,因为您无法区分已认证用户和未认证用户。

如果您不需要SSL,建议您使用Varnish。它被设计为HTTP Accelerator,而不是Web服务器或proxy。如果需要SSL,请先在Nginx上运行SSL加速器,在varnish上运行纯HTTP加速器,因为Varnish无法处理SSL。

我认为缓存服务器的选择是特定于应用程序的,如果不深入分析应用程序,您将无法对此做出笼统的评论。


1

我的选择是haproxy。很小而且非常快的反向代理,但不是缓存代理!我使用我的缓存系统“ Squid Web Proxy”

CACHE /squid/ -> Load-balancing /Haproxy/ -> WEB I /lighttpd/
                                          -> WEB II /lighttpd/
                                          -> WEB III /lighttpd/

这项工作非常适合我的网络系统

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.