Dynamic Module 原理与架构

Dynamic Module(动态模块)是 Envoy v1.34 起引入的实验性扩展机制,允许开发者以共享库(.so)形式动态加载自定义扩展,兼具高性能与现代开发体验。

技术原理

Dynamic Module 本质是实现特定 C ABI 的共享库,通过 Envoy 的 DynamicModuleFilter 加载。官方主推 Rust SDK,也可用 Go/C++ 等语言编译出兼容动态库。

  • 加载机制:通过 ENVOY_DYNAMIC_MODULES_SEARCH_PATH 环境变量指定查找路径,.so 文件命名需与配置一致。
  • 架构层次
    1. DynamicModuleFilter(Envoy HTTP Filter)
    2. 动态模块(.so 文件)
    3. 具体过滤器实现(如 access_logger、header_mutation 等)

优势

  • 极致性能:无虚拟机、无跨进程,接近原生 C++ 性能
  • 开发现代:Rust SDK 类型安全,开发体验优于 Wasm
  • 多语言潜力:Go/C++ 也可实现 C ABI 兼容模块
  • 灵活扩展:同一 .so 可实现多个过滤器

局限

  • 无安全沙箱:与主进程完全共享内存和权限,仅适合受控环境
  • 版本强耦合:需与 Envoy 版本严格匹配,升级需同步重编

配置要点

  • 通过 dynamic_module_config.name 指定模块名,需与 .so 文件名一致(如 librust_module.so
  • filter_name 指定具体过滤器实现
  • 推荐仅加载可信模块,避免安全风险

下一节将以官方 Demo 演示 Dynamic Module 的开发与集成流程。

文章导航

章节完成

恭喜完成本章节!下一章节即将开始。下一章节:Envoy Gateway

章节概览