如何进一步提升Envoy Proxy的Bazel构建响应速度以迭代开发过滤器?
优化Envoy Bazel迭代构建速度的实用方案
针对过滤器迭代开发场景,在已使用remote_cache和dev(fastbuild)配置后仍存在的启动、依赖检查、链接耗时问题,可通过以下手段进一步优化:
缩小构建范围,只编译目标代码
不要全量执行dev目标,直接指定自己开发的过滤器相关具体Bazel目标,比如过滤器的测试二进制或集成目标:./ci/run_envoy_docker.sh "BAZEL_BUILD_OPTIONS='--remote_cache=http://cachesrv:8000' ./ci/do_ci.sh build //source/extensions/filters/http/your_custom_filter:your_filter_bin"让Bazel仅处理与目标相关的代码,避免构建整个Envoy项目的冗余内容。
启用文件系统监听,减少重复扫描
添加--watchfs参数让Bazel监听文件系统变化,避免每次构建重新扫描所有文件的开销:./ci/run_envoy_docker.sh "BAZEL_BUILD_OPTIONS='--remote_cache=http://cachesrv:8000 --watchfs' ./ci/do_ci.sh build //your/filter/target"跳过非必要前置流程,直接调用Bazel
do_ci.sh会执行代码检查、依赖拉取等额外步骤,迭代开发时可直接进入Docker容器执行Bazel命令,省去冗余操作:- 进入容器:
./ci/run_envoy_docker.sh bash - 在容器内直接构建:
bazel build --config=fastbuild --remote_cache=http://cachesrv:8000 //source/extensions/filters/http/your_custom_filter:your_filter_bin
- 进入容器:
启用持久化构建Worker
让Bazel保持后台编译/链接Worker进程,避免每次构建重启进程的开销:bazel build --config=fastbuild --remote_cache=http://cachesrv:8000 --strategy=CppCompile=persistent_worker --strategy=Link=persistent_worker //your/filter/target优化链接速度
即使是fastbuild配置,链接大二进制仍可能耗时,可尝试:- 使用
--linkopt=-fuse-ld=lld切换到LLD链接器(需确保容器内已安装),大幅提升链接速度 - 拆分过滤器目标,避免直接链接整个Envoy主二进制,先编译过滤器的静态库或独立测试二进制,验证通过后再集成
- 使用
最小化依赖范围
在过滤器的Bazel BUILD文件中,仅声明必要的依赖(如//envoy/http/filter:filter_interface等核心接口),避免引入不必要的大型依赖,减少依赖检查和编译的范围。
内容的提问来源于stack exchange,提问作者Armin Abfalterer
相关产品推荐
相关产品推荐

