前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Service Mesh之Envoy

Service Mesh之Envoy

作者头像
灰子学技术
发布2021-07-09 11:45:03
8990
发布2021-07-09 11:45:03
举报
文章被收录于专栏:灰子学技术灰子学技术

写在前面的话:

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

代码语言:javascript
复制
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的优势主要体现在下面几方面:

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灰子学技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档