1

在我们的高峰时段,我们需要提供大约 250/rps 的服务。我们正在做的是接受图像的 url,将图像从内存缓存中拉出,并通过 Apache 返回。

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

有更好的工具吗?从磁盘提供服务不是一个选项,因为 IO 等待阻碍了它,所以我们将它移到内存中。CDN 是如何做到的?

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

4

2 回答 2

3

你看过nginx吗?

根据 Netcraft 在 2009 年 5 月的数据,nginx 服务或代理了3.25% 最繁忙的站点。它也可以从 memcached 服务

于 2009-11-24T05:02:32.823 回答
1

根据图像的大小,Apache 应该可以毫无问题地处理这个问题。我们有一个 Apache 服务 2000 个请求/秒,响应的平均大小是 12K。这台机器有 32GB 内存,所以我们所有的内容都被缓存了。

这里有一些调整技巧,

  1. 使用线程 MPM,如 worker,打开很多线程(我们有 256 个)。
  2. 使用 mod_cache 使所有图像都在内存中
  3. 为 Apache 进程分配尽可能多的内存

当您说 memcache 时,您是指 memcached 服务器吗?运行 memcached 会更慢,因为 TCP 连接的延迟(即使它是环回)比直接内存访问大得多。

如果您可以将所有图像都放在内存中,那么 RAM 磁盘也会有很大帮助。

于 2009-11-24T02:02:39.707 回答