本地数据中心迁移上云—金丝雀流量切换方案

本地数据中心迁移上云—金丝雀流量切换方案

Deng YongJie's blog 21 2025-07-12

金丝雀切换方式一

route53加权路由,DNS路由至ALB与本地数据中心
image-20241231141013096
image
image-1749610015344

优点:

  • 低风险验证:允许在一个受控的小范围内验证AWS应用程序的功能和性能,降低大规模部署的风险。
  • **多区域支持:**Route 53的全球分布特性使得跨多个地理区域进行金丝雀发布变得容易,确保不同地区的用户体验一致。
  • 集成现有基础设施:这种方法能够很好地与现有的云架构集成,同时也支持混合云模式下的本地数据中心。
  • **减轻VPN隧道带宽压力:**流量从互联网按照比例路由本地数据中心公网IP、CloudFront回源ALB,无需经过VPN隧道访问本地数据中心的应用程序,减轻单一隧道的压力。

缺点:

  • **监控复杂度增加:**相关监控机制可能会增加运维复杂度,如何准确近实时监控查询记录?准确评估本地数据中心与AWS的访问比例?
  • 缓存问题:客户端可能会缓存DNS查询结果,导致某些用户在权重变化后仍然访问旧版本的服务,导致几分钟以内的比例不会很准确。可以通过设置60秒较短的TTL(生存时间)值来缓解这个问题,但这也会增加DNS查询频率。
  • **性能影响:**每次客户端进行DNS查询都会产生网络延迟,这会增加用户的访问时间。对于高流量站点,少量的延迟,累积起来可能变得明显。因为DNS记录的TTL到期时,客户端必须重新查询以获取最新的IP地址。通常DNS查询延迟在几毫秒到几百毫秒之间。

image-1749610236933

实现原理

  • **权重分配:**例如,CDN和另一个域名指定了一个权重值。CDN的权重是70,而另一个域名的权重是30。
  • **DNS查询处理:**每当一个用户的DNS请求到达Route 53时,它会根据权重计算选择哪一个资源返回给客户端。Route 53会在内部进行一个“抽奖”过程,其中每个资源被选中的概率与它的权重成正比。
  • **TTL时间:**设置的TTL时间为60秒意味着DNS解析结果在客户端缓存中的有效期为60秒。在此期间内,客户端将继续使用同一个IP地址或域名解析结果,不会再次发起DNS查询。一旦TTL过期,客户端会重新发起DNS查询,此时可能会收到不同的解析结果,因为Route 53会再次根据权重随机选择。

用户如何按权重比例访问

  • **首次解析:**对于第一次访问的用户,或者其DNS缓存已过期的用户,他们的DNS查询会被发送到Route 53。Route 53会设定的权重比例随机选择一个目标,并将相应的CNAME记录返回给用户。
  • **后续访问:**由于设置了60秒的TTL,用户在接下来的一分钟内会继续使用第一次查询得到的结果。这意味着在这段时间内,用户的每次请求都会被发送到同一个目标(CDN或其他域名),直到TTL过期。
  • **负载分布:**不同用户会根据权重比例被分配到不同的目标。总体来看,大约70%的新DNS查询会被路由到CDN,而30%会被路由到另一个域名。但是单个用户的体验可能不会精确地出现这个比例,因为解析结果被缓存,用户在TTL过期前会一直访问同一个目标。

注意事项

  • **非均匀分布:**由于DNS缓存的存在和递归DNS服务器的配置差异,实际流量分布可能不会完全符合设定的权重比例。假如:办公室内网DNS服务器配置文件设置了3600秒TTL,因此办公室内的用户也会缓存3600秒。所以用户的每次访问,并不会精确的按照权重比例分配路由,只有用户的TTL过期之后,重新查询DNS解析,此时Route 53才会再次根据权重随机选择分配的域名。

金丝雀切换方式二

通过ALB加权路由,按比例转发EKS-Node、EC2多可用区实例代理

image-20241231150824459

优点:

  • 低风险验证:允许在一个受控的小范围内验证AWS应用程序的功能和性能,降低大规模部署的风险。
  • 高可用性和容错性:使用多可用区的 EC2 实例和 EKS Node 提供了高可用性和容错性,确保即使某个可用区出现问题,其他可用区仍能继续提供服务。ALB 提供了负载均衡、健康检测和故障转移功能,进一步增强了系统的可靠性。
  • **流量精细控制:**在应用层进行流量分配,可以更精细地控制流量。
  • **延迟和性能:**客户端不需要频繁的 DNS 查询,并且由于 ALB 靠近应用程序层,通常会有较低的内部网络延迟。

缺点:

  • **VPN隧道压力:**应用程序、数据库所有流量必须通过同一隧道,增加了隧道的压力,可能导致性能瓶颈。
  • 单点故障风险:单一隧道存在单点故障的风险,如果隧道中断,所有流量都会受到影响。
  • **VPN隧道质量:**可能受到互联网质量的影响,导致隧道网络抖动,可能延迟增加。
  • **成本:**如果隧道带宽需求较高,可能会导致较高的网络成本,出站数据传输会根据目的区域和传输量收费。

走公网方式,金融或政府项目,安全不符合标准
image-20250102184712937

金丝雀测试切换方式三

cloudfront基于Lambda@Egde函数,此函数处理请求逻辑,并分发自定义源和ALB源,通常适用于A/B版发布

重点:在边缘函数中,很多不允许使用的标头和只读标头

https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/edge-function-restrictions-all.html