22 releases
0.10.3 | Aug 29, 2024 |
---|---|
0.10.1 | Jun 11, 2024 |
0.9.0 | Dec 22, 2023 |
0.8.0 | Oct 23, 2023 |
0.0.0 | May 11, 2022 |
#217 in Network programming
5,868 downloads per month
Used in 13 crates
(9 directly)
150KB
3.5K
SLoC
Volo is a high-performance and strong-extensibility Rust RPC framework that helps developers build microservices.
Volo uses Motore
as its middleware abstraction, which is powered by AFIT and RPITIT.
Overview
Crates
Volo mainly consists of six crates:
- The
volo
crate, which contains the common components of the framework. - The
volo-thrift
crate, which provides the Thrift RPC implementation. - The
volo-grpc
crate, which provides the gRPC implementation. - The
volo-http
crate, which provides the HTTP implementation. - The
volo-build
crate, which generates thrift and protobuf code. - The
volo-cli
crate, which provides the CLI interface to bootstrap a new project and manages the idl files. - The
volo-macros
crate, which provides the macros for the framework.
Features
Powered by AFIT and RPITIT
Volo uses Motore
as its middleware abstraction, which is powered by AFIT and RPITIT.
Through RPITIT, we can avoid many unnecessary Box
memory allocations, improve ease of use, and provide users with a more friendly programming interface and a more ergonomic programming paradigm.
High Performance
Rust is known for its high performance and safety. We always take high performance as our goal in the design and implementation process, reduce the overhead of each place as much as possible, and improve the performance of each implementation.
First of all, it is very unfair to compare the performance with the Go framework, so we will not focus on comparing the performance of Volo and Kitex, and the data we give can only be used as a reference, I hope everyone can view it objectively; at the same time, due to the open source community has not found another mature Rust async version Thrift RPC framework, and performance comparison is always easy to lead to war, so we hope to weaken the comparison of performance data as much as possible, and we'll only publish our own QPS data.
Under the same test conditions as Kitex (limited to 4C), the Volo QPS is 350k; at the same time, we are internally verifying the version based on Monoio (CloudWeGo's open source Rust async runtime), and the QPS can reach 440k.
From the flame graph of our online business, thanks to Rust's static distribution and excellent compilation optimization, the overhead of the framework part is basically negligible (excluding syscall overhead).
Easy to Use
Rust is known for being hard to learn and hard to use, and we want to make it as easy as possible for users to use the Volo framework and write microservices in the Rust language, providing the most ergonomic and intuitive coding experience possible. Therefore, we make ease of use one of our most important goals.
For example, we provide the volo command line tool for bootstraping projects and managing idl files; at the same time, we split thrift and gRPC into two independent(but share some components) frameworks to provide programming paradigms that best conform to different protocol semantics and interface.
We also provide the #[service]
macro (which can be understood as the async_trait
that does not require Box
) to enable users to write service middleware using async rust without psychological burden.
Strong Extensibility
Benefiting from Rust's powerful expression and abstraction capabilities, through the flexible middleware Service
abstraction, developers can process RPC meta-information, requests and responses in a very unified form.
For example, service governance functions such as service discovery and load balancing can be implemented in the form of services without the need to implement Trait independently.
We have also created an organization Volo-rs
, any contributions are welcome.
For more information, you may refer to our guide.
Tutorial
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: Work In Progress
Examples
See Examples.
Related Projects
- Volo-rs: The volo ecosystem which contains a lot of useful components.
- Motore: Middleware abstraction layer powered by AFIT and RPITIT.
- Pilota: A thrift and protobuf implementation in pure rust with high performance and extensibility.
- Metainfo: Transmissing metainfo across components.
RoadMap
See ROADMAP.md for more information.
Contributing
See CONTRIBUTING.md for more information.
License
Volo is dual-licensed under the MIT license and the Apache License (Version 2.0).
See LICENSE-MIT and LICENSE-APACHE for details.
Credits
We have used some third party components, and we thank them for their work.
For the full list, you may refer to the CREDITS.md file.
Community
-
Email: volo@cloudwego.io
-
How to become a member: COMMUNITY MEMBERSHIP
-
Issues: Issues
-
Feishu: Scan the QR code below with Feishu or click this link to join our CloudWeGo Volo user group.
Dependencies
~9–23MB
~331K SLoC