Windows 机密就近缓存原则

Raymond Chen

缓存可以改进性能,但您必须正确使用它们。通常,您可以尝试很多参数,但是即使准确调整了缓存策略,仍需要正确使用缓存。

以下是一个实际事件示例。我已将此示例改写为读者比较容易理解的语言,这样,我就不用费力解释与主要问题无关的技术详情。

假设纽约的一家公司拥有一台中央 Web 服务器,用作文档档案。该公司可能做出如下请求:请查找我们在 2005 年 6 月 23 日归档的 Johnson 案例上诉驳回的诉状。这实际上是一个静态网页,文档不会更改 — 如果诉状需要更新,将归档所做修订;由于原始文档已归档,所以仍旧保持不变。除非存在时间机器,才能通过时光倒流的方法更改原始诉状。(如果他们真的获得这样一台机器,则他们所做的一些看似无足轻重事情,可能会在不经意间改变了人类历史)。

这与缓存 Web 代理服务器的使用模式相对应。如果有人请求过 6 月 23 日的诉状,不久另一人请求相同的文档,此时代理服务器可以使用第一次查询的结果来响应第二次查询,而不用重新返回到中央服务器。

假设此公司已拥有一台缓存 Web 代理服务器,并对迈阿密办公室进行了配置以便利用此服务器。但是性能方面并没有改进。即使依次向该代理服务器多次请求同一文档,响应的速度和直接向中央服务器请求文档的速度一样慢。问题出在什么地方?代理服务器损坏了吗?

事实上,代理服务器运行很正常。问题出在代理服务器所在的位置上:迈阿密办公室与纽约的连接速度很慢,其当前使用的是安装在纽约办公室的缓存 Web 代理。

图 1 中的图表清楚地说明了为什么使用该代理服务器根本不能提高速度。即使该代理服务器工作非常顺畅,而且每个请求不必传送到中央服务器就能得到响应,文档仍需要通过迈阿密和纽约之间的缓慢连接进行传输。

fig01.gif

图 1 代理服务器位于缓慢连接的错误一端(单击图像可查看大图)

如果要使用缓存,则该缓存的速度应比其缓存内容的速度快。就此示例讲,从迈阿密办公室连接到代理服务器的速度应比从迈阿密办公室到中央服务器的连接速度快。代理服务器的安装位置必须靠近迈阿密办公室。要获得最佳效果,代理服务器应该安装在迈阿密,如图 2 所示。

fig02.gif

图 2 对迈阿密办公室更加有用的代理安装(单击图像以查看大图)

将代理服务器安装在迈阿密后,当迈阿密的律师想要调出 6 月 23 日的诉状时,该请求将传送到本地代理,它可以快速地从其缓存中取出相应文档。如果该文档未在缓存中,则从服务器中检索出此文档后,会对其进行缓存,以供下次迈阿密办公室的人员请求时使用。

缓存利用的是临时位置,但将代理移动到迈阿密办公室还涉及到地理位置:迈阿密办公室的律师希望请求与纽约办公室律师不一样的文档(原因很简单,他们处理不同的案例),此时如果针对每个远程办公室都具有不同的缓存,则这些缓存会为其分配给的办公室提供更好的服务。

该组织在迈阿密办公室安装了代理服务器,并将办公室内的计算机配置为使用本地代理。现在他们对性能方面非常满意。

Raymond Chen 的网站旧事新谈及其同名著作(Addison-Wesley,2007 年)都探讨了 Windows 的历史和 Win32 编程方面的内容。方法真的很重要。