envoy源代码分析(三)--主框架概览

 

线程模型

 

控制worker与CPU绑定的参数

 

--concurrency  <int>

每一个worker有一个对应的grpcGoogleClient线程,用于线程间通信的IPC线程。本系列的后篇会详细介绍。

 

动态变更之后,进程线程不变

 

初始化

官网的初始化过程介绍:https://www.envoyproxy.io/docs/envoy/v1.34.0/intro/arch_overview/operations/init#arch-overview-initialization

该文档是站在业务的角度,讲述业务相关功能的初始化先后顺序,而不是软件模块的初始化过程。

下面的代码注释,很好的描述了程序启动的顺序和几个阶段:

 

 

该初始化顺序体现了以下软件设计原则:

  1. 分层初始化:从静态到动态,从基础设施到应用服务
  2. 可靠优先:确保核心服务可用后再加载扩展功能
  3. 可观测性前置:运行时配置的提前加载为后续流程提供调试能力
  4. 依赖倒置:通过强制约束避免服务间的隐式循环依赖

 

 

类图

 

 

 

主框架流程图

 

 

 

1 一个master线程,N个worker线程,N+1个watchdog线程,若干GRPC线程。

2 master与worker的任务都靠dispacher做事件驱动。

3 事件驱动的4个方式

a dispacher->post

b scheduler Callback

c timer

d File Event

异步示例

 

posted on 2025-04-11 18:34  toong  阅读(3)  评论(0)    收藏  举报