专访 Matt Klein 关于在 Lyft 构建 Envoy 的问答

  • Thomas Betts
  • 周明耀

2017 年 2 月 7 日

话题:SOADevOps语言 & 开发架构

由 Microservices.com 主办的从业者峰会是一个由从业者驱动的微服务会议,该会议聚焦于现实世界应用中采用微服务的实际问题。该峰会 2017 年 1 月 31 日在美国旧金山召开,演讲嘉宾包括来自 Uber、New Relic、Lyft、PayPal,以及 Google 的微服务从业者。

Matt Klein 是一名来自于 Lyft 公司的资深软件工程师,他也是本次峰会的发言嘉宾之一。Klein 在 Lyft 负责 Envoy,这是一个七层通信总线,贯穿于整个 Lyft 的面向服务体系架构。

峰会举办之前 InfoQ 和 Klein 讨论了针对 Lyft 通信需求构建定制工具的受益点,同时也讨论了这个工具可以如何帮助其他微服务体系架构。

InfoQ:现代面向服务体系架构高度依赖网络通信和 RPC 调用,而不是在一个整体内处理。Envoy 如何改进对于复杂网络基础架构的依赖?

Matt Klein:过去 5->10 年我们看到了 SoA 的几个重大进步。首先,有很多伙伴正在构建 SoA,并且这个过程放在了基础架构生命周期的早期进行。更重要的是,我们看到很多公司同时使用多种语言进行部署(通常同时使用超过 3 种语言)。

过去,许多成熟 SoA 通信网络的复杂性已经通过非常复杂的网络通信库解决。解决方案包括负载均衡、路由、服务发现、重试、限速、断路、统计、日志、跟踪等等。除非一个组织使用很少的语言或者拥有很多的资源,否则慢慢地不太可能针对每一种生产环境的语言实现一个成熟的网络通信库。

Envoy 是一个进程外的高性能代理,它一次性解决了通用 SoA 的网络通信问题。Envoy 的设计目的是与应用程序(任务语言)一起运行,并且从应用程序开发人员手中抽象出许多复杂的网络通信业务。应用程序开发人员专注于业务逻辑,并且仅仅需要和本地 Envoy 交互,本地 Envoy 接着会去处理服务发现、负载均衡、路由等等。可能 Envoy 最重要的存在感是提供了针对 SoA 每一个步骤的一致性观察,从调试的角度来看这个特性非常重要。

InfoQ:在 Lyft,微服务开发人员需要了解多少网络通信协议栈?Envoy 是否有助于减少这种知识积累成本开销?

Matt Klein:非常少!随着完整的 Envoy 部署在 Lyft,我们已经创造了一个世界,开发人员和一个极端的瘦客户端沟通,我们称这个瘦客户端为 EnvoyClient。无论代码运行在开发环境、调试环境或是生产环境,开发人员实例化一个 EnvoyClient 并使用它和远程服务通信。在底层,所有的库都被设置了一些标签并与本地 Envoy 通信,而本地 Envoy 执行了所有工作。我们鼓励开发人员设置适当的重试机制、超时,等等。通过这个库,我们差不多可以完成这些功能。开发人员仅仅是启动一次调用并收到回复,其他东西就不需要多担心了。

因为 Envoy 可以运行在任何地方,我们也可以生产出大量的一致性数据,以此帮助开发人员调试(统计、日志、跟踪、可视化,等等)。

InfoQ:在 Envoy 就位以前,哪些组件参与了 L7 路由?为什么这些组件不够高效,创建一个自定义解决方案过程中我们做了哪些努力?

Matt Klein:就像很多现代公司一样,Lyft 是一个多语言公司。当前我们在生产环境中运行了 PHP、Python 和 Go 服务。在 Envoy 出现之前,我们采用了混杂不同解决方案的方式,包括每种语言的不同的库、不同的统计方式,等等。我们严重依赖于 Aws 的 Elb 产品,伴随着它们所有的内部问题(不稳定、较差的可观察性,等等)。总之,我们完全处于混乱状态。开发人员不信任网络通信,无法调试复杂的问题,并且对于在关键路径上创新高性能网络通信服务存在抵触。

很显然我们需要一个共同的基础功能,我们之前的许多经验和观察指引着我们构建 Envoy。

InfoQ:是否 Envoy 有助于任何一个组织过渡到微服务体系架构?最好的开始方式是什么?

Matt Klein:最终,我认为使用 Envoy 有助于任何一家公司适应复杂的 SoA。一个基本点是提供一个一致性的环境,这个环境是无价的,它可以减轻开发人员的负担,并且帮助调试复杂的问题。

我会鼓励大家去看看我们的网站,在那里我们已经付出很多努力去完善文档。我们也有一些关于 Docker 容器的示例,大家可以玩玩。此外,我们也正在努力构建更加直接访问 K8s 的 Envoy,这样会让小型公司更容易使用 Envoy。

参考英文原文Q&A with Matt Klein on Creating Envoy at Lyft


感谢刘志勇对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

SOADevOps语言 & 开发架构