团队里有人说通过 VPN 访问文件共享很慢,第一个建议总是加缓存。在把 BranchCache 加入远程接入设计之前,先把抱怨归入三种形态之一:对未变内容的重复下载、上传,或是在包含数千条目的文件夹中做元数据密集的浏览。BranchCache 只在受支持的内容上解决第一种形态,对另外两种毫无帮助。这不是需要绕开的限制,而是你在花一周时间部署之前应当做的对比。

同一个共享,三种不同的抱怨

一个分支办公室里有八个人打开同一个未变的培训视频,这正是该功能被设计出来的场景。第一次读取跨过 WAN,内容被缓存在读者附近,之后对同一未变文件的读取由本地提供。收益真实但很窄:相同内容、未变、多个读者。

笔记本通过家庭连接上传一段新录音,则是相反的场景。一个尚不存在的文件没有此前缓存的副本,因此上传仍走那条一贯受限的路径。下载缓存不能消除上传,任何位置选择都改变不了这一点。

第三种形态最让人失望,因为它看起来像下载问题。打开一个含数万个文件的目录、对其排序、读取元数据,是一连串小操作,而不是对一个大对象的重复传输。缓存文件正文对枚举毫无帮助。

分布式缓存:VPN 地址池不是分支局域网

在分布式模式下,客户端计算机彼此共享缓存内容,而 Microsoft 将该模式记录为在单个子网内工作。VPN 客户端池在这个意义上并不是子网,即使所有地址看起来是连续的:对等方发现、客户端之间的可达性,以及交换缓存数据的权限,是三个彼此独立的问题,而通常的远程接入设计对这三者的回答都是「否」。

你可以通过允许客户端之间的流量,让地址池表现得像分支局域网,但那是安全决策,不是缓存决策。大多数远程接入设计之所以把客户端彼此隔离,正是为了让一台被入侵的笔记本无法到达另一台;除非对等方本来就是受信任的对等体,否则用这种隔离去换一次缓存命中是很糟糕的交易。

对单个漫游用户来说,分布式模式没有可共享的对象。缓存仍可服务该客户端自己的重复读取,但那是客户端的缓存收益,而不是分支部署位置的收益;在有人期待办公室变快之前,值得把这一点说清楚。

托管缓存:部署位置决定它是否有用

托管缓存把共享缓存放在服务器上,这是跨子网唯一合理的模式,也是客户端之间无法通信时唯一可行的模式。首要问题是这台服务器放在哪里。如果托管缓存与源站走同一条受限链路,那只是把字节搬了个地方,问题并没有解决。

把它放在读者附近,给它指定负责人,并按其工作集而不是整个共享来规划磁盘容量。Microsoft 的 BranchCache 概述 介绍了这两种模式以及客户端行为,包括人们常忘记的一点:客户端在使用缓存数据之前,仍要联系源站做授权并获取内容信息。

部署是三个角色一起规划,而不是勾一个复选框。源站服务器发布内容的哈希,托管缓存被启用并可被发现,客户端被配置为使用它。在服务器端,这在 PowerShell 里很好辨认:

Enable-BCHostedServer -RegisterSCP
Get-BCStatus | Select-Object BranchCacheIsEnabled, ClientMode, HostedCacheServerList

在客户端上,可以指向具名服务器,也可以让它通过服务连接点自行发现;然后确认它实际选择的模式,而不是假定策略已经生效:

Enable-BCHostedClient -ServerNames cache1.corp.example -UseSCP
Get-BCStatus | Select-Object BranchCacheIsEnabled, ClientMode

仍然会到达源站的部分

缓存不会取消授权。没有读取权限的客户端不会因为别人缓存了该文件而获得访问权,源站仍要回答授权问题,并提供使缓存查找得以进行的内容信息。如果源站不可达,仅凭缓存副本并不能变成离线共享。

内容变化也会悄悄打破这个假设。文件被重新保存、重新编码或被备份产品触碰之后,可能不再匹配缓存中的哈希,下一次读取就会回到源站。这是正确的行为,也正是为什么工作集每小时都在变动的缓存收效甚微。

逐出是第三个限制。缓存容量有限,因此较大的工作集会挤出较旧的内容,而收益取决于重读发生在逐出之前而不是之后。按整个共享来规划缓存大小,是让一次技术上正确的部署令人失望的常见方式。

用两次读取和一次上传来验收

测试正确的三条流程,并记录每条流程说明了什么。从一个客户端读取一个有代表性的文件,既在源站链路上测量,也在用户的时钟上测量。从同一部署位置组中的第二个客户端再次读取同一未变文件。一次新文件的上传,它应当没有改善,并可确认缓存没有被记上它从未做过的事情。

如果第二次读取的大部分字节仍然跨过源站链路,说明缓存没有被使用,原因通常是客户端处于错误的模式、源站上缺少哈希发布,或者托管缓存位于受限链路的错误一侧。这是三种不同的修复,只有一种与网络部署位置有关。

然后用与最初抱怨相同的形态陈述结论:从这个源站到这些读者、对未变内容的重复下载由这个缓存来提供。共享的其他一切都未改变,包括上传、文件夹枚举以及离线场景,后者仍然需要自己的答案。

相关文章