Dynamic Module 原理与架构
Dynamic Module(动态模块)是 Envoy v1.34 起引入的实验性扩展机制,允许开发者以共享库(.so)形式动态加载自定义扩展,兼具高性能与现代开发体验。
技术原理
Dynamic Module 本质是实现特定 C ABI 的共享库,通过 Envoy 的 DynamicModuleFilter
加载。官方主推 Rust SDK,也可用 Go/C++ 等语言编译出兼容动态库。
- 加载机制:通过
ENVOY_DYNAMIC_MODULES_SEARCH_PATH
环境变量指定查找路径,.so
文件命名需与配置一致。 - 架构层次:
DynamicModuleFilter
(Envoy HTTP Filter)- 动态模块(.so 文件)
- 具体过滤器实现(如 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 的开发与集成流程。