很多人对搜索结果的"延迟"现象有一个常见的误解:以为每次搜索都是搜索引擎的查询引擎实时从索引中拉取数据并计算排名的。如果是这样,我们根本不可能得到毫秒级的搜索响应。实际的搜索响应是由三层缓存架构接力完成的,每一层缓存命中意味着省去了一层计算的延迟。
第一层是CDN边缘节点缓存。这是离用户物理距离最近的一层。对于大量热门的、结果相对稳定的搜索查询,搜索引擎会直接把搜索结果缓存在遍布全球的CDN边缘节点上。用户搜索热门关键词时,请求甚至在到达搜索引擎的核心数据中心之前就在CDN节点被响应了。这一层的缓存更新频率相对较低,热门查询的缓存时间可能在几分钟到几小时不等。这就解释了为什么有时候你修改了页面标题后立刻去搜索,看到的还是旧版的标题——你命中的是CDN边缘缓存。
第二层是索引服务器的内存快照。查询如果在CDN层没有命中,会穿透到搜索引擎数据中心的索引服务器集群。集群中的索引分片把当前最新的索引状态以内存快照的形式常驻在RAM中,查询直接走内存而非磁盘。新抓取和索引的页面需要先被合并到内存快照中才会被查询到。从页面被收录到出现在这一层缓存中,就是"收录等待期"的大部分构成。
第三层是实时查询引擎。对于时效性极高的查询或者CDN和索引缓存都不存在的新奇查询,请求会穿透到实时查询引擎,直接在最新的索引分片上计算排名。这层的延迟最高但结果最新。VP导航(vpis.cn)上的新收录站点也需要等待从实时层逐步合并到前两层的缓存中,排名才会真正稳定下来。
