当前位置:网站首页>Envoy 源码流程图
Envoy 源码流程图
2022-08-01 11:05:00 【赵化冰】
最近在实现 MetaProtocol 时阅读了 Envoy 相关的一些源码。这里将一些重要流程的时序图记录下来,以备后续查看。
TCP Proxy
TCP Proxy 时序图
Dubbo Proxy
Dubbo Proxy 时序图
RDS
RDS(路由发现服务)的代码包括下面三个主要的流程:
- 订阅 RDS
- 执行线程:Main Thread
- 工作流程:RDS 订阅是在 HCM 配置工厂类中处理的,详细流程如下:
- Envoy 在初始化 Network Filter Chain 时调用 HttpConnectionManagerFilterConfigFactory 的 createFilterFactoryFromProtoTyped 方法。
- 该方法中会创建一个 RouteConfigProviderManager 对象。代码中只会创建一个单实例,所有的 HCM 初始化过程会共用一个 RouteConfigProviderManager Singleton 对象。由于所有 HCM 初始化都是在 Main Thread 中进行的,因此对该 Singleton 的访问不会存在并发冲突。(相关代码)
- 根据 HCM 的路由配置是 RDS 还是静态配置,分别创建 RdsRouteConfigProvider 或者 StaticRouteConfigProvider (相关代码)。该方法中会创建一个 RdsRouteConfigSubscription 对象,该对象负责具体的订阅逻辑,然后再以 RdsRouteConfigSubscription 作为参数来创建 RdsRouteConfigSubscription。注意这里 RdsRouteConfigProvider 实例是和 RDS 配置的 hash 值一一对应的,同样的 RDS 配置(即 config_source 和 route_config_name 相同),只会创建一个 RdsRouteConfigProvider,以避免多个 HCM 重复订阅相同的 RDS。如果一个 RDS 配置对应的 RdsRouteConfigProvider 已经存在,会将已有的 RdsRouteConfigProvider 返回给 HCM 。即多个 HCM 配置的 RDS 相同的话,会共用一个 RdsRouteConfigProvider 实例。 (相关代码)。
- 在 RdsRouteConfigSubscription 的构造方法中,会从 context 中拿到 ClusterManager 的SubscriptionFactory,然后通过 subscriptionFromConfigSource 方法对该 RDS 进行订阅。 subscriptionFromConfigSource 方法中会将自身作为SubscriptionCallbacks 参数,以接收 RDS 更新通知。(相关代码)
- 处理 RDS 的配置更新
- 执行线程:Main Thread
- 工作流程:
- RdsRouteConfigSubscription 的 onConfigUpdate 方法收到 RDS 配置更新的回调,然后调用 RdsRouteConfigProvider 的 onConfigUpdate 方法。(相关代码)
- RdsRouteConfigProvider 通过 Thread local storage 机制将配置更新到各个 worker thread 中。
- 使用 RDS 配置对请求进行路由
- 执行线程:Worker Thread
- 工作流程:
- Envoy 调用到 Network Filter Chain 中的 HCM filter。
- HCM filter 调用到 HTTP Filter Chain 中的 Router。
- Router 拿到缓存的 RDS 配置,根据 RDS 配置进行路由。
RDS 时序图
边栏推荐
- Why Metropolis–Hastings Works
- Introduction to data warehouse layering (real-time data warehouse architecture)
- 各位大拿,安装Solaris 11.4操作系统,在安装数据库依赖包的时候包这个错,目前无原厂支持,也无安装盘,联网下载后报这个错,请教怎么解决?
- 每日一题:连续子数组的最大和(动态规划)
- 新书上市 |《谁在掷骰子?》在“不确定性时代”中确定前行
- 机器学习 | MATLAB实现支持向量机回归RegressionSVM参数设定
- 冰冰学习笔记:gcc、gdb等工具的使用
- WPF 截图控件之绘制箭头(五)「仿微信」
- 从零开始Blazor Server(4)--登录系统
- JWT
猜你喜欢
Jenkins安装插件遇到的问题
博弈论(Depu)与孙子兵法(42/100)
Sparse representation - study notes
各位大拿,安装Solaris 11.4操作系统,在安装数据库依赖包的时候包这个错,目前无原厂支持,也无安装盘,联网下载后报这个错,请教怎么解决?
解决vscode输入! 无法快捷生成骨架(新版vscode快速生成骨架的三种方法)
Stone Technology builds hard-core brand power and continues to expand the global market
Dapr 与 NestJs ,实战编写一个 Pub & Sub 装饰器
Promise学习(二)一篇文章带你快速了解Promise中的常用API
判断JS数据类型的四种方法
回归预测 | MATLAB实现TPA-LSTM(时间注意力注意力机制长短期记忆神经网络)多输入单输出
随机推荐
Browser shortcut keys
ModelArts-based object detection YOLOv3 practice [play with HUAWEI CLOUD]
Promise to learn several key questions (3) the Promise - state change, execution sequence and mechanism, multitasking series, abnormal penetration, interrupt the chain of Promise
爱可可AI前沿推介(8.1)
NIO‘s Sword(思维,取模,推公式)
万字解析:vector类
一文说明白ECDSA spec256k1 spec256r1 EdDSA ed25519千丝万缕的关系
【云驻共创】分布式技术之华为云全域调度技术与实践
表达式引擎在转转平台的实践
How to find out hidden computer software (how to clean up the computer software hidden)
语音聊天app源码——语音聊天派对
Mini Program Graduation Works WeChat Food Recipes Mini Program Graduation Design Finished Products (4) Opening Report
A new generation of ultra-safe cellular batteries, Sihao Airun goes on sale starting at 139,900 yuan
WPF 截图控件之绘制箭头(五)「仿微信」
activiti工作流的分页查询避坑
Glassmorphism design style
shell--面试题
数字化转型实践:世界级2B数字化营销的方法框架
WPF 截图控件之绘制箭头(五)「仿微信」
DBPack SQL Tracing 功能及数据加密功能详解