0

我有一个主要由 javascript 组成的网站。我将它托管在 IIS 上。该网站从硬盘上的特定文件夹中请求图像并将其显示给最终用户。图像的请求非常频繁和快速。

有什么办法可以减少磁盘读取操作的开销?

我听说过内存映射,可以映射一部分硬盘并将其用作主内存。有人可以告诉我我是对还是错,如果我是对的,那么执行此操作的步骤是什么。如果我错了,还有其他解决方案吗?

4

2 回答 2

1

虽然内存映射是可行的想法,但我建议使用 memcached。它作为一个独特的过程运行,允许水平扩展,并且在一些最苛刻的网站上经过试验和测试并积极部署。一个良好实现的 memcached 服务器可以显着减少磁盘访问

它还具有多种语言的绑定,包括互联网上的语言。我假设您想要 Java 的解决方案(您的大多数标签都与该语言相关)。阅读本文以了解安装和其他管理任务。它还具有您可以开始使用的代码示例(用于 Java)。

用伪代码术语来说,当您收到对 Moon.jpeg 的请求时,您需要做的是:

String key = md5_hash(Moon.jpeg); /* Or some other key generation mechanism */
IF key IN memcached
   SUPPLY FROM memcached /* No disk access */
ELSE
   READ Moon.jpeg FROM DISK
   STORE IN memcached ASSOCIATED WITH key
   SUPPLY
END

这是一个非常粗略的算法,您可以在这篇 Wiki文章中阅读更多关于缓存算法的信息。

于 2012-03-22T05:04:23.513 回答
0

错的方向。您希望将 IO 减少到慢速磁盘(相对)。您可能希望将文件映射到物理内存中。在简单的场景中,操作系统将使用文件缓存自动处理这个问题。您可以查看 Windows 是否提供任何可调参数,或者至少查看您可以收集哪些性能指标。

如果我没记错的话(几年前),由于内核路由驱动程序链接到 IIS,IIS 可以非常有效地处理静态文件,但前提是它不通过进一步的 ISAPI 过滤器等。你可能可以在 Channel9 等上找到一些与此相关的信息。

从长远来看,您应该考虑将静态资产移动到 CDN,例如 CloudFront 等。

就像任何问题一样……你确定你有问题吗?

于 2012-03-22T05:03:52.957 回答