MCPcopy Index your code
hub / github.com/cloudwego/volo

github.com/cloudwego/volo @volo-build-0.12.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release volo-build-0.12.2 ↗ · + Follow
2,499 symbols 5,924 edges 255 files 545 documented · 22%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Volo

Crates.io Documentation Website Ask DeepWiki License Build Status

English | 中文 | 日本語

Volo 是字节跳动服务框架团队研发的 高性能可扩展性强 的 Rust RPC 框架,使用了 Rust 最新的 AFIT 和 RPITIT 特性。

Volo 使用 Motore 作为其中间件抽象层, Motore 基于 AFIT 和 RPITIT 设计。

概览

Crates

Volo 主要包含 6 个 crate 库:

  1. volo - 包含框架的通用组件。
  2. volo-thrift - 提供 thrift RPC 消息协议支持。
  3. volo-grpc - 提供 gRPC RPC 消息协议支持。
  4. volo-build - 通过 thriftprotobuf 文件生成 rust 代码。
  5. volo-cli - 命令行工具,基于 thrift 和 protobuf 的 IDL 生成 项目脚手架。
  6. volo-macros - 框架的中间件抽象层。

特点

使用 AFIT 和 RPITIT 特性

Volo 使用 Motore 作为其中间件抽象层, Motore 基于 AFIT 和 RPITIT 设计。

通过 RPITIT,我们可以避免很多不必要的 Box 内存分配,以及提升易用性,给用户提供更友好的编程接口和更符合人体工程学的编程范式。

高性能

Rust 以高性能和安全著称,我们在设计和实现过程中也时刻以高性能作为我们的目标,尽可能降低每一处的开销,提升每一处实现的性能。

首先要说明,和 Go 的框架对比性能是极不公平的,因此我们不会着重比较 Volo 和 Kitex 的性能,并且我们给出的数据仅能作为参考,希望大家能够客观看待;同时,由于在开源社区并没有找到另一款成熟的 Rust 语言的 Async 版本 Thrift RPC 框架,而且性能对比总是容易引战,因此我们希望尽可能弱化性能数据的对比,仅会公布我们自己极限 QPS 的数据。

在和 Kitex 相同的测试条件(限制 4C)下,Volo 极限 QPS 为 35W;同时,我们内部正在验证基于 Monoio(CloudWeGo 开源的 Rust Async Runtime)的版本,极限 QPS 可以达到 44W。

从我们线上业务的火焰图来看,得益于 Rust 的静态分发和优秀的编译优化,框架部分的开销基本可以忽略不计(不包含 syscall 开销)。

易用性好

~~Rust 以难学难用而闻名~~,我们希望尽可能降低用户使用 Volo 框架以及使用 Rust 语言编写微服务的难度,提供最符合人体工程学和直觉的编码体验。因此,我们把易用性作为我们最重要的目标之一。

比如,我们提供了 volo 命令行工具,用于初始化项目以及管理 idl;同时,我们将 thrift 及 gRPC 拆分为两个独立(但共用一些组件)的框架,以提供最符合不同协议语义的编程范式及接口。

我们还提供了#[service]宏(可以理解为不需要 Boxasync_trait)来使得用户可以无心理负担地使用异步来编写 Service 中间件。

扩展性强

收益于 Rust 强大的表达和抽象能力,通过灵活的中间件 Service 抽象,开发者可以以非常统一的形式,对 RPC 元信息、请求和响应做处理。

比如,服务发现、负载均衡等服务治理功能,都可以以 Service 形式进行实现,而不需要独立实现 Trait。

相关的扩展,我们会放在 volo-rs 组织下,也欢迎大家贡献自己的扩展到 volo-rs。

查看 guide 获取更多信息。

相关教程

Volo-Thrift: https://www.cloudwego.io/zh/docs/volo/volo-thrift/getting-started/

Volo-gRPC: https://www.cloudwego.io/zh/docs/volo/volo-grpc/getting-started/

示例

参考Examples.

相关生态

  • Volo-rs: Volo 的相关生态,包含了 Volo 的许多组件
  • Motore: Volo 参考 Tower 设计的,使用了 AFIT 和 RPITIT 的 middleware 抽象层
  • Pilota: Volo 使用的 Thrift 与 Protobuf 编译器及编解码的纯 Rust 实现(不依赖 protoc)
  • Metainfo: Volo 用于进行元信息透传的组件,期望定义一套元信息透传的标准

开发路线图

点击 ROADMAP.md 获取更多信息。

如何贡献

点击 CONTRIBUTING.md 获取更多信息。

开源许可

Volo 使用 MIT license 和 the Apache License (Version 2.0) 双重许可证。

点击 LICENSE-MITLICENSE-APACHE 查看更多细节。

鸣谢

我们使用了一些第三方组件, 在此感谢他们的付出

点击 CREDITS.md 查看完整的名单。

社区

Volo user group

Extension points exported contracts — how you extend this code

Sealed (Interface)
All methods are on this pub(super) trait, instead of `IntoMetadataKey`, so that they aren't publicly exposed to the worl [13 …
volo-grpc/src/metadata/map.rs
FromContext (Interface)
Extract a type from context ([`ServerContext`] and [`Parts`]) This trait is used for handlers, which can extract someth [15 …
volo-http/src/server/extract.rs
Discover (Interface)
[`Discover`] is the most basic trait for Discover. [5 implementers]
volo/src/discovery/mod.rs
CliCommand (Interface)
(no doc) [9 implementers]
volo-cli/src/command.rs
ZeroCopyEncoder (Interface)
Trait for encoding a [`ThriftMessage`] in place. [`ZeroCopyEncoder`] tries to encode a message without copying large da [3 …
volo-thrift/src/codec/default/mod.rs
AsMetadataKey (Interface)
A marker trait used to identify values that can be used as search keys to a `MetadataMap`. [5 implementers]
volo-grpc/src/metadata/map.rs
FromRequest (Interface)
Extract a type from [`Request`] with its [`ServerContext`] This trait is used for handlers, which can extract something [13 …
volo-http/src/server/extract.rs
AsyncExt (Interface)
Asynchronous extension functions. [4 implementers]
volo/src/net/ext.rs

Core symbols most depended-on inside this repo

map
called by 148
volo-grpc/src/request.rs
len
called by 130
volo-grpc/src/metadata/map.rs
clone
called by 104
volo-http/src/client/mod.rs
as_bytes
called by 87
volo-grpc/src/metadata/value.rs
iter
called by 85
volo-grpc/src/metadata/map.rs
clone
called by 75
volo/src/util/mod.rs
as_str
called by 62
volo-grpc/src/metadata/key.rs
insert
called by 53
volo-grpc/src/metadata/map.rs

Shape

Method 1,410
Function 532
Class 418
Enum 73
Interface 66

Languages

Rust100%
Python1%

Modules by API surface

volo-grpc/src/metadata/map.rs84 symbols
volo-http/src/client/transport/pool.rs65 symbols
volo-grpc/src/status.rs62 symbols
volo-thrift/src/context.rs47 symbols
volo-thrift/src/transport/pool/mod.rs45 symbols
volo-http/src/client/mod.rs42 symbols
volo/src/net/tls/mod.rs41 symbols
volo/src/context.rs40 symbols
volo-grpc/src/metadata/value.rs40 symbols
volo-http/src/server/response/sse.rs39 symbols
volo-build/src/util.rs38 symbols
volo-grpc/src/client/mod.rs37 symbols

For agents

$ claude mcp add volo \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact