4

Envoy整体架构概述

 1 year ago
source link: https://blog.51cto.com/key3feng/5449011
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-06 22:34:19 博主文章分类:2022年6月 ©著作权

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

Envoy最重要的设计原则是网络透明性,网络对于应用程序来说应该是透明的,应用程序只需要按照标准化的方式使用网络,不需要感知网络的具体实现细节,这样当发生应用程序或者网络故障时,很容易区分问题的边界,从而很容易定位出问题的根源。

网络透明是Envoy架构层面总的指导原则,架构设计的各个维度都围绕这个指导原则展开,比如对出入Envoy流量的透明拦截、对通信安全的透明支持以及完善的链路治理支持等,Envoy架构设计和实现层面处处可见网络透明的影子,目的是把用户体验放在第一位,最大程度地提高业务使用Envoy时的易用性。

Envoy架构设计的另外一个重要指导原则是最终一致性。Envoy在配置处理、统计子系统等多个场景都会采用基于最终一致性的设计。通过最终一致性,可以简化Envoy的架构设计,通过牺牲一些不太重要的指标,可以换来架构易用性和性能上的巨大提升。

最后一个设计原则是对性能的折中考虑,Envoy语言选型、架构层面的优秀设计已经可以保证Envoy有非常优异的性能表现。性能对于通用的代理服务来说无疑是非常重要的,Envoy重视性能的同时,不会执着于极限性能,不会为了性能考虑,牺牲架构上的简单和易用性设计,不会为了极限性能牺牲代码的可维护性。

Envoy整体架构概述_Envoy

Envoy线程模型由负责控制流的主线程负责数据流的工作线程组成,其中工作线程池的线程个数和CPU核数相当即可。所有工作线程同时监听Iptables透明拦截的Downstream客户端请求,监听器信息由监听发现服务LDS负责管理,监听到客户端请求后在当前线程中创建连接,后续该连接上的请求消息处理均在这个线程内完成,以减少请求处理过程中的线程切换开销。请求处理采用的是异步事件驱动模型,通过各自线程的事件调度器进行事件调度。

Envoy的扩展性由Filter插件机制负责,每个监听器下对应两类插件:一类是监听器相关的过滤插件,用于对监听行为进行扩展;另一类是网络过滤插件,负责建立请求连接、协议解析和路由工作。

当前Envoy实现最完整的是HTTP网络过滤插件,通过路由发现服务RDS管理HTTP协议的路由,HTTP路由是个多层的树状结构,对应的是每个集群以及相应的匹配条件,其中集群信息由集群发现服务CDS管理。Envoy集群有多种类型,其中服务发现模式的集群,其集群节点信息由节点发现服务EDS管理。通过集群的负载均衡算法获取到相应的目标节点后,将Downstream请求信息转发给Upstream。

Envoy请求处理需要的LDS、RDS、CDS和EDS配置信息由控制平面通过XDS协议动态下发给Envoy。

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

上一篇:初始Envoy项目


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK