此参考架构描述了通过 Cloudflare CDN(内容分发网络)的流量架构、路由以及数据流。它是帮助保护和加速您的 Web 属性的 Cloudflare 基础技术。
本参考架构专为对其组织的现有 IT 基础设施负有一定责任或有所了解的 IT、安全和网络专业人员设计。具备内容分发相关技术与概念(包括路由、DNS 和缓存)的经验会很有帮助。
为了更好地了解 Cloudflare 的基准知识,我们推荐以下资源:
- 白皮书:实现云迁移潜力的安全和性能架构 ↗(阅读时间 10 分钟)
阅读此参考架构的人员将了解:
- Cloudflare 全球网络的架构。
- Cloudflare CDN 如何工作以将流量路由到 Cloudflare 并回源。
- 何时向基础 CDN 架构添加附加功能。
Cloudflare 最初的愿景之一是在保护网站的同时使其速度更快。对于互联网上的每个新实体,从小型单人博客到大型跨国公司,都应该有相同的速度和安全水平。
借助 CDN 和 Cloudflare 的基础设施,任何 Cloudflare 客户都可以确信他们的应用程序:
- 快速: 内容会缓存在靠近访问者的地方,从而缩短响应时间并减少服务器上的负载。
- 可靠: 无论访问者身在何处,内容都可以在全球范围内使用。
- 安全: 提供防止 DDoS 攻击、数据泄露和其他恶意活动的保护,以及始终采用最新的加密协议。
Cloudflare 是一个全球网络。它是世界上最大、互连最紧密的网络之一,其数据中心遍布 100 多个国家/地区的数百个城市。
因为我们在每个提供公共服务的机器上运行每一个服务,这意味着每个通过我们的用户都会收到完全相同的响应。没有任何性能或可用性妥协 - 如果机器提供公共流量,则它可以提供任何 Cloudflare 产品。您可以参考关于安全的架构和配置。
这意味着通过利用边缘处理能力,以及将所有系统作为控制平面统一管理(可在单一面板中配置全局服务),您可以非常灵活地在边缘配置行为。无论用户在欧洲还是美洲、使用移动网络还是高速光纤,策略、规则和功能都会得到一致执行。您可以用缓存规则按域或更精确的条件定义缓存命中,控制请求如何路由,以及在必要时对源服务器应用何种安全级别。
这极大地简化了将新的基于 Web 的属性添加到您的组合中所需的操作开销,并具有即时可用且可无限扩展以满足您流量的额外好处。
从最高层面上看,CDN 通过利用全球网络基础设施缓存来自组织原始服务器或服务器群的内容来工作。在从原始服务器到最终用户的路径中放置缓存系统,意味着内容位于更靠近最终用户的位置,可以更快地传递内容,并利用缓存和原始服务器之间通常更快的链路(由于物理距离缩短)来实现这一点。
这种方法还减少了到达源站的流量,从而降低源站带宽和计算消耗。源站自身发生中断时,对最终用户的影响也会更小。同时,可以结合其他技术来缓解针对源站的网络攻击。
在客户端和源站之间引入额外系统后,该系统必须对最终用户透明。源服务器除了向缓存提供内容外,还需要能验证或处理经缓存到达的请求(这通常涉及其他相关技术,如 Web 应用程序防火墙 (WAF) ↗)。
此外,与任何中间系统一样,为了充分利用 CDN 在最终用户和源之间的位置,并能够解决各种用例以及提供最佳性能的需要,CDN 的实施可以扩展到提供额外的功能和选项,超越了最初的“缓存作为服务”方法。我们在下面探讨了 Cloudflare CDN 架构的组件。
当最终用户开始连接目标 Web 应用程序时,客户端会先解析主机名对应的 IP 地址,并将初始握手发往该地址。由 Cloudflare 保护的域始终解析为 Cloudflare 拥有的 IP。Cloudflare 从源服务器检索内容后,无论客户端身在何处,随后访问该域名都会获得 Cloudflare 管理的同一组两个 IP 地址(位于两个不同的 /32 块中)。
在最基本的形式中,这通常会意味着用户无论身在何处都必须将所有流量定向到一个服务器,这会与向最终用户提供最佳性能的目标背道而驰。这就是任播网络的重要性所在。
通过任播网络 ↗,由于所有 Cloudflare 数据中心都在全局范围内宣告所有这些由 Cloudflare 拥有的 IP 地址,因此通过网络提供商之间称为边界网关协议 - BGP ↗ 的对等协议,请求会自动定向到在网络拓扑方面最靠近用户的 Cloudflare 数据中心,并在该数据中心执行,这通常也是在地理上最近的数据中心。
入站请求一旦被 Cloudflare 接收,就会按该域的配置进行处理,例如 WAF、负载均衡等,并决定是否从缓存向最终用户返回已缓存的内容。
为了利用大量数据中心的覆盖范围,在向最终用户提供低延迟和高可用性的同时提高缓存命中率,Cloudflare CDN 还提供了额外的功能和设计。
最基本的机制是由全球数据中心组成的网络来处理传入请求。在任一数据中心,请求会先经过 WAF 执行和规则评估等处理;若本地已有缓存,则直接返回给用户;若没有,则从 Cloudflare 网络内部的其他位置或客户源站获取。
Cloudflare 分层缓存将缓存组织成层次结构。第一层是离请求客户端最近的边缘数据中心;第二层(上层或上游)是区域级或全局级数据中心,在最终回源之前再提供一层缓存。
目标有两个:在离用户更近的数据中心保留本地缓存,并提高整个 Cloudflare 全球网络的命中率,避免不必要的回源。若不启用分层缓存,每个首次收到某内容请求的 Cloudflare 数据中心都会各自回源,源服务器会重复提供同一份内容。
启用分层缓存后,边缘数据中心未命中时,会先向上层数据中心查询。上层命中即可直接返回,无需访问源服务器,从而提升首次请求的性能和整体命中率。若上层也未命中,则从源服务器获取内容,并沿途缓存在各层,供后续来自其他下游数据中心的请求使用。
定义这些数据中心层次的机制称为分层缓存拓扑,可选:
- 智能: Cloudflare 根据性能和路由数据自动选择最佳上层数据中心,并沿最高性能、最可靠的路径转发缓存请求。
- 通用: 与智能类似,但使用单一全局层次:所有下层都指向同一组上层(通常是全部 Tier 1 数据中心),而不是按站点动态选择。
- 自定义: 按客户源站位置和流量分布手动指定上层缓存和区域关联,适用于有明确地理重点的部署。
有关配置这些拓扑的最佳实践,请参阅分层缓存拓扑。
通过实施 Argo 智能路由,Cloudflare 使用整个网络中的性能数据和网络拥塞信号来自适应地、智能地在 Cloudflare 的不同数据中心之间路由流量,而不是严重依赖默认 BGP 功能及其经常未优化或过载的网络路径,以从最终用户到原始服务器实现请求和内容的最快速度。
Cloudflare 全球网络由这些数据中心组成,可以实时测量路径和延迟变化并据此调整路由。这样既能尽量用缓存内容服务用户、减少回源,也能让必须离开 Cloudflare 网络、回到客户源站的请求走最快、最稳固的路径。有关最佳路径机制的详细信息,请参阅流量的动态路由和加速参考架构。
上述技术构成 Cloudflare CDN 的底层机制,并支撑一系列附加选项和配置,以满足不同应用场景。最常用的功能如下。
有关这些功能以及更复杂场景的说明,请参阅缓存开发者文档。
缓存是 CDN 最基本的功能。Cloudflare 提供多种方式来配置缓存行为,并将其应用于每个请求:
- 默认情况下,缓存会根据预定义的标准文件扩展名自动生效,从而开箱即用地优化内容性能。如不需要,可以排除这些默认规则。
- 通过页面规则,可以按 URL 路径和行为参数,为特定或非标准的应用程序和资产类型进一步调整缓存。
- 缓存规则提供更精细的条件控制。除路径和通配符外,还可以根据多种参数决定何时缓存、包含或排除内容,从而构建例外、复杂规则集,甚至覆盖 API 内容和非常具体的资源状态。
- 需要立即使内容失效、而不等待 TTL 到期时,可以使用清除缓存。可按文件、缓存标签或整个配置清除,也可通过仪表板、API 或自动化调用。
- 可以配置规则,在响应中插入、覆盖或修改标准缓存控制标头,以强制客户端或浏览器使用所需的缓存生命周期。
- 缓存响应可能包含用户特定或需保密的内容。Cloudflare 缓存可以使用缓存键等机制检查响应中的其他信息,并据此决定如何存储和查找内容。
将 Cloudflare 作为内容请求的入口,并用于保护和管控 Web 应用程序时,以下考虑适用于所有此类部署。
CDN 及其缓存配置决定了请求到达源服务器之前的大部分流量管理。除缓存外,通常还需要部署其他解决方案,以补齐安全与策略,或扩展功能本身。
- Web 应用程序防火墙 (WAF):缓存只覆盖已满足缓存条件的请求。未命中、首次请求或必须回源的流量仍需保护源站。WAF 可检查入站请求、执行速率限制,并用自定义规则提供防护或修改请求参数。这是保护基础设施的基础,详见 WAF 架构 和 WAF 缓解策略。
- Bot 管理和 DDoS 防护:为未缓存请求、首次页面调用、对计算基础设施施压的流量,或滥用合法机制的请求,增加 Bot 管理和 DDoS 防护,有助于构建更具弹性、可扩展且可用的系统。
- Workers 和无服务器边缘计算:需要比缓存规则更精细的控制时,可在每个数据中心运行边缘计算,用 JavaScript、Rust 或 WebAssembly 根据请求信息执行逻辑。这样可以实现自定义应用或专用行为,而无需回源。
- 负载均衡:基础设施扩展后,可为每个资源配置多个源站或区域。Cloudflare 在回源前监控连通性、响应和其他健康指标,只将边缘未完成的请求转发给健康的源站,从而降低因源站故障导致停机的风险。详见负载均衡参考架构。
- 使用 Cloudflare Access / 零信任保护资源和私有连接:对应保持私有的资源,请求须经过代理。该代理除标准内容控制外,还会按身份感知策略(从用户识别到设备与其他控制)决定是否允许访问边缘缓存中的内容。详见零信任应用程序访问(以前称为 Cloudflare Access)参考架构。
有关缓存产品、本架构以及上述功能的更多信息,请参阅:
- 缓存文档
- 页面规则
- 清除缓存
- 流量的动态路由和加速参考架构