服务网格-Envoy学习笔记:什么是Envoy

随着服务网格的概念爆火,Istio+Envoy的组合受到了热捧。于是开始着手研究Envoy,并在此记入笔记。
本文由宋雾代首发于https://www.jianshu.com/p/a6f7f46683e1 转载请注明出处。

什么是Envoy

Envoy 是一个基于七层的代理和通讯总线,专为大型面向服务的体系结构而设计。该项目的诞生主要出于如下的想法:

网络对应用程序应该是透明的。当网络和应用程序确实出现问题时,应该很容易确定问题的根源。

实际上,实现前面的想法是极其困难的。Envoy试图通过提供以下高级别特征来做到这一点:
独立于进程的架构 :Envoy是一个独立的进程,旨在与每个应用程序服务器一起运行。所有Envoy组成了一个透明的通信网格,其中每个应用程序发送和接收来自本地主机的消息,并且不用知道网络拓扑。与传统的服务通信服务的库方法相比,进程外架构有两个实质性好处:

  • Envoy支持任何编程语言写的服务。只用部署一个Envoy就可以在Java、C++、Go、PHP、Python等服务间形成网格。面向服务的体系结构使用多个应用程序框架和语言的情况越来越普遍。Envoy以透明的方式弥合了这些差距。
  • 任何使用过大型面向服务的体系结构的人都知道,部署库升级可能会非常痛苦。Envoy可以在整个基础设施中迅速部署和升级。

基于最新的C++11开发:Envoy是基于C++11编写的。选择本机代码是因为我们认为像Envoy这样的体系结构组件应该尽可能给应用程序让路。现代应用程序开发人员习惯于在共享云环境中的部署,以及使用非常高效但性能不是特别好的语言 (如 PHP、Python、Ruby、Scala 等), 在这种环境下,找到尾延迟的原因变得非常的困难。本机代码通常提供出色的延迟属性,不会给已经令人困惑的情况增加额外的混乱。与用 C 编写的其他本机代码代理解决方案不同,C++11 提供了出色的开发人员工作效率和性能。

基于 L3/L4 网络Filter的架构:Envoy的核心使用的是基于 L3/L4 的网络代理。可插拔的Filter链机制允许编写Filter以执行不同的 tcp 代理任务并插入主服务器。当然Envoy也提供现成的Filter以支持各种任务,如原始 TCP代理、HTTP 代理、TLS客户端证书身份验证等。

基于 L7 网络的HTTP Filter架构:HTTP是现代应用程序体系结构的重要组成部分,Envoy支持额外的 HTTP L7 Filter层。HTTP Filter可以插入到 HTTP 连接管理子系统中,该子系统支持执行不同的任务,如缓冲、速率限制、路由、嗅探亚马逊的 Dynamodb 等。

对HTTP/2 的极佳支持:在 HTTP 模式下运行时,Envoy同时支持 HTTP/1.1 和 HTTP/2。Envoy可以做到让 HTTP/1.1 和 HTTP/2 之间的通讯保持透明。这意味着对于任意的 HTTP/1.1 和 HTTP/2 的客户端和目标服务器的组合,Envoy都可以将他们桥接起来。当然建议在配置Envoy服务时使用 HTTP/2 在所有组件之间创建一个长链的网格,这样请求和响应可以多路复用。Envoy 不支持 SPDY,因为这个协议正在逐渐被淘汰。

SPDY(读作“SPeeDY”)是 Google 开发的基于 TCP 的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。互联网工程任务组(IETF)对谷歌提出的 SPDY 协议进行了标准化,于2015年5推出了类似于 SPDY 协议的 HTTP 2.0 协议标准(简称HTTP/2)。谷歌因此宣布放弃对SPDY协议的支持,转而支持HTTP/2。

HTTP L7 路由:在 HTTP 模式下运行时,Envoy 的路由子系统能够根据路径、权限、内容类型、运行时值等来路由和重定向请求。在使用 Envoy 作为前端代理时,此功能非常有用。同时在构建服务网格时也会利用此功能。

对 gRPC 的支持:gRPC 是一个来自谷歌的 RPC框架, 使用 HTTP/2 作为底层的多路复用传输。Envoy支持所有需要用作 gPRC请求和响应的路由和负载均衡基础的 HTTP/2 功能。这两个系统是非常互补的。

对MongoDB的 L7 网络协议的支持:对于当今的 Web 应用,MongoDB数据库非常流行。因为Envoy支持基于 L7 的网络协议,所以Envoy 支持 MongoDB 连接的嗅探、数据统计和日志记录。

对DynamoDB的 L7 网络协议的支持:DynamoDB是由Amazion提供的基于键值对的NoSQL数据库。因为Envoy支持基于 L7 的网络协议,所以Envoy 支持 DynamoDB 连接的嗅探和数据统计。

服务的动态注册和发现:Envoy 可以选择使用一组分层的动态配置 API 来进行集中管理。这些层为Envoy提供了以下方面的动态更新: 后端群集的主机、后端群集本身、HTTP 路由、侦听套接字和通信加密。为了实现更简单的部署, 后端主机发现可以通过 DNS 解析 (甚至完全跳过) 完成, 层也可以替换为静态配置文件。

健康检查:构建 Envoy 网格的建议方法是将服务发现视为最终一致的过程。 Envoy 包括一个运行状况检查子系统,该子系统可以选择对上游服务集群执行主动运行状况检查。然后,Envoy 使用服务发现和运行状况检查信息的联合来确定健康的负载均衡服务器。Envoy 还支持通过异常检测子系统进行被动运行状况检查。

高级负载均衡:分布式系统中不同组件之间的负载平衡是一个复杂的问题。由于 Envoy 是一个独立的代理而不是库,因此它能够在一个位置实现高级负载平衡技术,并使任何应用程序都可以访问。目前Envoy 包括支持自动重试、断路、通过外部速率限制服务限制全局速率、请求隐藏和异常值检测。未来计划为Request Racing提供支持。

前端/边缘系统代理支持: 虽然 Envoy 主要是为服务通信系统而设计的,但对前端/边缘系统也是很有用的(可观测性、管理、相同的服务发现和负载平衡算法等)。Envoy包含足够的功能,使其可用作大多数 Web 应用服务用例的边缘代理。这包括作为 TLS 的终点、HTTP/1.1 和 HTTP/2 支持, 以及 HTTP L7 路由。

最好的观察统计能力:如上所述,Envoy 的首要目标是使网络透明。但是在网络级别和应用程序级都无法避免的容易出现问题。Envoy 包含了对所有子系统的强有力的统计支持。 statsd (和其他兼容的数据提供程序) 是当前支持的统计接收器,插入不同的统计接收器也并不困难。Envoy 可以通过管理端口查看统计信息,还支持通过第三方供应商进行分布式追踪。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260