#rpc-framework #grpc #rpc #thrift #protobuf #async

volo

Volo is a high-performance and strong-extensibility Rust RPC framework that helps developers build microservices

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

#250 in Network programming

Download history 2584/week @ 2024-08-16 1317/week @ 2024-08-23 1693/week @ 2024-08-30 1744/week @ 2024-09-06 1174/week @ 2024-09-13 1512/week @ 2024-09-20 944/week @ 2024-09-27 863/week @ 2024-10-04 1209/week @ 2024-10-11 1253/week @ 2024-10-18 1581/week @ 2024-10-25 1377/week @ 2024-11-01 1316/week @ 2024-11-08 1589/week @ 2024-11-15 2059/week @ 2024-11-22 1283/week @ 2024-11-29

6,550 downloads per month
Used in 13 crates (9 directly)

MIT/Apache

150KB
3.5K SLoC

Volo

Crates.io Documentation Website License Build Status

English | 中文 | 日本語

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:

  1. The volo crate, which contains the common components of the framework.
  2. The volo-thrift crate, which provides the Thrift RPC implementation.
  3. The volo-grpc crate, which provides the gRPC implementation.
  4. The volo-http crate, which provides the HTTP implementation.
  5. The volo-build crate, which generates thrift and protobuf code.
  6. The volo-cli crate, which provides the CLI interface to bootstrap a new project and manages the idl files.
  7. 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.

  • 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

Dependencies

~9–22MB
~330K SLoC