当前位置:网站首页>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 时序图
边栏推荐
- 千万级乘客排队系统重构&压测方案——总结篇
- 如何设计一个分布式 ID 发号器?
- .NET性能优化-使用SourceGenerator-Logger记录日志
- Stone Technology builds hard-core brand power and continues to expand the global market
- 冰冰学习笔记:gcc、gdb等工具的使用
- 昇思大模型体验平台初体验——以小模型LeNet为例
- WPF 截图控件之绘制箭头(五)「仿微信」
- 【CLion】CLion 总是提示 “This file does not belong to any project target xxx” 的解决方法
- Browser shortcut keys
- 小程序毕设作品之微信美食菜谱小程序毕业设计成品(3)后台功能
猜你喜欢
随机推荐
2022年7月31日--使用C#迈出第一步--使用C#中的数组和foreach语句来存储和循环访问数据序列
各位大拿,安装Solaris 11.4操作系统,在安装数据库依赖包的时候包这个错,目前无原厂支持,也无安装盘,联网下载后报这个错,请教怎么解决?
Mini Program Graduation Works WeChat Food Recipes Mini Program Graduation Design Finished Products (2) Mini Program Functions
每日一题:连续子数组的最大和(动态规划)
Android Security and Protection Policy
Small application project works WeChat gourmet recipes applet graduation design of finished product (1) the development profile
RK3399平台开发系列讲解(内核入门篇)1.52、printk函数分析 - 其函数调用时候会关闭中断
一篇文章,带你详细了解华为认证体系证书(2)
.NET性能优化-使用SourceGenerator-Logger记录日志
JS数据类型转换完全攻略
jmeter
How I secured 70,000 ETH and won a 6 million bug bounty
Mini Program Graduation Works WeChat Food Recipes Mini Program Graduation Design Finished Products (3) Background Functions
2022年中盘点 | 产品打底,科技背书,广汽集团阔步向前
语音聊天app源码——语音聊天派对
小程序毕设作品之微信美食菜谱小程序毕业设计成品(4)开题报告
Promise learning (2) An article takes you to quickly understand the common APIs in Promise
Introduction to data warehouse layering (real-time data warehouse architecture)
JWT
一篇文章,带你详细了解华为认证体系证书(1)









