不同节点缓存内容不一致

最后更新时间:2021-04-27 15:04:49

    现象描述

    对 CDN 同一个资源 URL,不同地域的终端用户访问到 CDN 节点返回的内容不一致。

    可能原因

    • 原因一:命中了域名配置的缓存键规则 - 过滤全部参数,同时源站设置了根据参数吐出不同的资源。
      由于源站是根据参数不同吐不同数据,而 CDN 是忽略参数进行缓存,这就导致不同的节点可能由于第一次收到的访问带的参数不同建立了不同的缓存。下一次当同一个请求访问到不同节点,收到的缓存返回的数据也是不一样。

    • 原因二:源站同一个资源更新后没有做刷新处理。
      CDN 是按 URL 进行资源缓存的。 如果源站更新文件后,URL 没有变化,只是内容发生变化,访问时如果节点有缓存还是会直接命中缓存。 同时,由于各个地域访问热度不一,淘汰时间不一,有的节点缓存已经淘汰,再次访问时,会回源站拉取的新的资源,从而这导致各个节点的缓存可能出现新老版本同时存在,不同节点缓存内容不一致的情况。

    解决思路

    1. 确保源站根据 URL 参数吐出不同的资源和 CDN 域名配置的缓存键规则 - 过滤全部参数不同时使用。
    2. 确保源站同一个 URL 的资源更新以后统一做刷新处理。

    处理步骤

    1. 根据自身业务情况,判断源站是否根据 URL 参数吐出不同的资源。


    2. 登录 CDN 控制台,选择【域名管理】找到对应的域名配置, 查看【缓存配置】>【缓存键规则配置】的“过滤参数”项:检查 CDN 配置域名是否开启过滤参数缓存功能。


    3. 在缓存键规则配置中对应规则的操作栏,单击【修改】,在弹出的“修改规则”框关闭过滤参数功能,然后单击【保存】。

    说明:

    如果用户不方便全部关闭,这里 CDN 也提供了保留指定参数的过滤功能, 用户也可以根据实际的业务需求进行选择使用。具体用法可参见 缓存键规则配置


    4. 进入【刷新预热】目录,对源站变更的资源进行刷新

    说明:

    用户也可以采用 API 的方式进行刷新,这样当源站出现变更时,绑定调用 API 进行刷新,可以第一时间保证全网变更资源访问内容的一致性。详细可参见 URL 刷新接口目录刷新接口