我想建立一个高性能的网站。它有数千个静态HTML页面,这些页面是根据表单提交而具体呈现的。我有一个ruby脚本,它生成这些静态HTML页面并将它们存储在服务器上。
现在我正在查看站点上的1000+并发用户。这是为这些用户提供服务的最快方式。我相信,在这种情况下,Nginx + Varnish可以做得非常好。我还能做什么进一步的优化吗?
是否有一种方法代替NGinx +清漆点击磁盘的HTML页面,它击中内存代替。以某种方式使用Memcached。
我已经在考虑将其他静态资产(如Image/Stylesheets)移出CDN。关于这件事的最佳方法,请提出建议。
谢谢!
发布于 2011-06-22 17:50:01
虽然清漆是绝对美妙的,它是灵活的VCL,它确实更适合缓存动态网站。人们似乎普遍认为,nginx的性能优于清漆(至少在小型静态对象上是如此)。
您可以直接使用proxy_cache、fastcgi_cache或直接从磁盘使用nginx。我知道它确实支持memcached,但是memcached的唯一好处是,如果有多个服务器共享相同的缓存--除此之外,我只能看到额外的开销。
您可以让您的文件系统(希望是raid控制器)缓存(最常用的)数据,或者直接将其放入一个ramdisk!
我确信,一台具有几GB内存的相当预算的xeon服务器每秒将处理几千个请求,因为您实际上只提供静态内容。我还认为可能会预先压缩所有静态内容,这样就不会为每个请求添加额外的卵子头了。
发布于 2011-06-22 19:28:26
没有什么比把文件推送给客户更好了。如果你能做到这一点,我会非常努力地去做,因为它很容易扩展,不需要花哨的缓存,而只需要把准备好的东西送到客户端。而Nginx特别擅长这个任务。由于它的基于事件的处理模型,它将使用更少的资源,并且可能要比基于线程的清漆快得多,当您有许多同时连接时。
此外,基本文件系统非常擅长缓存文件以进行重复读取。因此,我认为您可以使用一个简单的服务器,不需要太多的CPU功能,但是需要足够的内存来缓存一个好的I/O子系统。最优的系统将能够在RAM中缓存所有需要的对象,所以您应该可以使用一个大小大致为(工作大小集+ 1GB)的系统。根据对象的大小,我还强烈建议至少将SSD用作旋转锈蚀的中间缓存层,以便能够快速检索RAM中尚未存在的对象。您将观察到的I/O模式可能是相当随机的,这是SSD可以很容易实现的,但是旋转磁盘不太擅长。
通常,重要的度量不是用户浏览站点的数量,而是到服务器的并发TCP连接的实际数量和所需的吞吐量。通过一些调整,您可以很容易地用一个大约3000美元的系统来填充一个千兆字节的管道。
发布于 2011-06-22 17:49:16
一种更标准的方法是动态生成结果,然后从某种缓存中处理后续请求。
您可以使用redis或memcached之类的代码来实现这一点(请参阅https://stackoverflow.com/questions/868690/good-examples-of-python-memcache-memcached-being-used-in-python上的一个基本python示例)。您也可以使用像nginx这样的缓存代理来自动完成这一任务。
https://serverfault.com/questions/283112
复制相似问题