在减少web服务器用于索引节点编号查找的磁盘访问次数方面有任何优化吗



Web服务器通常有一个文档根,表示通过Web可见的文件系统子树。因此,例如,如果文档根为:/home/foouser/public_html/,则web服务器将映射http://www.foo.com/pics/foo.jpg到/home/foouser/public_html/pics/foo.jpg。这会导致一系列磁盘请求来获取foo.jpg的索引节点号。

web服务器是否进行了任何优化以减少磁盘访问次数(或者)服务器管理员的职责是将文档根设置为尽可能接近"/",以减少文件名到索引节点编号转换中的磁盘访问次数?

我知道这不是你问题的直接答案,但通过设置缓存策略,你可以大幅减少磁盘读取。特别是如果您的静态内容未托管在服务器上。

选项:

  • 在CDN上托管静态内容:
    • 优点:将所有负载卸载到其他人的网络上。成本
    • 缺点:控制力可能会降低。成本
  • 使用Contendo/Akamai,这也是一种CDN,但有一些差异。
    • 优点:托管您的内容,但在第一次读取后,cdn将根据您随内容发送的标头(静态或非静态)处理缓存
    • 缺点:有时候头很烦人。当你想替换旧内容时,缓存破坏(破坏你自己的缓存)可能很烦人
  • 在本地缓存内容。例如,如果您正在进行DB请求,则可以缓存该请求。下次运行代码时,请先检查内存中的缓存(而不是立即发出数据库请求)。您可以缓存整个页面,然后在应用程序控制器/路由级别检查是否有页面/资产的缓存版本并提供该版本。优点:控制力强。你几乎可以缓存任何东西
  • 缺点:为每一件小事设置缓存需要做大量的工作。你需要为你的网站的每一个部分制定一个策略

我的建议是首先将您的资产转移到AmazonS3或Rackspace或其他地方。Joyent对此也有所收获。然后,您可以为s3启用cloudfront,这将打开cdn,它在各个区域中缓存内容。这是一个非常便宜的解决方案(取决于您拥有的文件数量)。

你也可以走康泰多路线。

应用程序端路由上的缓存需要相当多的工作,并且完全取决于您的服务器/语言/db/配置。

最新更新