写点什么

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

2017 年 2 月 07 日

由 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 年 2 月 07 日 18:008074

评论

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

华为云张昆:支持全场景全业务,GaussDB加速企业数字化转型

华为云开发者社区

数据库

Alibaba Java面试题大揭秘,把这些知识点吃透去面试成功率高达100%

Java成神之路

Java 程序员 架构 面试 编程语言

从根上理解高性能、高并发(四):深入操作系统,彻底理解同步与异步

JackJiang

网络编程 高并发 高性能 即时通讯

DevSecOps:把合规融入DevOps

啸天

DevOps 安全 法律 DevSecOps 应用安全

学习新语言步骤(有其他语言基础前提)

周周

SpringCloud 从入门到精通 08--- Eureka集群

Felix

关于2020 我有12个关键词

浪潮云

阅读

Python 使用SQLServer

Tango

日更挑战

即构推出低延迟直播产品L3,可将直播延迟降到1s

ZEGO即构

云原生动态周报 |华为云主导抗疫药物筛选科研成果"神农项目"登上国际化学顶刊封面

华为云原生团队

GitHub 疫情 云原生 Prometheus 华为云

anyRTC-语音连麦demo上线

anyRTC开发者

音视频 WebRTC 直播 实时语音 语音聊天室

致ClickHouse用户的一封信

DorisDB

数据库 大数据 数据分析 OLAP Clickhouse

大数据知识专栏 - Zookeeper的Shell操作

小马哥

大数据 zookeeper 大数据技术 ZooKeeper原理 28天写作

重学JS | 异步编程 Promise

梁龙先森

前端 编程语言 28天写作

CSS12 - 清除浮动

桃夭十一里

html/css

实践为主,理论够用!腾讯高工手码MySQL高阶宝典震撼开源

程序员小毕

Java MySQL 架构 性能优化 性能调优

四面阿里Java面经(已拿offer):Redis缓存+中间件+笔试撸码

Java成神之路

Java 程序员 架构 面试 编程语言

前端代码书写规范

桃夭十一里

前端 html/css

第一篇文章

Nemo

区块链即时通讯系统开发方案,IM聊天社交软件开发

v16629866266

专科出身Java开发,2年进入苏宁,5年跳槽阿里,我晋升这么快的秘诀是什么?

Java架构追梦

Java 阿里巴巴 面试 架构师 成长路线

Mobileye的创新科技与方案将助力自动驾驶汽车畅行世界、惠及大众

intel001

对于我们程序员来说,基本面是什么呢?

Java架构师迁哥

阿里开发7年大牛:闭关60天学懂NDK+Flutter,大厂面试题汇总

欢喜学安卓

android 程序员 面试 移动开发

链上智能合约APP开发|链上智能合约系统软件开发

开發I852946OIIO

系统开发

关于“存在”的一点思考

石君

28天写作 量子 世界为何存在

再谈跨界 互联网+的建筑行业

张老蔫

28天写作

安卓开发详解!Flutter全方位深入探索,吊打面试官系列!

欢喜学安卓

android 程序员 面试 移动开发

Spring中@Import的作用

张健

用技术的方式,在UI设计稿中设置随机码,保证高清

行者AI

Python

波场链智能合约软件开发|波场链智能合约APP系统开发

开發I852946OIIO

系统开发

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