译者 | 明知山
策划 | 丁晓昀
最近,DoorDash 大幅优化了其云基础设施成本。DoorDash 在转向微服务架构时面临跨可用区数据传输成本增加的问题。为了大幅降低这一成本,DoorDash 充分利用了蜂窝架构,在其基于 Envoy 的服务网格中实现了区域感知路由。
DoorDash 在其基于 Envoy 的服务网格中实现的 区域感知路由 对于降低云基础设施成本来说至关重要。这一实现使得 DoorDash 能够高效地在同一 可用区(AZ)内定向流量,最大限度地减少更昂贵的跨 AZ 数据传输。
借由 Envoy 的区域感知路由功能,调用者服务倾向于将流量定向到同一可用区内的被调用服务,从而降低跨可用区数据传输成本。下面的“Before”一图显示了 Pod 如何使用简单的轮询负载均衡器跨可用区进行通信,从而产生额外的费用。相反,“After”一图显示了区域感知路由如何优先在同一区域内选择服务。
Pod 之间的轮询负载均衡 (Source)
Pod 之间的区域感知路由 (Source)
为了启用区域感知路由,DoorDash 修改了其内部自定义的服务网格控制平面,为 Envoy 提供每个节点的 AZ 信息,如下例所示。
resources:
- "@type": type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment
cluster_name: payment-service.service.prod.ddsd
endpoints:
- locality:
zone: us-west-2a
lb_endpoints:
- endpoint:
address:
socket_address:
address: 1.1.1.1
port_value: 80
- locality:
zone: us-west-2b
lb_endpoints:
- endpoint:
address:
socket_address:
address: 2.2.2.2
port_value: 80
- locality:
zone: us-west-2c
lb_endpoints:
- endpoint:
address:
socket_address:
address: 3.3.3.3
port_value: 80
端点发现响应示例——请注意添加的地域信息 (Source)
DoorDash 的蜂窝架构对这一举措的成功做出了重要贡献。蜂窝架构 “概念源自船舶中的 防水隔板,垂直隔板将船舶内部分割成独立的水密隔间。”软件架构师在复杂的系统中复制这种模式,以实现故障隔离。故障隔离边界将工作负载的故障影响限制在有限数量的组件上,使边界之外的组件不受故障影响。
Slack 最近也分享了他们 如何使用蜂窝架构来缓解灰色故障。
在 DoorDash 的蜂窝架构中,每个单元由多个 Kubernetes 集群组成,每个微服务被专门部署到给定单元内的一个集群。DoorDash 的工程师跨多个可用区部署每一个 Kubernetes 集群,以增强可用性和容错性。
基于单元的多集群部署 (Source)
通过在这些单元内启用区域感知路由,DoorDash 有效地将流量本地化,进一步减少跨可用区数据传输。这种方法不仅优化了网络效率,还增强了系统的整体弹性,因为它最大限度地减少了单个单元内的故障影响,提升了 DoorDash 微服务生态系统的健壮性。
作者 Hochuen Wong 和 Levon Stepanian 并未透露节省的百分比,但他们表示“这些措施极大地降低了 DoorDash 的数据传输成本,以至于我们的云服务供应商主动联系我们,询问我们是否遇到了与生产相关的问题。”他们总结道:
云服务供应商的数据传输定价比最初看起来更加复杂。为了构建正确的效率解决方案,花时间了解定价模型是值得的。
要全面了解所有跨可用区流量是具有挑战性的。尽管如此,将不同来源的网络字节度量结合起来就足以确定热点,一旦解决这些热点,就可以显着降低使用量和成本。
随着微服务调用图中跃点数量的增加,数据跨可用区传输的可能性也会增加,从而增加了确保所有跃点支持区域感知路由的复杂性。
作者建议微服务系统所有者重新审视其数据传输成本,对于服务网格,不仅要考虑其流量管理功能,还要考虑其提供更高效率的潜力。
查看英文原文:
https://www.infoq.com/news/2024/01/doordash-service-mesh/
声明:本文由 InfoQ 翻译,未经许可禁止转载。