用于提供大量图像的软件/系统?

时间:2009-11-24 00:30:51

标签: apache memcached c10k

在我们的高峰时段,我们需要提供约250 / rps的服务。我们正在做的是接受图像的URL,将图像从memcache中拉出来,然后通过Apache返回。

我们目前的系统是具有4GB内存的双核机器:内存中的图像为2GB,Apache为2GB;但是我们在高峰期看到了非常高的负荷(20-30)。 Apache报告的平均响应时间为每个请求30-80ms,对于从内存提供的简单Apache请求来说似乎有点慢。

有更好的工具吗?从磁盘服务不是一种选择,因为IO等待将其保留,所以我们将其移动到内存中。 CDN是如何做到的?

编辑:好吧,系统就像这样工作。一个请求进来,我们检查一个“队列”,看看我们之前是否见过这个请求,如果我们有服务图像(来自磁盘......或内存)。如果不是,我们在memcached队列中递增该请求的计数器,并且有工作机器实际生成图像,然后将其存储回主服务器。因此,当请求进入时,我们正在检查memcached db是否存在,那么我们将连接到另一个数据库以获取实际的图像数据库。当图像在磁盘上时,我们发现只有file_exist函数需要30多毫秒才能完成,所以我们将它移动到内存中。如果我们将图像移动到ramdisk会加快file_exist的速度,或者我们是否仍然需要先检查以确定我们是否应该查找图像?

2 个答案:

答案 0 :(得分:3)

你看过nginx了吗?

根据Netcraft在2009年5月,nginx服务或代理3.25% busiest sites。它也可以serve from memcached

答案 1 :(得分:1)

根据图像的大小,Apache应该完全没有问题。我们有一个Apache服务2000请求/秒,平均响应大小是12K。该机器具有32GB内存,因此我们的所有内容都被缓存。

以下是一些调整技巧,

  1. 使用类似于worker的线程MPM,打开大量线程(我们有256个)。
  2. 使用mod_cache以便所有图像都在内存中
  3. 为Apache进程分配尽可能多的内存
  4. 当你说memcache时,你的意思是memcached服务器吗?运行memcached会比较慢,因为TCP连接的延迟(即使它是环回)远远大于直接内存访问。

    如果您可以将所有图像放入内存中,RAM磁盘也会有很多帮助。