3

Web 服务器通常有一个文档根,表示通过 Web 可见的文件系统子树。因此,例如,如果文档根目录是:/home/foouser/public_html/,那么网络服务器会将http://www.foo.com/pics/foo.jpg的请求映射 到 /home/foouser/ public_html/pics/foo.jpg。这会导致一系列磁盘请求以获取 foo.jpg 的 inode-number。

网络服务器是否进行任何优化以减少磁盘访问次数(或)是服务器管理员的角色将文档根设置为尽可能接近“/”,以减少磁盘访问次数文件名到 inode 号的翻译?

4

1 回答 1

0

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

选项:

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

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

你也可以走竞争路线。

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

于 2012-12-09T22:29:57.983 回答