zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【CDN 最佳实践】获取历史脏数据的处理思路及规避方法

思路方法数据 处理 获取 实践 最佳 历史
2023-09-11 14:22:38 时间
保证提供给客户端准确的数据是保障服务质量的最基本的要求。但是在实际使用过程中经常会发现客户端访问到的数据为历史脏数据影响客户体验。本文将在包括 CDN 的场景下分析常见出现该问题的原因以及规避方法,希望大家可以在遇到该问题时可依据该思路尽快恢复解决。

在添加 CDN 后客户端访问经常出现访问到历史旧数据的情况,下面我们分析客户端到服务器端整条链路的情况分析出现历史旧数据的原因以及规避方法。

客户端浏览器缓存

现象分析
解密浏览器缓存机制中所述,浏览器缓存是包括强缓存和验证缓存两种模式。因为强缓存是不会与服务器端进行任何校验直接加载资源,因此客户端访问加载了强缓存的数据会直接导致获取到历史旧数据(如图 1 所示)。
                                     image
                                                                        图1. 浏览器强缓存示意图


而如果客户端获取的浏览器验证缓存也同样是有可能获取到历史脏数据的。因为浏览器端会和其访问资源的服务器端进行 Etag 或者 Last-Modified 字段验证,如果其访问的服务器为缓存服务器(例如: CDN 等缓存服务器)。而同样缓存服务器也是历史脏数据的话就会导致异常(如图 2 所示)。
                                                image
                                                                        图2. 浏览器验证缓存示意图


规避方案
1. 客户端清空浏览器缓存
当怀疑浏览器强缓存导致的问题可以手动清空下浏览器缓存或者通过 Ctrl+F5 强制刷浏览器缓存查看是否恢复。
2. 禁止浏览器缓存
上述方法仅能够临时解决,如果该资源不想其因为浏览器缓存导致脏数据的话可以设置该资源的 Response 头中的 Cache-Control 或者 Expires 为 no-cache, no-store, private即可禁止浏览器缓存。
注意:上述的 Response 头中的 Cache-Control 或者 Expires 设置也同样会影响 CDN 的缓存。如果希望 CDN 加速的资源可以在 CDN 上缓存但是禁止在浏览器缓存的话可以在 CDN 上设置 HTTP 头,该 HTTP 头不影响 CDN 缓存策略,仅影响客户端浏览器缓存策略(配置如图 3 所示)。
                                    image
                                                                        图3. CDN 设置 HTTP 头示意图

劫持访问到缓存服务器

现象分析
终端设备正常请求应该是到缓存服务器 CDN 或者服务器上,但是有时会出现该资源请求被 301 或者 302 跳转到某台服务器返回数据,例如图 4 所示,该 IP 并非是服务器的 IP ,被跳转到运营商的缓存服务器。 这种现象一般出现在局部地区的个别终端设备中,并非在全局范围内影响。
                                    image
                                                                        图4. 访问出现劫持示意图


规避方案
1. 反馈当地运营商跟进该问题
因为该问题主要在客户端到服务器端的运营商链路出现的问题,通过服务器端不好解决该问题,建议可将该问题反馈给运营商解决该问题。

CDN 缓存历史脏数据

现象分析
CDN 作为内容分发网络,是会将用户源站的资源缓存到各个 CDN 节点。 CDN 当源站做同名更新时是不会主动回源拉取新资源的( OSS 除外,详细见规避方案 4 )。除非当客户端发起请求后,对应 CDN 节点上该资源没有缓存或者缓存已经过期才会回源拉取最新的数据。
用户可以通过获取资源的 Response 头中查看到该资源的缓存情况。如图 5
中所示, Via 投中分别标识了 CDN 的 L2 节点和 L1 节点,如果两者之中有一个是 "H" 的状态即表示 CDN 是命中状态,此时是不会回源拉取最新数据的。图 5 中即是 CDN L2 节点命中的状态。
                                    image
                                                                        图5. CDN 的Response 头示意图


规避方案
1. 手动刷新 CDN 缓存,重新触发回源请求
如果需要将 CDN 上的缓存强制置为过期的话是可以手动刷新 CDN 上的缓存数据的,详细操作请您参考 CDN 刷新缓存,另外如果应用端需要脚本进行控制的话可以使用刷新的 API 接口,请您参考 CDN 刷新缓存接口
注意: CDN 的目录刷新是会刷新该目录下的所有子目录和文件的,因此目录刷新是有可能引起大量回源请求的。
2. 源站尽量避免同名更新,可以给文件增加版本号区别
建议用户静态资源做版本更新的时候可以通过版本号进行区别,例如在 URL 中带上 “?version=1.0” 进行区分,这样避免应用系统迭代后仍然获取之前版本数据。
注意:通过版本号进行区别时 CDN 是不能开启过滤参数或者保证版本的参数保留的,请您参考: CDN 过滤参数的作用
3. 资源经常同名更新则应该设置其不在 CDN 缓存
如果对应的资源经常需要更新的话那么该资源应该在 CDN 缓存时间较短或者不缓存的,建议用户可以根据实际的业务场景配置缓存规则, CDN 的缓存规则建议参考: CDN 缓存策略
4. 当 CDN 的源站为 OSS 时可以设置自动刷新功能
当 CDN 的源站是 OSS 的话是可以设置自动刷新功能的,请您参考图 6 。当 CDN 的加速域名也同样在 OSS 的自定义域名进行绑定后即可开启该自动刷新功能。然后当 OSS 中的文件出现同名更新的话就会自动下发 CDN 刷新任务以保证 CDN 上该资源的缓存不可用。
                                    image
                                                                        图6. OSS 配置 CDN 缓存自动刷新示意图

代理服务器缓存

现象分析
常见的用户架构中是 CDN 回源到反向代理服务器,然后通过反向代理到真正的源站服务器。在这种场景下如果反向代理服务器开启了缓存功能也同样会在源站服务器进行更新后仍然出现历史脏数据。测试通过代理服务器和源站服务器返回数据不一致即可确认为该问题。
规避方案
1. 关闭代理服务器的缓存功能
反向代理服务器的缓存功能用户是可以选择是否开启缓存功能。例如使用 Nginx 服务器作为反向代理服务器时是通过 proxy_cache 模块设置缓存的。用户可以关闭该模块功能即可取消缓存的功能,其他的 Web 服务器配置具体见对应服务器的官方配置文档。
2. 清空代理服务器缓存
用户在更新过源站服务器后可以清除代理服务器的缓存内容,不同的代理服务器有不同的清除方法,在 Nginx 服务器中是没有直接提供清除指定 URL 缓存的功能的,常见的方法是使用 ngx_cache_purge 第三方模块进行清理。


Serverless架构实现CDN预热最佳实践 预热是源站将会主动将对应的资源缓存到CDN节点,当您首次请求时,就能直接从CDN节点缓存中获取到最新的请求资源,提高缓存命中率。在游戏行业,业务高峰前对热门资源进行预热,提高缓存命中率,降低访问延时。
【全网首发】听阿里云产品架构师罗小飞解读CDN产品最佳实践 近期,阿里云《极速奔跑吧 2021》首场直播在线开播。此次直播围绕CDN行业最佳实践展开分享,不仅对全网首发的阿里云CDN产品最佳实践图进行了详细解读,还对CDN产品和客户场景如何更高效地匹配、形成最优方案进行了分享,希望基于阿里巴巴及成功客户经验的分享,为客户2021年的企业数字化升级之路加码提速。本文整理自第一个直播议题《CDN行业最佳实践图全解析》,在客户实际应用场景中,介绍了CDN的核心技术功能模块与多年沉淀的大型活动最佳实践。
阿里云发布CDN产品最佳实践图 全面解析行业应用 2月2日,阿里云发布CDN产品最佳实践图。该图是站在客户视角,基于阿里云CDN多年服务阿里巴巴生态以及数十万家云上企业客户的需求剖析与实战经验,将客户使用CDN的实践路径分解为便捷式扩展、一站式分发和多样化管理三个阶段,旨在帮助客户找到和部署最适合自己的CDN实践之路。
阿里云Edge Plus私享会正式起航,首场活动聚焦CDN在视频直播领域的最佳实践 近期,阿里云Edge Plus私享会首场活动亮相杭州,来自阿里云的资深/高级技术专家、产品经理与数十位客户代表,围绕“CDN在视频直播领域的最佳实践”这一主题,洞察行业技术趋势,分享落地经验,首次披露全球实时传输网络GRTN在双11淘宝直播中的大规模应用落地细节,同时展开了热烈而深入的讨论。
最佳实践:使用阿里云CDN加速OSS访问 用户直接访问OSS资源,访问速度会受到OSS的下行带宽以及Bucket地域的限制。如果通过CDN来访问OSS资源,带宽上限更高,并且可以将OSS的资源缓存至就近的CDN节点,通过CDN节点进行分发,访问速度更快,且费用更低。如果采用动静分离的网站架构,就能够解决海量用户访问的性能瓶颈问题。
【 CDN 最佳实践】CDN 加速 OSS 常见问题及处理思路 CDN加速OSS是常见的站点动静分离的方式,可以实现将静态资源存储在OSS上,并通过CDN加速OSS实现静态资源的访问加速效果。但是在实际使用的过程中可能会出现使用方法以及配置上的问题导致使用上出现难题。本文档主要就CDN加速OSS的配置以及各注意事项进行描述已解决本使用场景中遇到的问题。
CDN最佳实践之访问慢的分析思路和优化方案 使用CDN加速以后还是存在访问慢的情况,如何去分析定位问题、优化网站速度、解决用户问题是一个十分重要的课题。本文介绍了CDN加速访问慢的分析思路,通过归纳的一些原因结合搜集的信息去进一步判断定位问题,帮助用户在遇到问题时有一个更清晰的思考方法论。同时介绍了一些典型的问题场景,结合这些问题场景可以更快速的去发现问题并优化。
【最佳实践】CDN访问慢的分析思路和优化方案 使用CDN加速以后还是存在访问慢的情况,如何去分析定位问题、优化网站速度、解决用户问题是一个十分重要的课题。本文介绍了CDN加速访问慢的分析思路,通过归纳的一些原因结合搜集的信息去进一步判断定位问题,帮助用户在遇到问题时有一个更清晰的思考方法论。
阿里云支持与服务 2138 作为全球云计算的领先者,阿里云为全球230万企业提供着云计算服务,服务范围覆盖200多个国家和地区。我们致力于为企业、政府等组织机构提供安全可靠的云计算服务,给用户带来极速愉悦的服务体验。