当前位置:网站首页>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 时序图
边栏推荐
- Promise学习(四)异步编程的终极解决方案async + await:用同步的方式去写异步代码
- 石头科技打造硬核品牌力 持续出海拓展全球市场
- leetcode/submatrix element sum
- PDMan-国产免费通用数据库建模工具(极简,漂亮)
- 回归预测 | MATLAB实现TPA-LSTM(时间注意力注意力机制长短期记忆神经网络)多输入单输出
- Qt 支持HEIC/HEIF格式图片
- 【随心笔记】假期快过去了,都干了点什么
- 数字化转型实践:世界级2B数字化营销的方法框架
- July 31, 2022 -- Take your first steps with C# -- Use arrays and foreach statements in C# to store and iterate through sequences of data
- 【likeshop】回收租凭系统100%开源无加密 商城+回收+租赁
猜你喜欢

Promise学习(四)异步编程的终极解决方案async + await:用同步的方式去写异步代码

稀疏表示--学习笔记

xss-labs靶场挑战

Stone Technology builds hard-core brand power and continues to expand the global market

博弈论(Depu)与孙子兵法(42/100)

新一代超安全蜂窝电池, 思皓爱跑上市13.99万元起售

轮询和长轮询的区别

.NET性能优化-使用SourceGenerator-Logger记录日志

进制与转换、关键字

【钛晨报】国家统计局:7月制造业PMI为49%;玖富旗下理财产品涉嫌欺诈,涉及390亿元;国内航线机票燃油附加费8月5日0时起下调
随机推荐
【cartographer ros】十: 延时和误差分析
将本地项目推送到远程仓库
shell--第九章练习
MFC实现交通图导航系统
Promise learning (1) What is Promise?how to use?How to solve callback hell?
For small applications, which database is better to use?
Pve delete virtual machine "for a collection"
2022年7月31日--使用C#迈出第一步--使用C#中的数组和foreach语句来存储和循环访问数据序列
C#/VB.NET 将PPT或PPTX转换为图像
这是我见过写得最烂的Controller层代码,没有之一!
pgAdmin 4 v6.12 发布,PostgreSQL 开源图形化管理工具
语音聊天app源码——语音聊天派对
SCHEMA解惑
昇思大模型体验平台初体验——以小模型LeNet为例
Sparse representation - study notes
Small application project works WeChat gourmet recipes applet graduation design of finished product (1) the development profile
Transfer learning to freeze the network:
重庆市大力实施智能建造,推动建筑业数字化转型,助力“建造强市”
Android 安全与防护策略
slice、splice、split傻傻分不清