我们有一个在Glassfish应用服务器集群上运行的基于Java EE的Web应用程序。 传入stream量将主要是基于XML的RESTful请求,用于表示我们的应用程序资源,但是可能有5%的stream量是基于JSON或XHTML / CSS的表示forms。
我们现在正在研究负载均衡解决scheme,以便在集群中的Glassfish实例之间分配传入stream量。 我们也在研究如何使用memcached卸载集群,这是一个内存分布式哈希映射,其键是REST资源名(例如“/ user / bob”,“/ group / jazzlovers”),其值是相应的XML表示。
听起来很有前途的一种方法是一举两得,并使用轻量级,快速的nginx HTTP服务器/反向代理。 Nginx将通过首先在memcached中查找它的URI来处理每个传入的请求,以查看是否存在尚未到期的XML表示。 如果没有,nginx将请求发送到其中一个Glassfish实例。 nginx memcached模块在这个简短的介绍中有描述。
你对nginx和memcached的总体印象如何,用这种方式,你对他们有多开心? 你觉得哪些资源最有助于了解它们? 如果你尝试了他们,他们不适合你的目的,为什么不,你用什么?
注意:这是一个相关的问题 。 在我知道有关ServerFault之前,我在StackOverflow上询问了这个问题。
编辑:到目前为止所有的答案都相当有帮助,虽然没有直接的经验。 这个答案最终在StackOverflow上显示出来了,而且在nginx / memcached安装上也是非常看好的。
你真的应该在你的web服务器前面使用caching服务器。 我build议使用Varnish-cache。 我们使用它在斯堪的纳维亚最大和最繁忙的网站工作。 我们用1个清漆盒取代了13个高度装满的鱿鱼盒,还有1个备用。
我在我的私人网站上testing了一个简单的应用程序,从9个请求到2000多个。
您可以决定将内容保留在内存中的时间,直到时间结束,然后在数据更改时向caching服务器发送http清除请求。
根据我的经验,我个人的观点是,如果你使用的是负载平衡器,那么你希望完全限制该负载平衡function。 让您的负载均衡器即使从caching中提供内容也会降低高负载情况下的负载平衡function(更多连接保持活动状态的时间更长,从而降低整体容量和吞吐量)。
我build议应用程序本身进行查找并提供caching的内容,并让负载均衡器完成其工作。 话虽如此,nginx在负载平衡方面并不完美 – 它只提供了一个非常基本的循环algorithm。 我推荐haproxy来代替。 如果你需要在前面提供SSL解密服务,那么根据我的经验,nginx可以很好的坐在haproxy前面。
如果您需要负载均衡,高可用性等等,我认为您会走向死胡同。
另外,考虑这样的情况:当用户被授权时,页面看起来不同,为每个用户提供可用和个性化的附加function。 例如,authed用户不需要input他的名字/ captcha进行评论的网站,或者站点在你login时显示你的用户名(比如serverfault)。 在这种情况下,nginx将是不可用的,因为你不能区分auth用户和unuthed用户。
如果你不需要SSL,我会build议你运行清漆。 它被devise为HTTP加速器,而不是Web服务器或代理。 如果您需要SSL,请将nginx作为SSL加速器运行,并将其作为纯HTTP加速器运行,因为Varnish无法处理SSL。
我认为,caching服务器的select是特定于应用程序的,如果不深入分析应用程序,就不能对此做出广义的评论。
我的select是haproxy。 非常小,非常快速的反向代理,但不是caching代理! 我用我的caching系统“Squid Web Proxy”
CACHE /squid/ -> Load-balancing /Haproxy/ -> WEB I /lighttpd/ -> WEB II /lighttpd/ -> WEB III /lighttpd/
这项工作完美的我的networking系统