Envoy 使用的优秀 C++ 库整理
1. 概述
Envoy 是一个高性能的开源边缘和服务代理,其代码库中大量使用了业界优秀的 C++ 第三方库。这些库涵盖了数据结构、日志、序列化、网络、加密、压缩、正则表达式等多个领域。本文档整理了 Envoy 中使用的主要 C++ 库及其用途。
Envoy 选择了大量高质量的 C++ 库来构建其高性能代理系统。这些库的特点包括:
1. Google 生态为主:
Abseil、Protobuf、gRPC、RE2、BoringSSL 等均来自 Google,保证了代码质量和一致性
2. 性能优先:
tcmalloc、xxHash、FlatBuffers、Hyperscan 等库都以高性能著称
3. 现代 C++:
fmt、nlohmann JSON 等库提供了现代化的 C++ API
4. 可扩展性:
通过 WASM 支持多种运行时(V8、Wasmtime、WAVM、WAMR)
5. 全面的安全支持:
BoringSSL、JWT 验证等确保安全通信
6. 丰富的可观测性:
支持多种追踪系统(OpenTracing、OpenCensus、Datadog、LightStep、SkyWalking)
lib库整理如下:
Envoy
├─ 核心基础库
│ ├─ Abseil
│ ├─ Protocol Buffers
│ ├─ gRPC
│ ├─ fmt
│ └─ spdlog
├─ 网络 I/O
│ ├─ libevent
│ ├─ nghttp2
│ ├─ c-ares
│ └─ QUICHE
├─ 加密与安全
│ ├─ BoringSSL
│ └─ jwt_verify_lib
├─ 序列化与数据格式
│ ├─ nlohmann JSON
│ ├─ yaml-cpp
│ ├─ FlatBuffers
│ └─ msgpack-c
├─ 压缩库
│ ├─ zlib / zlib-ng
│ ├─ brotli
│ └─ zstd
├─ 正则表达式与模式匹配
│ ├─ RE2
│ └─ Hyperscan
├─ 表达式语言
│ └─ CEL-CPP
├─ URL 解析
│ └─ Google URL
├─ 内存管理
│ ├─ tcmalloc
│ └─ gperftools
├─ WASM 运行时
│ ├─ V8
│ ├─ Wasmtime
│ ├─ WAVM
│ ├─ WAMR
│ └─ Proxy-WASM C++ SDK
├─ 可观测性库
│ ├─ OpenTracing C++
│ ├─ OpenCensus C++
│ ├─ Datadog OpenTracing
│ ├─ LightStep Tracer
│ └─ SkyWalking cpp2sky
├─ 测试框架
│ ├─ Google Test
│ └─ Google Benchmark
├─ 性能追踪
│ └─ Perfetto
└─ 其他实用库
├─ xxHash
├─ libcircllhist
├─ SQL Parser
├─ Hessian2 Codec
├─ ICU Library
├─ liburing
├─ libsxg
├─ Intel IPP Crypto
├─ Intel Dlb
└─ VPP Comms Library
2. 核心基础库
2.1 Abseil (com_google_absl)
· 版本: 2022-07-05 快照
· 项目地址: https://abseil.io/
· 描述: Google 开源的 C++ 基础库集合,源自 Google 内部代码库的核心组件
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· absl::Mutex / absl::CondVar — 线程同步(锁和条件变量)
· absl::flat_hash_map / absl::flat_hash_set — 高性能哈希容器
· absl::string_view — 零拷贝字符串引用
· absl::InlinedVector — 小容量优化的向量
· absl::optional — 可选值类型
· absl::Span — 数组视图
· absl::StrCat / absl::StrFormat — 字符串拼接和格式化
· absl::Cleanup — RAII 清理操作
· absl::Notification — 线程通知机制
代码示例:
```cpp
// 使用 flat_hash_map
absl::flat_hash_map<std::string, RouteEntryPtr> routes_;
// 使用 string_view
void processHeader(absl::string_view key, absl::string_view value);
// 使用 InlinedVector(小容量内联存储,避免堆分配)
absl::InlinedVector<Slice::StoragePtr, 8> free_list_;
// 使用 Mutex
absl::Mutex mutex_;
absl::MutexLock lock(&mutex_);
```
2.2 Protocol Buffers
(com_google_protobuf)
· 版本: 3.19.4
· 项目地址:
https://developers.google.com/protocol-buffers
· 描述: Google 开发的语言无关、平台无关的可扩展结构化数据序列化机制
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· Envoy API 定义(xDS 协议)
· 配置序列化/反序列化
· gRPC 通信
· 插件扩展配置
代码示例:
```cpp
// 解析 protobuf 配置
envoy::config::listener::v3::Listener listener_config;
MessageUtil::loadFromYaml(yaml_string, listener_config);
// 序列化
std::string serialized = message.SerializeAsString();
```
2.3 gRPC (com_github_grpc_grpc)
· 版本: 2021-06-07 快照
· 项目地址: https://grpc.io
· 描述: 高性能、开源的通用 RPC 框架
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· xDS 控制平面通信
· gRPC 服务代理
· 健康检查
· 遥测数据上报
2.4 fmt (com_github_fmtlib_fmt)
· 版本: 8.1.1
· 项目地址: https://fmt.dev
· 描述: 快速安全的 C++ 格式化库,替代 C stdio 和 C++ iostreams
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· 日志格式化
· 错误消息构建
· 调试信息输出
代码示例:
```cpp
// Envoy 封装的 fmt 使用
#include "source/common/common/fmt.h"
std::string msg = fmt::format("Connection {} closed, reason: {}",
connection_id, reason);
// Envoy 的 FMT_STRING 宏提供编译时格式检查
ENVOY_LOG(debug, FMT_STRING("Upstream request timeout: {}ms"), timeout_ms);
```
2.5 spdlog (com_github_gabime_spdlog)
· 版本: 1.9.2
· 项目地址:
https://github.com/gabime/spdlog
· 描述: 超快的 C++ 日志库,支持头文件仅模式或编译模式
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· Envoy 日志系统底层实现
· 多级别日志输出
· 异步日志
代码示例:
```cpp
// Envoy 日志系统基于 spdlog
ENVOY_LOG(info, "Starting server");
ENVOY_LOG(debug, "Processing request: {}", request_id);
ENVOY_LOG(error, "Connection failed: {}", error_message);
```
3. 网络与 I/O 库
3.1 libevent
(com_github_libevent_libevent)
· 版本: 2020-07-28 快照
· 项目地址: https://libevent.org
· 描述: 事件通知库,用于异步 I/O
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· 事件循环
· 网络 I/O 多路复用
· 定时器管理
· 信号处理
3.2 nghttp2
(com_github_nghttp2_nghttp2)
· 版本: 1.47.0
· 项目地址: https://nghttp2.org
· 描述: HTTP/2 协议的 C 语言实现,包括 HPACK 头部压缩
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· HTTP/2 帧编解码
· HPACK 头部压缩/解压缩
· HTTP/2 流管理
3.3 c-ares (com_github_c_ares_c_ares)
· 版本: 1.18.1
· 项目地址: https://c-ares.haxx.se/
· 描述: 异步 DNS 请求 C 库
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· 异步 DNS 解析
· 服务发现
· 上游主机名解析
3.4 QUICHE
(com_github_google_quiche)
· 版本: 2022-07-13 快照
· 项目地址:
https://github.com/google/quiche
· 描述: Google 的 QUIC 及相关协议实现
· 用途分类: 数据平面核心
主要使用场景:
· QUIC 协议支持
· HTTP/3 支持
· BBR 拥塞控制
4. 加密与安全库
4.1 BoringSSL (boringssl)
· 版本: chromium-103.0.5060.24 快照
· 项目地址:
https://github.com/google/boringssl
· 描述: Google 维护的 OpenSSL 精简分支
· 用途分类: 控制平面, 数据平面核心
主要使用场景:
· TLS/SSL 握手
· 证书验证
· 加密/解密操作
· 哈希计算
4.2 jwt_verify_lib
(com_github_google_jwt_verify)
· 版本: 2021-03-05 快照
· 项目地址:
https://github.com/google/jwt_verify_lib
· 描述: JWT 验证 C++ 库
· 用途分类: 数据平面扩展
主要使用场景:
· JWT 令牌验证
· OIDC 认证
· gcp_authn 过滤器
5. 序列化与数据格式库
5.1 nlohmann JSON
(com_github_nlohmann_json)
· 版本: 3.10.5
· 项目地址:
https://nlohmann.github.io/json
· 描述: 现代 C++ 的 JSON 库,语法直观
· 用途分类: 控制平面, 数据平面核心
主要使用场景:
· JSON 配置解析
· 管理接口响应
· 替代 protobuf JSON 解析(性能优化)
代码示例:
```cpp
#include "nlohmann/json.hpp"
nlohmann::json j = nlohmann::json::parse(json_string);
std::string value = j["key"].get<std::string>();
```
5.2 yaml-cpp
(com_github_jbeder_yaml_cpp)
· 版本: 2022-04-27 快照
· 项目地址:
https://github.com/jbeder/yaml-cpp
· 描述: YAML 1.2 规范的 C++ 解析器和生成器
· 用途分类: 控制平面, 数据平面核心
主要使用场景:
· Envoy 配置文件解析(YAML 格式)
· 运行时配置
· xDS 配置解析
5.3 FlatBuffers
(com_github_google_flatbuffers)
· 版本: 2.0.0
· 项目地址:
https://github.com/google/flatbuffers
· 描述: 跨平台序列化库,以最高内存效率为设计目标
· 用途分类: 数据平面扩展
主要使用场景:
· CEL 表达式状态
· WASM 过滤器数据交换
· 高效零拷贝序列化
5.4 msgpack-c
(com_github_msgpack_msgpack_c)
· 版本: 3.3.0
· 项目地址:
https://github.com/msgpack/msgpack-c
· 描述: 高效的二进制序列化格式
· 用途分类: 可观测性扩展
主要使用场景:
· Datadog tracer 数据序列化
6. 压缩库
6.1 zlib / zlib-ng
(net_zlib / com_github_zlib_ng_zlib_ng)
· 版本: zlib 1.2.12 / zlib-ng 2.0.6
· 项目地址: https://zlib.net / https://github.com/zlib-ng/zlib-ng
· 描述: 通用压缩库,zlib-ng 是高性能分支
· 用途分类: 控制平面, 数据平面核心
主要使用场景:
· gzip 压缩/解压缩
· HTTP 内容编码
· gRPC 压缩
6.2 brotli (org_brotli)
· 版本: 2020-09-08 快照
· 项目地址: https://brotli.org
· 描述: Google 开发的压缩算法,针对 Web 内容优化
· 用途分类: 数据平面扩展
主要使用场景:
· Brotli 压缩过滤器
· HTTP 内容编码
6.3 zstd (com_github_facebook_zstd)
· 版本: 1.5.2
· 项目地址: https://facebook.github.io/zstd
· 描述: Facebook 开发的快速无损压缩算法
· 用途分类: 数据平面扩展
主要使用场景:
· Zstandard 压缩过滤器
· HTTP 内容编码
7. 正则表达式与模式匹配
7.1 RE2 (com_googlesource_code_re2)
· 版本: 2022-04-01
· 项目地址:
https://github.com/google/re2
· 描述: Google 开发的正则表达式库,保证线性时间复杂度
· 用途分类: 控制平面, 数据平面核心
主要使用场景:
· 路由匹配
· 头部匹配
· 正则表达式过滤器
· 统计标签提取
代码示例:
```cpp
#include "source/common/common/regex.h"
re2::RE2 pattern("^[a-z]+$");
std::string input = "hello";
if (re2::RE2::FullMatch(input, pattern)) {
// 匹配成功
}
```
7.2 Hyperscan (io_hyperscan)
· 版本: 5.4.0
· 项目地址: https://hyperscan.io
· 描述: Intel 开发的高性能正则表达式匹配库
· 用途分类: 数据平面扩展
主要使用场景:
· 高性能正则匹配
· 多模式匹配
8. 表达式语言
8.1 CEL-CPP (com_google_cel_cpp)
· 版本: 2022-06-02 快照
· 项目地址:
https://opensource.google/projects/cel
· 描述: Google 的通用表达式语言 C++ 实现
· 用途分类: 数据平面扩展
主要使用场景:
· 访问日志过滤器
· RBAC 策略
· WASM 过滤器
· 速率限制描述符
9. URL 解析
9.1 Google URL
(com_googlesource_googleurl)
· 版本: 2022-04-04 快照
· 项目地址:
https://quiche.googlesource.com/googleurl
· 描述: Chrome 的 URL 解析库
· 用途分类: 控制平面, 数据平面核心
主要使用场景:
· URL 解析和规范化
· 路由匹配
· 重定向处理
10. 测试框架
10.1 Google Test
(com_google_googletest)
· 版本: 2020-09-10 快照
· 项目地址:
https://github.com/google/googletest
· 描述: Google 的 C++ 测试框架
· 用途分类: 仅测试
主要使用场景:
· 单元测试
· 集成测试
· Mock 对象
10.2 Google Benchmark
(com_github_google_benchmark)
· 版本: 1.6.1
· 项目地址:
https://github.com/google/benchmark
· 描述: 微基准测试库
· 用途分类: 仅测试
主要使用场景:
· 性能基准测试
· 代码性能对比
11. 内存管理
11.1 tcmalloc
(com_github_google_tcmalloc)
· 版本: 2022-04-07 快照
· 项目地址:
https://github.com/google/tcmalloc
· 描述: 快速的多线程 malloc 实现
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· 高性能内存分配
· 多线程内存管理优化
11.2 gperftools
(com_github_gperftools_gperftools)
· 版本: 2.9.1
· 项目地址:
https://github.com/gperftools/gperftools
· 描述: tcmalloc 和性能分析工具集
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· CPU 性能分析
· 内存分析
· 堆分析
12. 其他实用库
12.1 xxHash
(com_github_cyan4973_xxhash)
· 版本: 0.8.1
· 项目地址:
https://github.com/Cyan4973/xxHash
· 描述: 极快的哈希算法
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· 快速哈希计算
· 一致性哈希
· 缓存键生成
12.2 libcircllhist
(com_github_circonus_labs_libcircllhist)
· 版本: 2019-02-11 快照
· 项目地址: https://github.com/circonus-labs/libcircllhist
· 描述: Circonus 对数线性直方图实现
· 用途分类: 控制平面, 可观测性核心, 数据平面核心
主要使用场景:
· 延迟直方图统计
· 指标聚合
12.3 SQL Parser
(com_github_envoyproxy_sqlparser)
· 版本: 2020-06-10 快照
· 项目地址:
https://github.com/envoyproxy/sql-parser
· 描述: C++ SQL 解析库(从 Hyrise 分支)
· 用途分类: 数据平面扩展
主要使用场景:
· MySQL 代理过滤器
· PostgreSQL 代理过滤器
12.4 Hessian2 Codec
(com_github_alibaba_hessian2_codec)
· 版本: 2021-04-05 快照
· 项目地址:
https://github.com/alibaba/hessian2-codec
· 描述: 阿里巴巴的 Hessian2 编解码 C++ 库
· 用途分类: 数据平面扩展
主要使用场景:
· Dubbo 代理过滤器
12.5 ICU Library
(com_github_unicode_org_icu)
· 版本: 71-1
· 项目地址: https://github.com/unicode-org/icu
· 描述: Unicode 国际组件库
· 用途分类: 数据平面扩展
主要使用场景:
· 语言过滤器
· 国际化支持
13. WASM 相关库
13.1 V8 (v8)
· 版本: 10.4.132.18
· 项目地址: https://v8.dev
· 描述: Google 的高性能 JavaScript 和 WebAssembly 引擎
· 用途分类: 数据平面扩展
13.2 Wasmtime (com_github_wasmtime)
· 版本: 0.38.1
· 项目地址:
https://github.com/bytecodealliance/wasmtime
· 描述: 独立的 WebAssembly 运行时
· 用途分类: 数据平面扩展
13.3 WAVM (com_github_wavm_wavm)
· 版本: 2021-12-15 快照
· 项目地址: https://wavm.github.io
· 描述: WebAssembly 虚拟机
· 用途分类: 数据平面扩展
13.4 WAMR (com_github_wamr)
· 版本: 2022-05-18
· 项目地址: https://github.com/bytecodealliance/wasm-micro-runtime
· 描述: 轻量级 WebAssembly 运行时
· 用途分类: 数据平面扩展
13.5 Proxy-WASM C++ SDK (proxy_wasm_cpp_sdk)
· 版本: 2022-03-15 快照
· 项目地址: https://github.com/proxy-wasm/proxy-wasm-cpp-sdk
· 描述: 代理 WebAssembly C++ SDK
· 用途分类: 数据平面扩展
14. 可观测性库
14.1 OpenTracing C++
(io_opentracing_cpp)
· 版本: 1.5.1
· 项目地址: https://opentracing.io
· 描述: 分布式追踪的供应商中立 API
· 用途分类: 可观测性扩展
14.2 OpenCensus C++
(io_opencensus_cpp)
· 版本: 2020-10-08 快照
· 项目地址: https://github.com/census-instrumentation/opencensus-cpp
· 描述: OpenCensus 追踪库
· 用途分类: 可观测性扩展
14.3 Datadog OpenTracing
(com_github_datadog_dd_opentracing_cpp)
· 版本: 1.2.1
· 项目地址: https://github.com/DataDog/dd-opentracing-cpp
· 描述: Datadog 的 OpenTracing C++ 客户端
· 用途分类: 可观测性扩展
14.4 LightStep Tracer
(com_lightstep_tracer_cpp)
· 版本: 2020-08-25 快照
· 项目地址:
https://github.com/lightstep/lightstep-tracer-cpp
· 描述: LightStep 分布式追踪库
· 用途分类: 可观测性扩展
14.5 SkyWalking cpp2sky
(com_github_skyapm_cpp2sky)
· 版本: 0.4.0
· 项目地址:
https://github.com/SkyAPM/cpp2sky
· 描述: Apache SkyWalking C++ SDK
· 用途分类: 可观测性扩展
15. 性能追踪
15.1 Perfetto
(com_github_google_perfetto)
· 版本: 22.1
· 项目地址: https://perfetto.dev/
· 描述: 性能追踪 SDK
· 用途分类: 数据平面核心, 控制平面
主要使用场景:
· 性能追踪(需启用 --define=perf_tracing=enabled)
· 事件分析
16. 其他基础设施库
16.1 liburing
(com_github_axboe_liburing)
· 版本: 2.1
· 项目地址:
https://github.com/axboe/liburing
· 描述: io_uring 的 C 辅助库
· 用途分类: 数据平面核心, 控制平面
16.2 libsxg (com_github_google_libsxg)
· 版本: 2021-07-08 快照
· 项目地址:
https://github.com/google/libsxg
· 描述: 签名 HTTP Exchange 库
· 用途分类: 其他
16.3 Intel IPP Crypto
(com_github_intel_ipp_crypto_crypto_mb)
· 版本: 2021.5
· 项目地址: https://github.com/intel/ipp-crypto
· 描述: Intel 集成性能原语加密库
· 用途分类: 数据平面扩展
16.4 Intel Dlb (intel_dlb)
· 版本: 7.6.0
· 项目地址:
https://networkbuilders.intel.com
· 描述: Intel 动态负载均衡器
· 用途分类: 数据平面扩展
16.5 VPP Comms Library
(com_github_fdio_vpp_vcl)
· 版本: 2022-03-02 快照
· 项目地址: https://fd.io/
· 描述: FD.io VPP 通信库
· 用途分类: 其他
17. 构建系统相关
17.1 rules_foreign_cc
· 版本: 0.8.0
· 项目地址:
https://github.com/bazelbuild/rules_foreign_cc
· 描述: 在 Bazel 中使用外部构建系统的规则
· 用途分类: 构建, 数据平面核心, 控制平面
17.2 rules_go
· 版本: 0.33.0
· 项目地址:
https://github.com/bazelbuild/rules_go
· 描述: Go 语言的 Bazel 规则
· 用途分类: 构建, API
更多推荐




所有评论(0)