在我们的高峰期,我们需要提供大约250/rps的服务。我们正在做的是接受一个图像的url,从memcache中取出图像,然后通过Apache返回它。
我们当前的系统是一个双核机器,内存为4 4GB :2 4GB用于memcache中的图像,2 4GB用于Apache;但是在我们的高峰期,我们看到非常高的负载(20-30)。根据Apache的报告,每个请求的平均响应时间为30-80ms,对于从内存处理的简单Apache请求来说,这似乎有些慢。
有没有更好的工具来解决这个问题呢?从磁盘提供服务不是一个选项,因为IO等待会阻碍它,所以我们将其移到内存中。CDN是怎么做到的?
编辑:嗯,系统是这样工作的。一个请求进来了,我们检查一个“队列”,看看我们以前是否见过这个请求,如果有,我们就提供图像(从disk...or内存)。如果不是,我们在memcached队列中增加该请求的计数器,并且有工作机器实际生成映像,然后将其存储回主服务器。所以,当一个请求进来的时候,我们正在检查memcached数据库,如果它存在,那么我们将连接到另一个数据库,用于实际的图像数据库。当图像在磁盘上时,我们发现仅file_exist函数就需要30+ ms才能完成,所以我们将其移动到内存中。如果我们将图像移动到内存磁盘,这是否会加快file_exist的速度,或者我们是否仍然希望进行第一次检查,看看是否应该将图像找出来?
发布于 2009-11-24 13:02:33
你看过nginx吗?
根据Netcraft的说法,在2009年5月,nginx服务或代理了3.25% busiest sites。它也可以serve from memcached。
发布于 2009-11-24 10:02:40
根据您的映像的大小,Apache应该可以毫无问题地处理此问题。我们有一个Apache服务2000个请求/秒,响应的平均大小是12K。这台机器有32 so的内存,所以我们所有的内容都被缓存了。
这里有一些调优技巧,
当您说memcache时,您是指memcached服务器吗?运行memcached会更慢,因为TCP连接上的延迟(即使是环回)比直接内存访问要大得多。
如果你能把你所有的图像都放入内存中,那么RAM磁盘也会有很大帮助。
https://stackoverflow.com/questions/1787063
复制相似问题