3

初始Envoy项目_枫叶飘飘的技术博客_51CTO博客

 1 year ago
source link: https://blog.51cto.com/key3feng/5445390
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

初始Envoy项目

原创

key_3_feng 2022-07-05 22:10:25 博主文章分类:2022年6月 ©著作权

文章标签 Envoy 文章分类 其它 系统/运维 yyds干货盘点 阅读数218

Envoy是一个用C++编写的云原生高性能边缘代理、中间代理和服务代理,作为专门为微服务架构设计的通信总线,定位是作为Service Mesh的数据平面,接管微服务通信的全部流量,对应用程序屏蔽网络和通信的复杂性。

Envoy作为一个独立进程,设计与应用程序一起运行,所有的Envoy形成一个透明的通信网格,每个应用程序发送消息到本地Envoy代理或从本地Envoy代理接收消息,但不需要知道具体的网络拓扑。

Envoy的核心设计理念是网络应该对应用服务透明,职责划分上比较明确,当网络和应用程序出现故障时,可以很容易定位问题的具体根源。

架构上Envoy内部可以分为数据平面、控制平面和管理平面3个部分。其中,控制平面用于对流量路由和转发相关的策略与配置进行管理;控制平面通过标准API获取最新的流量配置信息;数据平面的流量转发就是基于控制平面下发的配置规则进行。

为了方便对Envoy运行状态进行监控和管理,Envoy内置一个HTTP Server,作为Envoy的管理平面,HTTP Server会注册一系列的Handler,对外暴露管理平面的API,用于外界查询当前Envoy各个维度的状态,比如外界可以通过管理平面API查询Envoy当前的集群和路由配置、当前的统计信息等。

Envoy接收到Downstream客户端发过来的请求时,一般先经过类似Iptables的透明拦截机制,然后将流量交给Envoy。Envoy获取请求对应的原目的地址,根据目的地址信息获取对应的网络过滤链配置信息,根据网络过滤链配置建立新的连接,并通过网络过滤链对应的协议对请求进行解码和路由,选择合适的Upstream节点,将请求发送出去,同时建立Downstream连接和Upstream连接的对应关系,将Upstream返回的响应消息发送给Downstream客户端。

初始Envoy项目_Envoy

Envoy具有如下的特性:

  • 扩展性

Envoy扩展性通过插件机制实现,Envoy内部当前已经支持众多扩展点,通过网络协议插件和HTTP处理扩展插件,分别从通信协议和链路治理两个层面进行扩展。Envoy插件机制是Service Mesh数据转发和数据处理的基石,基于插件扩展性机制进行扩展和定制开发非常方便,可以建立起强大的Service Mesh生态。

  • 配置动态化

基于配置动态化设计,Envoy集群管理与流量转发相关的所有配置均可以通过XDS协议动态下发和生效,不仅减少了运维复杂度,同时借助动态配置化能力,方便通过一定机制发现Envoy运行时的风险并快速调整,提高了Envoy的整体稳定性。

  • 性能

Envoy支持如此众多特性的同时,仍然可以提供优秀的性能指标,得益于良好的架构设计,Envoy架构设计对性能的考虑随处可见。比如数据转发层面,Envoy采用异步事件驱动的方式,并且保证一个请求只会在一个线程内处理,减少了请求在线程间切换的开销;此外通过数据平面和控制平面分离,配置变更时,通过无锁机制保证数据转发的性能不受任何影响。

Envoy对Service Mesh的一大贡献是第一个提出了通用数据平面API的概念,通过通用数据平面API,建立了数据平面和控制平面之间交互的标准,实现了数据平面和控制平面通信的标准化。只要基于数据平面API实现,可以根据需要方便地对数据平面或控制平面进行替换,有利于Service Mesh生态体系的建设。

  • 1
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK