原文地址:https://blog.envoyproxy.io/the-universal-data-plane-api-d15cec7a

作者:Matt Klein

译者:敖小剑

校对:宋净超

正如我之前所说的,在如此短的时间内,Envoy 带来的兴奋既神奇又震撼人心。我经常问自己:envoy 的哪些方面导致了我们所看到的异常的社区增长?虽然 Envoy 具有很多引人注目的特征,但最终我认为有三个主要特征在共同推动:

  1. 性能:在具备大量特性的同时,Envoy 提供极高的吞吐量和低尾部延迟差异,而 CPU 和 RAM 消耗却相对较少。

  2. 可扩展性:Envoy 在 L4 和 L7 都提供了丰富的可插拔过滤器能力,使用户可以轻松添加 开源版本中没有的功能。

  3. API可配置性:或许最重要的是,Envoy 提供了一组可以通过控制平面服务实现的管理 API 。如果控制平面实现所有的 API,则可以使用通用引导配置在整个基础架构上运行 Envoy。所有进一步的配置更改通过管理服务器以无缝方式动态传送,因此 Envoy 从不需要重新启动。这使得 Envoy 成为通用数据平面,当它与一个足够复杂的控制平面相结合时,会极大的降低整体运维的复杂性。

有代理具备超高性能。也有代理具备高度的可扩展性和动态可配置性。在我看来,性能、可扩展性和动态可配置性的结合 才使得 Envoy 如此的引人注目。

在这篇文章中,我将概述 Envoy 动态配置 API 背后的历史和动机,讨论从 v1 到 v2 的演变,最后,鼓励更多的负载均衡,代理和控制平面社区来考虑在其产品中支持这些API。

Envoy API v1的历史

Envoy 最初的设计目标之一是实现最终一致的服务发现系统。为此,我们开发了一个非常简单的发现服务和 Service Discovery Service (SDS) REST API,用来返回上游集群成员。该 API 克服了基于 DNS 的服务发现的一些限制(记录限制、缺少额外元数据等),并使我们能够快速实现高可靠性。

Envoy 开源初期,我们收到了很多关于支持其他服务发现系统的要求,如 Consul、Kubernetes、Marathon、DNS SRV等。我担心我们对这些系统直接支持的缺失会限制 Envoy 的使用范围而不被人所接纳。添加新的发现适配器的代码编写并不困难,我希望有关方面能够实施新的适配器。而过去一年实际发生是什么? 没有一个新的适配器被贡献到代码中,但我们看到了令人难以置信的接受度。为什么?

事实证明,几乎每个人都以自己的方式来实现 SDS API。API 本身是微不足道的,但我不认为这是人们实现它的唯一原因。另一个原因是,离数据平面越远,事情自然就会开始变得更牢固。Envoy 的消费者通常希望最终服务发现能够集成到特定的工作流程中。API 的简单性使得其可以轻松集成到几乎任何控制平面系统中。甚至像 Consul 系统的用户(参见示例 Nelson)也发现中间 API 可以对成员和命名做更智能的处理。因此,即使在如此早期的阶段,我们也看到了对通用数据平面 API 的渴望:一个简单的 API,从控制平面中抽象出数据平面。

在过去的一年中,Envoy 添加了多个 v1/REST 管理 API。他们包括:

  • 集群发现服务(CDS):使用此 API,Envoy 可以动态地添加/更新/删除所有上游集群(每个集群本身都有自己的服务/端点发现)。

  • 路由发现服务(RDS):使用此API,Envoy 可以动态地添加/更新 HTTP 路由表。

  • 监听器发现服务(LDS):使用此 API,Envoy 可以动态地添加/更新/删除全体监听器,包括其完整的 L4 和 L7 过滤器堆栈。

当控制平面实现 SDS/CDS/RDS/LDS 时,几乎 Envoy 的所有方面都可以在运行时动态配置。Istio 和 Nelson 都是控制平面的例子,他们在 V1 API 上构建,具备极其丰富的功能。通过使用相对简单的 REST API,Envoy 可以快速迭代性能和数据平面功能,同时仍支持各种不同的控制平面方案。此时,通用数据平面概念正成为现实。

v1 API的缺点和v2的引入

v1 API 仅使用 JSON/REST,本质上是轮询。这有几个缺点:

  • 尽管 Envoy 在内部使用的是 JSON 模式,但 API 本身并不是强类型,而且安全实现它们的通用服务器也很难。

  • 虽然轮询工作在实践中是很正常的用法,但更强大的控制平面更喜欢 streaming API,当其就绪后,可以将更新推送给每个 Envoy。这可以将更新传播时间从 30-60 秒降低到 250-500 毫秒,即使在极其庞大的部署中也是如此。

在过去几个月与 Google 的紧密合作中,我们一直在努力研究一组我们称之为 v2 的新 API。v2 API 具有以下属性:

  • 新的 API 模式使用 proto3 指定,并同时以 gRPC 和 REST + JSON/YAML 端点实现。另外,它们被定义在一个名为 envoy-api 的新的专用源代码仓库中。proto3 的使用意味着这些 API 是强类型的,同时仍然通过 proto3 的 JSON/YAML 表示来支持 JSON/YAML 变体。专用存储仓库的使用意味着项目可以更容易的使用 API 并用 gRPC 支持的所有语言生成存根(实际上,对于希望使用它的用户,我们将继续支持基于 REST 的 JSON/YAML 变体)。

译者注:envoy-api 仓库在 Envoy 加入CNCF 后改为 envoyproxy/data-plane-api 仓库,问题后面有提到。

  • v2 API 是 v1 的演进,而不是革命,它是 v1 功能的超集。v1 用户会发现 v2 非常接近他们已经在使用的 API。实际上,我们一直以可以继续永久支持 v1(尽管是最终被冻结的功能集)的方式在 Envoy 中实现 v2。

  • 不透明的元数据已被添加到各种 API 响应中,这将极大的增强可扩展性。例如,HTTP 路由中的元数据,附加到上游端点和自定义负载均衡器的元数据,以用来构建站点特有的基于标签的路由。我们的目标是可以在默认的OSS发行版之上轻松插入丰富的功能。未来将有更强大的关于编写 Envoy 扩展的文档。

  • 对于使用 v2 gRPC(vs. JSON/REST)的 API 消费者,双向流会有一些有趣的增强,我将在下面进行更多讨论。

v2 API 由以下部分组成:

  • Endpoint Discovery Service (EDS):这是v1 SDS API的替代品。SDS是一个不幸的名字选择,所以我们正在v2中修复这个问题。此外,gRPC的双向流性质将允许将负载/健康信息报告回管理服务器,为将来的全局负载均衡功能开启大门。

  • Cluster Discovery Service (CDS):和v1没有实质性变化。

  • Route Discovery Service (RDS):和v1没有实质性变化。

  • Listener Discovery Service (LDS):和v1的唯一主要变化是:我们现在允许监听器定义多个并发过滤栈,这些过滤栈可以基于一组监听器路由规则(例如,SNI,源/目的地IP匹配等)来选择。这是处理“原始目的地”策略路由的更简洁的方式,这种路由是透明数据平面解决方案(如Istio)所需要的。

  • Health Discovery Service (HDS):该 API 将允许 Envoy 成为分布式健康检查网络的成员。中央健康检查服务可以使用一组 Envoy 作为健康检查终点并将状态报告回来,从而缓解N²健康检查问题,这个问题指的是其间的每个 Envoy 都可能需要对每个其他 Envoy 进行健康检查。

  • Aggregated Discovery Service (ADS):总的来说,Envoy 的设计是最终一致的。这意味着默认情况下,每个管理 API 都并发运行,并且不会相互交互。在某些情况下,一次一个管理服务器处理单个 Envoy 的所有更新是有益的(例如,如果需要对更新进行排序以避免流量下降)。此 API 允许通过单个管理服务器的单个 gRPC 双向流对所有其他 API 进行编组,从而实现确定性排序。

  • Key Discovery Service (KDS):该API尚未定义,但我们将添加一个专用的API来传递TLS密钥材料。这将解耦通过 LDS/CDS 发送主要监听器、集群配置和通过专用密钥管理系统发送秘钥素材。

译者注:目前 xds 中没有 kds 的定义,但是有一个Secret Discovery Service,应该是这个 kds 的改名。以上 API 请参考 https://github.com/envoyproxy/data-plane-api/tree/master/envoy/api/v2

总的来说,我们称所有上述 API 为 xDS。 从 JSON/REST 到 proto3 API 的过渡非常令人兴奋,良好类型的 proto3 API 可以更容易使用,我认为这将进一步提高 API 本身以及 Envoy 的接受度。

多代理多控制平面的 API?

服务网格/负载均衡领域现在非常活跃。代理包括 Envoy、Linkerd、NGINX、HAProxy、Traefik,来自所有主要云提供商的软件负载均衡器,以及传统硬件供应商(如 F5 和思科)的物理设备。随着众多解决方案的出现,如 Istio、Nelson,集成云解决方案以及许多供应商即将推出的产品等,控制平面领域也在不断升温。

特别讨论一下 Istio,Linkerd 已经宣布对它的支持,这意味着至少在某种程度上它已经实现了 v1 Envoy API。其他人可能会跟随。 在这个数据平面和控制平面快速发展的新世界中,我们将看到组件的混合和匹配;数据平面将与许多控制平面一起工作,反之亦然。我们是否可以让业界受益于一种通用 API,让这种混合和匹配更容易实现? 这会有什么帮助?

在我看来,在接下来的几年中,数据平面本身将大部分商品化。大部分创新(和商业机会扩展)实际上将成为控制平面的一部分。使用 v2 Envoy API,控制平面功能的范围可以会从使用 N² 健康检查的扁平端点命名空间扩展到一个非常丰富的全局负载均衡系统,该系统可进行自动构造子集、负载装卸和均衡、分布式局部健康检查、区域感知路由、基于百分比的自动部署和回滚等。供应商将在提供无缝的微服务运维环境方面展开竞争,而对路由的自动化控制将是其竞争中的主要部分。

在这个新的世界中,数据平台可以用来与控制平面进行通讯的通用API对每个参与者都是一个胜利。控制平面提供商可以将它们的服务提供给实现该API的任何数据平面。数据平面可以在功能,性能,规模和健壮性方面展开竞争。此外,解耦允许控制平面提供商提供 SaaS 解决方案,而不需要同时拥有数据平面部署,这是一个主要的痛点。

Envoy API 合作邀请

虽然很难知道未来几年会发生什么,但我们对 Envoy 及其相关 API 的采用感到非常兴奋。我们看到了通用的数据平面 API 的价值所在:可以桥接不同系统。根据这些原则,我们邀请更大的数据平面和控制平面供应商以及用户与我们在 envoy-api 存储仓库中进行协作(请注意,当Envoy 进入 CNCF 并转换到专用的 envoyproxy GitHub 组织时,我们将重命名该存储仓库为 data-plane-api)。我们不保证我们将添加所有可能的功能,但我们希望看到其他系统使用这些 API 并帮助我们改进它们以满足他们自己的需求。我们的观点是,数据平面的商品化将为最终用户带来巨大收益,这有助于控制平面领域提高迭代和竞争速度,未来几年大部分创新将会发生在控制平面。

英文原文发布于2017年9月6日,本文发出时 Envoy 已经进入了 CNCF,成为了官方项目,Envoy 原来的代码都已经被重构和迁移,本文中提到的很多链接都已过时,请大家参考 Envoy 官网 https://www.envoyproxy.io/,也可以查看 Envoy 官方文档中文版 https://servicemesher.github.io/envoy/。

本文译者敖小剑老师将于11月24日在GIAC上海站发表重磅演讲《knative: 重新定义Serverless》,欢迎届时光临。本周购买GIAC门票可享88折优惠,高可用架构会员低至6折

活动预告:

11 月 23 ~ 24 日,GIAC 全球互联网架构大会将于上海举行。GIAC 是高可用架构技术社区推出的面向架构师、技术负责人及高端技术从业人员的技术架构大会。今年的 GIAC 已经有微软,腾讯、阿里巴巴、蚂蚁金服,华为,科大讯飞、新浪微博、京东、七牛、美团点评、饿了么,才云,格灵深瞳,Databricks,等公司专家出席。本周购买可享门票88折优惠,高可用架构会员低至6折

本期 GIAC 大会上,Cloud Native部分精彩的议题如下:

参加 GIAC,盘点2018最新技术。点击“阅读原文”了解大会更多详情。

Service Mesh中的通用数据平面API设计相关推荐

  1. NLP 中的通用数据增强方法及针对 NER 的变种

    本文结合 A Visual Survey of Data Augmentation in NLP 和最新的综述论文 A Survey of Data Augmentation Approaches f ...

  2. Service Mesh:调度千军万马微服务,2.0妥妥的

    冠望 发自 凹非寺 量子位 报道 | 公众号 QbitAI 过去一年,继Kubernetes风靡,Service Mesh已成功上位变成当之无愧的技术网红. TA不但可以极大简化用户使用体验,还将大中 ...

  3. 蚂蚁金服 Service Mesh 实践探索

    作者 | 敖小剑 本文整理自蚂蚁金服高级技术专家在 QCon 上海 2018 上的演讲. 大家好,我是来自蚂蚁金服中间件团队的敖小剑,目前是蚂蚁金服 Service Mesh 项目的PD.我同时也是 ...

  4. 2020 年 Service Mesh 技术展望

    背景 有外文指出,2020 年 Service Mesh 技术将有以下三大发展: 快速增长的服务网格需求: Istio 很难被打败,很可能成为服务网格技术的事实标准: 出现更多的服务网格用例,WebA ...

  5. 从蚂蚁金服实践入手,带你深入了解 Service Mesh

    本文整理自蚂蚁金服高级技术专家敖小剑在 QCon 上海 2018 上的演讲. 我是来自蚂蚁金服中间件团队的敖小剑,目前是蚂蚁金服 Service Mesh 项目的 PD.我同时也是 Serviceme ...

  6. Service Mesh 发展趋势:云原生中流砥柱

    | 前言 本文内容整理自 5月25日 在 Kubernetes & Cloud Native Meetup 上海站发表的主题演讲,主要介绍了 Service Mesh 最新的产品动态,分析其发 ...

  7. 蚂蚁金服 Service Mesh 实践探索 | Qcon 实录

    本文为转载   出处: 金融级分布式架构 原文链接:https://mp.weixin.qq.com/s/MiVstB0fUOTavko9NGu0Cw 敖小剑,资深码农,十六年软件开发经验,微服务专家 ...

  8. Service Mesh在腾讯云中间件团队的实践与思考

    导语:Service Mesh 作为腾讯微服务平台(TSF)支持的微服务架构之一,产品化命名为 Mesh 微服务平台(Tencent Service Mesh Framework,简称 TSF Mes ...

  9. 从网络接入层到 Service Mesh,蚂蚁金服网络代理的演进之路

    详细阅读本文大约需要15分钟,先花150s听听是否对本文感兴趣吧~ 本文作者:肖涵(涵畅) 上篇文章<诗和远方:蚂蚁金服 Service Mesh 深度实践 | QCon 实录>中,介绍了 ...

最新文章

  1. C/C++ 语言中的表达式求值
  2. 代理模式 、JDK动态代理、cglib动态代理
  3. 戴明博士:管理的十四项原则
  4. Hadoop入门(十三)远程提交wordCout程序到hadoop集群
  5. XML——XML概述
  6. CAN笔记(2) CAN特点
  7. 21秋期末考试电子商务概论10250k2
  8. 栈——栈的定义及基本操作(初始化、判空、进栈、出栈、遍历栈、销毁栈等)
  9. python实现模拟登录云课堂智慧职教并获取课程信息(1)
  10. 红蓝军模拟对抗三维电子沙盘开发教程第十课 wpf建立3D GIS数字地球
  11. 宇宙中最恐怖的行星之索伦之眼—北落师门b
  12. 播布客教学视频_C学习笔记_8.1_统计1到100中9的个数(分治)
  13. lombok get/set 方法未生效,解决办法
  14. Nodejs 使用 Buffer 将图片转为 base64
  15. 可怕的KCFErrordomainCFNetWork 303
  16. 蜻蜓FM2014年校招笔试题目 - 规则二叉树
  17. TOJ 1335 优先队列
  18. EasyPusher进行Android UVC外接摄像头直播推送实现方法
  19. HTML设计简单的教务管理系统
  20. 浙大ZOJ 1005 Jugs问题解决

热门文章

  1. 前端vue几款模板介绍
  2. python精选04集(选择语句)
  3. 在前端实现excel导入,在线编辑,导出,打印等功能
  4. 特种浓缩分离:无机陶瓷膜设备性能描述
  5. 机房动环监控系统有哪些告警功能,机房动环监控系统是什么?
  6. (在ObjectARX中使用MFC)
  7. Docker创始人兼CTO宣布离职;特斯拉被爆处于破产边缘;iOS更新,支持京沪地铁卡;谷歌安卓侵权案面临88亿美元赔款丨Q新闻...
  8. 【云原生】什么是 CI/CD ?| 软件交付中常见的问题
  9. Unity TileMap工具教程
  10. cad2011 2010闪退问题