Service Mesh之Envoy

  写在前面的话:

    本篇文章,主要希望讲清楚,下面几个问题:

1.Envoy是什么,长什么样子?
2.Envoy解决了什么问题?
3.使用它的好处在哪里?

简介:

       Envoy是一款由 Lyft 开源的高性能数据和服务代理软件,使用现代 C++ 语言(C++11 以及 C++14)开发,提供四层和七层网络代理能力。

     尽管在设计之初 Envoy没有将性能作为最终的目标,而是更加强调模块化、易测试、易开发等特性,可它仍旧拥有足可媲美 Nginx 等经典代理软件的超高性能。在保证性能的同时,Envoy也提供了强大的流量治理能力和可观察性。其独创的 xDS 协议则成为了构建 Service Mesh通用数据面 API(UDPA)的基石。

在 Envoy中,数据请求的入口方向被称之为下游(Downstream),而数据请求的出口方向则称之为上游(Upstream)。

监听器、集群、路由和筛选器构成了Envoy最为核心的骨架。

一、 什么是Envoy,架构是什么样子?

Envoy 是 Istio Service Mesh中默认的Sidecar,Istio 在 Envoy 的基础上按照Envoy的 xDS 协议扩展了其控制平面。

Envoy 里的基本术语,如下所示:

Downstream(下游):下游主机连接到 Envoy,发送请求并接收响应,即发送请求的主机。

Upstream(上游):上游主机接收来自 Envoy 的连接和请求,并返回响应,即接受请求的主机。

Listener(监听器):监听器是命名网地址(例如,端口、unix domain socket 等),下游客户端可以连接这些监听器。Envoy 暴露一个或者多个监听器给下游主机连接。

Cluster(集群):集群是指 Envoy 连接的一组逻辑相同的上游主机。Envoy 通过服务发现来发现集群的成员。可以选择通过主动健康检查来确定集群成员的健康状态。Envoy 通过负载均衡策略决定将请求路由到集群的哪个成员。

二、用来解决什么问题?

     Envoy最常扮演的是两种角色,一种是作为集群流量入口的 API 网关(Gateway),管理南北向流量;另一种是作为服务Sidecar,拦截并治理服务网格中东西向流量。

1. 在 Istio中,数据平面主要负责执行如下任务:

1)服务发现:探测所有可用的上游或后端服务实例

2)健康检测:探测上游或后端服务实例是否健康,是否准备好接收网络流量

3)流量路由:将网络请求路由到正确的上游或后端服务

4)负载均衡:在对上游或后端服务进行请求时,选择合适的服务实例接收请求,同时负责处理超时、断路、重试等情况

备注:个人理解这里的数据是已经分配到本pod上面的数据流量,这里的导流量是导向上游机器里的pod,而导流量的做法应该是通过注册服务器方式,进行服务发现找到需要交互的那一部分服务机器,然后根据这个业务特性设置好的路由规则,进行负载均衡。

5)身份验证和授权:在 istio-agent 与 istiod 配合下,对网络请求进行身份验证、权限验证,以决定是否响应以及如何响应,使用 mTLS 或其他机制对链路进行加密等

6)链路追踪:对于每个请求,生成详细的统计信息、日志记录和分布式追踪数据,以便操作人员能够理解调用路径并在出现问题时进行调试。

概括起来,数据平面的工作就是负责有条件地转换、转发以及观察进出服务实例的每个网络包。

2. 现在常见的数据平面实现有:

1)Envoy:Istio 默认使用的数据平面实现方案,使用C++开发,性能较高。

2)MOSN:阿里巴巴公司开源,设计类似 Envoy,使用 Go 语言开发,优化过多协议支持。

3)Linkerd:一个提供弹性云端原生应用服务网格的开源项目,也是面向微服务的开源 RPC 代理,使用 Scala 开发。它的核心是一个透明代理。因此也可作为典型的数据平面的实现。

三、使用它的好处在哪里?

      个人理解最闪亮的地方就是网络服务与业务解耦,让业务不需要关注网络的问题,并且单独部署,能够有效的减少发布服务时候,替换所有服务的情况。同时还可以根据这些网络信息作流控等操作。

Envoy的优势主要体现在下面几方面:

1.高性能:
C++ 语言实现,基于 Libevent 事件机制以及非阻塞异步 IO,保障性能;
2.易扩展:
利用其 L3/L4/L7 筛选器机制,Envoy 可以在各个层次进行功能扩展。
包括但不限于:额外代理协议支持、HTTP 流量治理功能扩展等等。
且由于其良好的封装和现代 C++ 对各种操作的简化,其开发过程非常友好;
此外,Envoy 也提供了基于 WASM 的扩展支持以及基于 Lua 脚本的简单功能扩展;
3.多协议支持:
原生支持代理 HTTP、Kafka、Dubbo、Redis 等多种协议;
4.动态化配置:
基于 xDS 协议实现配置的完全动态化,简化配置更新操作,实现监听端口、路由规则、后端服务发现等全运行时动态下发及更新;
5.可观察性:
内置日志,指标,追踪三个模块用于实现全方位、多维度流量和事件观察;
6.HTTP筛选器:
社区原生提供了大量的功能强大的 HTTP 筛选器如限流、认证鉴权、缓存、压缩、GRPC 协议转换等等,开箱即用;
7.社区开放活跃:
Envoy完全开源,不存在对应的商业版本,保证了它的发展不会受限于商业化;
而且 Envoy 社区非常活跃,不断向前推动 Envoy 的演进和发展。

公众号:灰子学技术


参考资料:

云原生社区:https://cloudnative.to/

servicemesher社区: https://www.servicemesher.com/

Iistio中文网:https://istio.io/latest/zh/

listio官网:https://istio.io/

Istio Handbook书籍:https://www.servicemesher.com/istio-handbook/

envoy英文文档:https://www.envoyproxy.io/docs

envoy中文文档:https://www.servicemesher.com/envoy/

开源代码:

Istio: https://github.com/istio/istio

mosn: https://github.com/mosn/mosn

envoy: https://github.com/envoyproxy/envoy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值