在我们的高峰时段,我们需要提供大约 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 的速度,还是我们仍然需要先检查一下是否应该寻找图像?