当前位置:  开发笔记 > 编程语言 > 正文

使用nginx和memcached优化网站有什么经验?

如何解决《使用nginx和memcached优化网站有什么经验?》经验,为你挑选了1个好方法。

我们在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.com上问了同样的问题.那里的答案主要是建议nginx的替代品(有帮助,但间接).



1> Great Turtle..:

假设您有一组应用程序服务器上游将数据传递给用户.

upstream webservices {
    server 10.0.0.1:80;
    server 10.0.0.2:80;
    server 10.0.0.3:80;
}
server {
    ... default nginx stuff ...
    location /dynamic_content {
          memcached_pass localhost:11211;
          default_type   text/html;
          error_page     404 502 = @dynamic_content_cache_miss;
          set $memcached_key $uri;
    }
    location @dynamic_content_cache_miss {
          proxy_pass http://webservices;
    }

以上nginx.conf片段的作用是将所有流量从http://example.com/dynamic/*DIRECTLY直接发送到memcached服务器.如果memcache有内容,您的上游服务器将看不到任何流量.

如果缓存命中失败并出现404或502错误(无法在缓存中或无法访问内存缓存),则nginx会将请求传递给上游服务器.由于上游定义中有三台服务器,因此您也可以获得透明的负载平衡代理.

现在唯一需要注意的是,您必须确保后端应用程序服务器将数据保存在memcache中.我使用nginx + memcached + web.py来创建简单的小系统,在相对适中的硬件上每分钟处理数千个请求.

对于web.py,应用程序服务器的一般伪代码就是这样

class some_page:
     def GET(self):
         output = 'Do normal page generation stuff'
         web_url = web.url().encode('ASCII')
         cache.set(web_url, str(output), seconds_to_cache_content)
         return output

在上面的web.py /伪代码中要记住的重要事项是,通过nginx来自memcached的内容根本无法更改.nginx使用简单的字符串而不是unicode.如果您在memcached中存储unicode输出,您将在缓存内容的开头和结尾处获得至少奇怪的字符.

我使用nginx和memcached作为体育相关的网站,我们获得了大量的流量脉冲,只持续了几个小时.没有nginx和memcached,我无法得到.在实施上述变更后,我们上一次大型七月体育赛事期间的服务器负载从70%下降到0.6%.我不能推荐它.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有