原文:https://cloud.google.com/blog/products/networking/traffic-director-global-traffic-management-for-open-service-mesh
作者:Anna Berenberg & Arunkumar Jayaraman April 18, 2019

服务网格为不同队伍用不同语言开发的独立微服务提供了基础。服务网格将开发和运维进行解耦,开发者再也不用在应用代码中维护一套网络路由规则了。所有的流量路由规则都被Envoy等服务代理所接管,由服务网格控制面提供动态的流量管控。

流量指挥官让服务网格和Envoy更容易在生产环境中使用。 —— Matt Klein, Envoy的创始人

流量指挥官是谷歌云全方位管控的服务网格流量控制面。流量指挥官对于虚拟机和容器都有效,它使用开源的xDS接口来与数据面的服务代理进行交互。

流量指挥官的能力

  1. 全局负载均衡
  2. 中心化健康检查
  3. 基于Load的自动扩缩容
  4. 内嵌的弹性(高可用)
  5. 强大的流量控制能力

全局负载均衡

你们很多人肯定都使用过谷歌面向互联网服务的全局负载均衡。流量指挥官把全局负载均衡带到了服务网格的微服务场景下。通过全局负载均衡,我们可以为你在GCP上全球部署的服务实例赋能。流量指挥官提供了一套智能的通信方案,是的客户端自动把流量发往容量有空余的最近服务节点。
这可以大大优化服务上下游之间的流量分布,为请求提供最短的RTT时间。

全局负载均衡

如果距离客户端最近的服务节点挂掉了,那么流量指挥官会智能无缝地把流量切换到最近的健康节点。

切换到最近的健康节点

中心化健康监测

大规模部署的服务网格会产生大量的健康检查的流量,因为每一个代理都要去检查下游的所有服务的健康状态。当服务网格的体量增长的时候,健康检查就称为了一个 n2 的问题(假设 client 的数量和 server 的数量级都是n)。这会成为服务伸缩的一个重大障碍。

流量指挥官通过中心化的服务健康检查解决了这个问题。它使用一个全局分布式的弹性系统监控器去监控所有的服务实例。接下来,流量指挥官使用EDS API,把健康检查的结果分发到全球所有的代理。

基于Load的自动扩缩容

流量指挥官可以基于Load,支持自动扩容和缩容。Load信号是由proxy上报给它的。流量指挥官通知计算引擎扩/缩容到具体的大小。

当计算引擎扩容成功之前,流量指挥官会临时把流量打到其他可用的实例上,如果需要的话甚至会把流量临时打到其他的区域。一旦自动扩容成功,流量指挥官会把流量重新定位到最近的区域上。

内嵌弹性(高可用)

流量指挥官是全面部署在GCP上的,你不用担心它的启动时间、生命周期管理、扩缩容、可用性等任何问题。流量指挥官的架构是全球分部署弹性部署的,它与Google自身的2C业务使用同样的系统。
流量指挥官可以提供 99.99% GA(Generally Available) 的 SLA(Service Level Aggreement)。

流量控制能力

流量指挥官让你可以在不修改应用代码的情况下控制流量
你可以创建一个自定义的流量控制规则或者策略

  • HTTP匹配:指定参数,包括host,path以及header
  • HTTP行为:在匹配成功之后,指定需要进行的行为,包括重定向、重写、header变换、镜像、故障注入等等
  • 每个服务的流量策略:可以设置负载均衡算法、熔断参数等其他服务级别的配置
  • 配置过滤:把配置推送到客户端的部分子集的能力

使用上述路由规则和流量策略,你可以轻松地使得流量控制能力足够强大。