21 个版本
新 0.10.2 | 2024 年 8 月 19 日 |
---|---|
0.10.1 | 2024 年 6 月 11 日 |
0.10.0 | 2024 年 4 月 7 日 |
0.9.0 | 2023 年 12 月 22 日 |
0.0.0 | 2022 年 5 月 11 日 |
181 在 网络编程 中
每月下载量 9,321
在 12 个 crate 中使用 (9 个直接使用)
150KB
3.5K SLoC
Volo 是一个 高性能 且 强扩展性 的 Rust RPC 框架,帮助开发者构建微服务。
Volo 使用 Motore
作为其中间件抽象,由 AFIT 和 RPITIT 提供。
概述
crate
Volo 主要由六个 crate 组成
volo
crate,其中包含框架的公共组件。volo-thrift
crate,提供 Thrift RPC 实现。volo-grpc
crate,提供 gRPC 实现。volo-http
crate,提供 HTTP 实现。volo-build
crate,生成 thrift 和 protobuf 代码。volo-cli
crate,提供 CLI 界面以启动新项目并管理 idl 文件。volo-macros
crate,提供框架的宏。
功能
由 AFIT 和 RPITIT 提供支持
Volo 使用 Motore
作为其中间件抽象,由 AFIT 和 RPITIT 提供。
通过 RPITIT,我们可以避免许多不必要的 Box
内存分配,提高易用性,并为用户提供更友好的编程接口和更人性化的编程范式。
高性能
Rust以其高性能和安全著称。我们在设计和实现过程中始终以高性能为目标,尽可能减少每个地方的开销,并提高每个实现的性能。
首先,将性能与Go框架进行比较是非常不公平的,所以我们不会专注于比较Volo和Kitex的性能,我们给出的数据只能作为参考,希望每个人都能客观地看待它;同时,由于开源社区尚未找到另一个成熟的Rust异步版本的Thrift RPC框架,性能比较很容易引发争论,所以我们希望尽可能弱化性能数据的比较,我们只发布我们自己的QPS数据。
在Kitex相同的测试条件下(限于4C),Volo的QPS为350k;同时,我们正在内部验证基于Monoio(CloudWeGo的开源Rust异步运行时)的版本,QPS可以达到440k。
从我们在线业务的火焰图中可以看出,得益于Rust的静态分布和卓越的编译优化,框架部分的开销基本上可以忽略不计(不包括系统调用开销)。
易于使用
Rust以其难以学习和使用而著称,我们希望尽可能让用户易于使用Volo框架并以Rust语言编写微服务,提供尽可能直观和便捷的编码体验。因此,我们将易用性作为我们最重要的目标之一。
例如,我们提供了volo命令行工具,用于启动项目和管理工作IDL文件;同时,我们将thrift和gRPC拆分为两个独立(但共享一些组件)的框架,以提供最符合不同协议语义和接口的编程范式。
我们还提供了一个#[service]
宏(可以理解为不需要Box
的async_trait),使用户能够无心理负担地使用异步Rust编写服务中间件。
强大的可扩展性
得益于Rust强大的表达式和抽象能力,通过灵活的中间件Service
抽象,开发者可以以非常统一的形式处理RPC元信息、请求和响应。
例如,可以实现如服务发现和负载均衡等服务治理功能,而无需独立实现Trait。
我们已创建了一个组织Volo-rs
,任何贡献都受欢迎。
更多信息,请参阅我们的指南。
教程
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/
Volo-HTTP: 正在开发中
示例
见示例。
相关项目
- Volo-rs: 包含许多有用组件的volo生态系统。
- Motore: 由AFIT和RPITIT支持的中间件抽象层。
- Pilota: 以高性能和可扩展性为特点的纯Rust Thrift和protobuf实现。
- Metainfo: 在组件间传递元信息。
路线图
请参阅ROADMAP.md获取更多信息。
贡献
请参阅CONTRIBUTING.md获取更多信息。
许可证
Volo采用MIT许可证和Apache许可证(版本2.0)的双重许可。
有关详细信息,请参阅LICENSE-MIT和LICENSE-APACHE。
致谢
我们使用了某些第三方组件,并感谢他们的工作。
有关完整列表,您可以参考CREDITS.md文件。
社区
-
如何成为会员:COMMUNITY MEMBERSHIP
-
问题:Issues
依赖
~9–22MB
~322K SLoC