本主题详细介绍了在客户端旁边置备应用程序代理服务以提高性能和安全性。
挑战
应用程序通常是在一个或两个数据中心上托管的,并通过 Internet 连接客户端以与应用程序交互。对于某些应用程序,最大限度减少延迟是非常重要的。要做到这一点,最佳方法是将应用程序移到更靠近客户端的位置。由于支持应用程序的数据库必须保留在主数据中心,因此,选择非常有限。
解决方案
应用程序保持不变,仍位于主数据中心。将应用程序代理部署在靠近客户端的位置。转发代理在客户端之间具有非常小的延迟,这会显著加快建立连接和传输数据的过程。TCP 和 HTTP 完全代理、SSL 终止、缓存、压缩以及安全阻止或允许列表等功能为客户端提供更好的性能,并为应用程序提供更好的分布式安全性。在示例延迟图中,如果延迟为 100 毫秒,则客户端至少需要 400 毫秒才能收到第一个 html 文件。通过使用边缘代理将内容移到靠近客户端的位置,如果 RTT 为 30 毫秒,则会在 120 毫秒内收到第一个 html 文件。随着请求更多和更大的对象(需要更多的 TCP ACK 和更多的往返次数),缩短的时间明显增加。
用例 1
该用例适用于客户需求动态激增的情况。例如,临时活动可能吸引大量客户来到某个地理区域,例如召开会议或举办奥运会等体育赛事。
可以快速启动一个临时数据中心,并在公有云中的虚拟基础架构上置备几个服务引擎。在活动结束后,可以轻松取消置备边缘代理。这种变化的主要目的是加速客户端体验。
用例 2
另一种变化针对定期访问应用程序的静态客户端。由于这些客户端是已知且值得信赖的(例如远程办公室),因此,可以在它们所在的位置中安装代理。在它们访问应用程序时,它们的请求通过本地代理进行路由,本地代理先提供初始身份验证,然后再通过加密隧道将客户端请求通过 SD-WAN 发回到中心数据中心。这种变化的主要目的是安全性,其次是加速。
替代方案
为了加速应用程序,最常见的替代方案是内容交付网络 (Content Delivery Network, CDN)。CDN 通常需要使用 SSL 证书,这对于金融行业是不可行的。它们通常会产生巨大的长期成本。
对于安全用例,可以为每个连接客户端配置 VPN 或给定的专用 WAN 链路。
架构
现有数据中心的架构在这两个用例中保持相同。对于用例 1,启动了新的数据中心。这可以是公有云,例如 AWS 或 GCP。置备了两个新的服务引擎以提供代理服务。这些 SE 由主数据中心上的现有控制器进行管理。每个边缘代理在控制器中作为独特的云而隔离开。
虚拟服务:为每个要通过边缘代理进行代理的应用程序创建一个新的虚拟服务。可以为这些虚拟服务配置 SSL 终止、HTTP 缓存、访问控制列表、客户端身份验证、自定义 DataScript 或通常可能使用的任何其他功能。
池:代理虚拟服务配置了一个池,其中包含来自主数据中心和辅助数据中心的虚拟服务 IP 地址。通过使用优先级负载均衡,流量将发送到主数据中心,或者在主数据中心关闭或无法访问时发送到辅助数据中心。如果使用多个活动数据中心,则优先使用最快的负载均衡算法。
数据中心到数据中心的流量:从边缘代理转发到数据中心虚拟服务的请求必须始终是安全和加密的。在代理虚拟服务池中,启用服务器端 SSL 以确保线路到线路加密。
对象重用:SSL 证书等对象可以由任何云使用。因此,如果更新 SSL 证书(或类似的共享对象),则会更新使用该对象的所有边缘代理。
HTTP 压缩:如果需要进行压缩,必须在边缘代理上停用压缩,并在数据中心虚拟服务上启用压缩。这样,仅执行一次压缩。在数据中心上压缩内容后,压缩的内容将转发回连接到边缘代理的客户端。
X-Forwarded-For:如果应用程序服务器需要使用客户端 IP 地址,则必须通过 HTTP 应用程序配置文件配置边缘代理以插入 XFF 标头。如果主数据中心上的虚拟服务也启用了 XFF 标头插入,它将嵌入边缘代理的 SNAT IP 地址。要解决该问题,主数据中心虚拟服务必须使用 DataScript 或 HTTP 请求策略有选择地添加 XFF 标头(根据源地址)。如果源是边缘代理并且 XFF 已存在,则不要添加 XFF。如果源不是边缘代理,请添加 XFF。对于大量边缘代理,请将其 IP 地址放入 IP 组中,以使策略或 DataScript 更简洁。
接收流量:在公用 Internet 上,流量通过 DNS 传输到边缘代理。可以使用动态算法(例如地理位置或 IP 任播)通过全局负载均衡器完成该操作。在专用环境(例如用例 2)中,可以使用 DNS,但可能需要改用静态路由。
返回流量:默认情况下,服务引擎在边缘代理中对流量进行 SNAT 处理,然后在数据中心再次进行 SNAT 处理。响应流经相同的路径。在用例 2 中,可以使用 SD-WAN 创建从中心数据中心到每个远程位置的连接。NSX Advanced Load Balancer 将所有响应发回到向服务引擎发送请求的 MAC 地址。