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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐