内容交付网络和云眼灰度实验

云眼About 8 min

内容交付网络和云眼灰度实验

内容交付网络的基础知识以及使用云眼灰度实验处理缓存的不同策略。

你可能希望将云眼灰度实验 SDK 与 CDN 配对,以提高整体效率。进一步阅读以了解 CDN、边缘计算以及一些利用 CDN 和边缘功能提供动态内容的可能解决方案。

内容交付网络

内容分发网络 (CDN) 是一种分布式服务器系统,它根据用户位置而不是源服务器位置提供内容。这大大减少了页面加载时间,特别是对于具有高流量和全球影响力的网站。CDN 将内容复制到全球分布的服务器网络。当用户请求网页时,CDN 会将请求从原始站点的服务器重定向到物理上更接近用户的服务器,并从那里传递缓存的内容。CDN 还与源服务器通信,以提供尚未缓存的内容。

CDN 的好处:

  • 更快的内容交付,因为访问者连接到离他们最近的服务器
  • 在发生硬件故障或中断时的信息访问冗余
  • 通过分布式拒绝服务 (DDoS) 攻击缓解提高安全性
  • 通过缓存降低带宽成本
cdn-flow.jpg

CDN 和动态内容

CDN 可以提高应用程序的性能,这使得集成新服务具有挑战性。CDN 提供缓存或保存的内容(由源服务器呈现),不允许在边缘执行动态逻辑。使用 云眼 功能实验 SDK 可能具有挑战性,因为对每个用户进行存储并随机分配变体需要服务器端执行。当大多数请求由 CDN 处理和完成时,用户的请求永远不会到达源,并阻止 SDK 逻辑运行。

边缘计算

许多现代 CDN 提供商利用边缘计算来克服 CDN 的静态特性。与 CDN 一样,边缘计算强调在地理上靠近数据源的数据收集和计算的重要性。边缘函数通过减少延迟和冷启动启动时间来改进无服务器功能。

边缘计算的优势:

  • 减少延迟,因为数据不会通过网络传输到服务器或数据中心进行处理
  • 通过减少云资源和带宽需求节省成本
  • 无冷启动

网站的注意事项

应该确定缓存在应用程序中成为阻碍因素的位置。例如,如果网站仅缓存静态内容(CSS 或图像),但所有动态逻辑都在源运行,则可能不会遇到问题。但是,在对大量缓存的应用程序部分进行实验时,这可能会很棘手。在使用云眼灰度实验启动实验之前,应问几个问题:

  • 您缓存哪些内容?
  • 是否缓存静态内容?
  • 是否缓存所有内容?
  • 请求到达源与 CDN 的频率如何?
  • 您目前是否有缓存破坏逻辑?
  • 是否可以绕过 CDN?
  • CDN 提供商有哪些限制?

这些问题的答案将帮助了解何时何地做出运行 A/B 测试所需的用户级决策。如果特定请求是按源动态处理的,则可以在接收动态请求时分配变体。请务必与 云眼 客户团队讨论这些问题。

常见解决方案

将云眼灰度实验与 CDN 体系结构结合使用有几种可能的解决方案。

  • 1. 在边缘做出决策 – 如果有权访问可以在边缘运行代码的 CDN 提供商,这是一个不错的选择。云眼 Experimentation为顶级边缘提供商创建了一系列入门工具包和模板,以帮助在边缘设置云眼灰度发布。
  • 2. 通过决策服务做出决策 – 如果无法访问可以在边缘运行代码的 CDN 提供商,并且希望将 云眼 作为自己的服务运行,这是一个不错的选择。我们建议使用 云眼 Agent,这是一种预打包的容器化服务,可公开终端节点以获取分桶决策和跟踪事件。
  • 3. 在服务器源中做出决策 – 如果可以轻松地在源中安装 云眼 功能实验并希望最大程度地降低 CDN 配置的复杂性,这是一个不错的选择。

1. 在边缘做出决策

在 CDN 体系结构中实现云眼灰度实验的一种选择是在 CDN 边缘进行实验决策。此选项需要在 CDN 上安装 云眼 功能实验 SDK,在该环境中,CDN 可以在边缘执行代码。一些允许在CDN边缘执行代码的技术提供商包括Akamai EdgeWorkers,AWS Lambda@EdgeCloudflare WorkersFastly Compute@EdgeVercel Edge Functions。如果 CDN 不支持在边缘运行代码,仍可以通过将请求转发到支持此方法的 CDN 来使用此方法。

CDNOPTION1.png
  1. 验证 CDN 是否支持在边缘执行代码。如果没有,请将请求重定向到需要的 CDN。

  2. 在支持在边缘执行代码的 CDN 中,安装功能实验 SDK 初学者工具包,为用户做出实验决策,将这些决策的结果存储在 Cookie 中,并将请求返回到原始 CDN。有关详细信息,请选择边缘提供商:

  1. 将请求和代表云眼决策的 cookie 转发到源服务器。
  2. 在源服务器上,解析云眼决策 cookie,并根据云眼决策呈现正确的变更通知单内容。
  3. 在 CDN 上,配置缓存,以便 CDN 包含云眼决策 Cookie 的值作为缓存规则的输入。通过确保缓存键由 云眼 决策 cookie 的值组成,可以保证 CDN 为后续请求适当地缓存内容,这些请求在 云眼 决策 Cookie 中具有相同的值。缓存内容后,后续请求可以完全由第一个 CDN 处理。

🚧 重要

  1. 在 CDN 内的边缘运行云眼灰度实验时,请确保事件处理继续,直到云眼客户端关闭。

  2. 确保 CDN 支持 HTTP 请求格式 (XML/JSON)

2. 在单独的决策服务上做出决策

如果希望从集中决策源中受益,我们建议使用 云眼 Agent,这是一种预打包的容器化服务,可公开端点以获取分桶决策和跟踪事件。将使用此服务代替支持在边缘执行代码的 CDN。

CDNOPTION2.png
  1. 对于所有没有云眼决策 cookie 的请求,请将请求重定向到决策服务。

  2. 决策服务为用户提供决策,可以将这些决策的结果存储在 Cookie 中,并将请求返回到 CDN。

  3. 将请求和代表云眼决策的 cookie 转发到源服务器。

  4. 在源服务器上,解析云眼决策 cookie,并根据云眼决策呈现正确的变更通知单内容。

  5. 在 CDN 上,配置缓存,以便 CDN 包含云眼决策 Cookie 的值作为缓存规则的输入。通过确保缓存键由 云眼 决策 cookie 的值组成,可以保证 CDN 为后续请求适当地缓存内容,这些请求在 云眼 决策 Cookie 中具有相同的值。缓存内容后,后续请求可以完全由 CDN 处理。

3. 在服务器源头做出决策

在 CDN 体系结构中实现云眼灰度实验的第三个选项是在 Web 应用程序的源上进行实验和功能管理决策,并将 CDN 配置为根据表示源服务器上做出的决策的决策 Cookie 缓存适当的内容。此选项应该可以通过任何主要的 CDN 提供商实现。

CDNOPTION3.png
  1. 对于不包含云眼灰度实验决策 cookie 的 CDN 的每个请求,将请求转发到源。

  2. 在源站应用服务器中安装云眼灰度实验 SDK。对于每个请求,为所有实验的用户存储存储,并将这些决策的结果存储在 Cookie 中。使用云眼决策 cookie 集响应 CDN。

  3. 将 CDN 配置为根据步骤 2 中设置的 Cookie 的内容缓存内容。对于发送到设置了云眼决策 cookie 的 CDN 的请求,我们可以返回缓存的内容。对于未设置 云眼 决策 cookie 的请求,请按照步骤 1 中将请求转发到源服务器。

📘 注意

对于所有选项,cookie 都应具有生存时间 (TTL) 或过期限制,以便在更改实验时,用户会在合理的时间范围内看到效果。

Last update:
Contributors: “zhangweixue”