写点什么

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

  • 2017-02-07
  • 本文字数:1763 字

    阅读完需:约 6 分钟

由 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 )关注我们。

2017-02-07 18:008862

评论

发布
暂无评论
发现更多内容

架构师训练营 1 期第 5 周:技术选型(一) - 总结

piercebn

极客大学架构师训练营

架构师训练营 W01 总结

Geek_f06ede

极客大学架构师训练营

架构师训练营 - 第五周 - 作业二

行者

二十二、 深入Python的进程和线程(上篇)

刘润森

Python

食堂就餐卡系统设计

菜青虫

架构师训练营W01作业

Geek_f06ede

极客大学架构师训练营

架构师训练营第一周作业

TONNY

学习总结

TONNY

介绍几种微商常见的引流方式

boshi

营销 电商

周练习 5

何毅曦

4. Validator校验器的五大核心组件,一个都不能少

YourBatman

Hibernate-Validator Bean Validation 数据校验

第五周作业

alpha

极客大学架构师训练营

一个程序猿应该具备哪些能力?

锐哥

程序员 1024讲话 1024

架构师训练营 第一课作业

文江

SQL优化-分治思想

印無印

MySQL SQL优化

架构师训练营第五周作业——一致性哈希算法

文智

极客大学架构师训练营

微服务监控:SpringBoot-Micrometer-Influx

远鹏

监控 Influxdb springboot metrics

正式“退休”的Flash,未来我们会怀念它吗?

脑极体

架构师1期-技术选型(一)作业

ltl3884

极客大学架构师训练营

架构师训练营 - 第五周 - 作业一

行者

2020年的Java程序员面试三件套:多线程+算法+微服务

Java架构师迁哥

一个大型的互联网应用系统使用了哪些技术手段

kawayi

【高并发】面试官问我:为什么局部变量是线程安全的?

冰河

多线程 高并发 高性能 线程安全 签约计划第二季

并发环境下,先操作数据库还是先操作缓存?

捡田螺的小男孩

数据库 缓存 后端 并发

架构师训练营第五周作业

我是谁

极客大学架构师训练营

第13周作业

Vincent

极客时间 极客大学

第13周总结

Vincent

极客时间 极客大学

1024|推荐一个开源免费的Spring Boot教程

Java旅途

Java 开源 Spring Boot

Netty源码解析 -- ChannelPipeline机制与读写过程

binecy

Netty nio 源码剖析

ping TCP端口的实用小工具tcping

网络 ping tcping

第五周学习总结

alpha

极客大学架构师训练营

专访Matt Klein关于在Lyft构建Envoy的问答_SOA_Thomas Betts_InfoQ精选文章