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

Overview

Volo

Crates.io Documentation Website License Build Status

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 GAT.

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-build crate, which generates thrift and protobuf code.
  5. The volo-cli crate, which provides the CLI interface to bootstrap a new project and manages the idl files.
  6. The volo-macros crate, which provides the macros for the framework.

Features

Powered by GAT

Volo uses Motore as its middleware abstraction, which is powered by GAT.

Through GAT, 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/

Related Projects

  • Volo-rs: The volo ecosystem which contains a lot of useful components.
  • Motore: Middleware abstraction layer powered by GAT.
  • 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

Comments
  • 代码生成多个文件和生成http-gw代码

    代码生成多个文件和生成http-gw代码

    1.代码生成,能不能不生成一个文件啊?想生成多个文件,因为proto想作为集中仓库,全部生成到一个文件里,不现实。proto是按文件夹管理的,我想生成的代码也是同样的文件夹。现在的问题是rs文件里不仅包含了path的代码,还包含了includes的代码,这没法分开生成了。 2.能生成http代码吗?protoc-gen-grpc-gateway这个就能生成go的http的代码。

    A-volo-build C-question 
    opened by moonfdd 8
  • Incorrect error propagation from server to client

    Incorrect error propagation from server to client

    Bug Report

    Current behavior with error propagation leads to client error loss. The issue is the same as in spring-cloud-gateway

    Description

    I've tried to compare the results from the official GRPC server and the Volo. You can create two identical implementations for Java/Scala/Kotlin and Volo which just respond with an error status for the unary call.

    The Java version responds with a single error message and closes the stream in this message as well, as a result, the client receives an error as a result of the call.

    The Volo version responds with two messages first with an error, and second with a stream close, as a result, the client is stuck.

    A-volo-grpc C-bug 
    opened by tonyvelichko 6
  • error: non-defining opaque type use in defining scope

    error: non-defining opaque type use in defining scope

    Bug Report

    Version

    volo v0.2.0

    Platform

    Windows 11 64-bit

    active toolchain

    nightly-x86_64-pc-windows-msvc (overridden by 'D:\volo-example\rust-toolchain.toml') rustc 1.66.0-nightly (758f19645 2022-10-24)

    Description

    run this example

    error: non-defining opaque type use in defining scope
       --> C:\Users\xxx\.cargo\registry\src\mirrors.ustc.edu.cn-61ef6e0cd06fb9b8\volo-0.2.0\src\loadbalance\random.rs:128:9
        |
    128 | /         async {
    129 | |             let key = discover.key(endpoint);
    130 | |             let weighted_list = match self.router.entry(key) {
    131 | |                 Entry::Occupied(e) => e.get().clone(),
    ...   |
    148 | |             })
    149 | |         }
        | |_________^ lifetime `'future` is part of concrete type but not used in parameter list of the `impl Trait` type alias
    
    opened by Ake-w 4
  • windows下怎么编译

    windows下怎么编译

    Compiling num_enum_derive v0.5.7 Compiling volo v0.1.0 Compiling volo-build v0.1.1 error[E0432]: unresolved imports tokio::net::unix, tokio::net::UnixStream --> C:\Users\BJSYDZ.cargo\registry\src\github.com-1ecc6299db9ec823\volo-0.1.0\src\net\conn.rs:10:16 | 10 | net::{tcp, unix, TcpStream, UnixStream}, | ^^^^ ^^^^^^^^^^ no UnixStream in net | | | no unix in net

    error[E0432]: unresolved import tokio::net::UnixStream --> C:\Users\BJSYDZ.cargo\registry\src\github.com-1ecc6299db9ec823\volo-0.1.0\src\net\dial.rs:4:22 | 4 | net::{TcpStream, UnixStream}, | ^^^^^^^^^^ no UnixStream in net

    opened by littlekite 2
  • chore: make the code more concise

    chore: make the code more concise

    • remove unnecessary use path prefix
    • return can be lifted out
    • keep impl order with trait
    • large_enum_variant

    Motivation

    CLion 给出大量 warnning

    另有大量重复代码问题,因部分代码可能存在限制,便未作复用 image

    image

    Solution

    部分改善

    C-maintenance 
    opened by tuchg 1
  • 支持使用自定义 Codec 实现

    支持使用自定义 Codec 实现

    Feature Request

    Crates

    volo-thrift

    Motivation

    目前我们仅支持了 CodecType 的设置,但是 Codec 的实现仍然是写死的 BinaryProtocol,并且不允许替换实现。

    为了支持更多的 Protocol 和使用场景,也为了之后的 Codec 性能优化做准备,我们需要支持自定义 Codec 实现。

    Proposal

    TBD

    A-volo-thrift C-proposal 
    opened by PureWhiteWu 1
  • Trait for async Thrift codec

    Trait for async Thrift codec

    Feature Request

    Crates

    volo-thrift

    Motivation

    Extending the Thrift (Apache) Compact protocol support for codec. Currently volo_thrift::message_wrapper::ThriftMessage<M> method decode_async only accept concrete &mut TAsyncBinaryProtocol<R> causing the following compile error:

    error[E0308]: mismatched types
       --> volo/volo-thrift/src/codec/default/thrift.rs:174:62
        |
    174 |                 let msg = ThriftMessage::<Msg>::decode_async(&mut p, cx).await?;
        |                           ---------------------------------- ^^^^^^ expected struct `TAsyncBinaryProtocol`, found struct `TAsyncCompactProtocol`
        |                           |
        |                           arguments to this function are incorrect
        |
        = note: expected mutable reference `&mut TAsyncBinaryProtocol<_>`
                   found mutable reference `&mut TAsyncCompactProtocol<&mut volo::util::buf_reader::BufReader<R>>`
    note: associated function defined here
       --> volo/volo-thrift/src/message_wrapper.rs:185:25
        |
    185 |     pub(crate) async fn decode_async<Cx: ThriftContext + Send, R>(
        |                         ^^^^^^^^^^^^
    186 |         protocol: &mut TAsyncBinaryProtocol<R>,
        |         --------------------------------------
    

    Proposal

    Trait for async codec, use GAT just like TInputProtocol and TOutputProtocol are implemented.

    Alternatives

    None, RFC?

    opened by ii64 0
  • Use GAT in volo-grpc `SendEntryMessage`

    Use GAT in volo-grpc `SendEntryMessage`

    Feature Request

    Crates

    Motivation

    The definition of SendEntryMessage can be better with GAT

    pub trait SendEntryMessage {
        fn into_body(
            self,
            compression_config: Option<CompressionEncoding>,
        ) -> crate::BoxStream<'static, Result<Bytes, crate::Status>>;
    }
    

    with GAT

    pub trait SendEntryMessage {
        type Body: Stream<Item = Result<Bytes, crate::Status>> + Send
        fn into_body(
            self,
            compression_config: Option<CompressionEncoding>,
        ) -> Self::Body;
    }
    
    A-volo-grpc C-enhancement 
    opened by LYF1999 0
  • Proposal: shall we use `async_fn_in_traits`?

    Proposal: shall we use `async_fn_in_traits`?

    Now that async_fn_in_traits has reached MVP in nightly, and will hopefully be stabilized in six months.

    Shall we use that?

    FYI:

    1. https://blog.rust-lang.org/inside-rust/2022/11/17/async-fn-in-trait-nightly.html
    2. https://github.com/rust-lang/rust/issues/91611
    A-volo C-question E-help-wanted 
    opened by PureWhiteWu 1
Releases(volo-thrift-0.3.1)
  • volo-thrift-0.3.1(Jan 4, 2023)

    What's Changed

    • fix: construct default codec by @LYF1999 in https://github.com/cloudwego/volo/pull/117

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-0.3.0...volo-thrift-0.3.1

    Source code(tar.gz)
    Source code(zip)
  • volo-thrift-0.3.0(Dec 22, 2022)

    What's Changed

    • chore: change pilota dependency back to git by @PureWhiteWu in https://github.com/cloudwego/volo/pull/75
    • release: 0.2.1 for volo-build by @PureWhiteWu in https://github.com/cloudwego/volo/pull/76
    • chore: change pilota dependency back to git by @PureWhiteWu in https://github.com/cloudwego/volo/pull/77
    • feat: add touch for idl config by @LYF1999 in https://github.com/cloudwego/volo/pull/81
    • feat(thrift): support client Arc request by @Millione in https://github.com/cloudwego/volo/pull/84
    • fix(grpc): return trailers-only when error occured by @Millione in https://github.com/cloudwego/volo/pull/85
    • chore(grpc): move metainfo logic to metaservice by @Millione in https://github.com/cloudwego/volo/pull/86
    • chore: make the code more concise by @tuchg in https://github.com/cloudwego/volo/pull/88
    • feat: support zerocopy codec by @PureWhiteWu in https://github.com/cloudwego/volo/pull/92
    • chore: remove redundant clone by @PureWhiteWu in https://github.com/cloudwego/volo/pull/93
    • fix: buf reader compact by @PureWhiteWu in https://github.com/cloudwego/volo/pull/94
    • feat: migrate to motore 0.3 & new callopt by @LYF1999 in https://github.com/cloudwego/volo/pull/90
    • fix: unmatched method by @LYF1999 in https://github.com/cloudwego/volo/pull/96
    • fix: trait bound by @LYF1999 in https://github.com/cloudwego/volo/pull/97
    • fix: lifetime is not general enough by @LYF1999 in https://github.com/cloudwego/volo/pull/98
    • callopt for grpc by @LYF1999 in https://github.com/cloudwego/volo/pull/99
    • fix(grpc): MkGenericClient in codegen by @Millione in https://github.com/cloudwego/volo/pull/100
    • grpc oneshot service by @LYF1999 in https://github.com/cloudwego/volo/pull/101
    • remove mut for grpc method by @LYF1999 in https://github.com/cloudwego/volo/pull/102
    • chore(examples): thrift string default generated smolstr by @Millione in https://github.com/cloudwego/volo/pull/103
    • fix: protocol detect by @PureWhiteWu in https://github.com/cloudwego/volo/pull/104
    • fix(grpc): remove write destination addr by @Millione in https://github.com/cloudwego/volo/pull/105
    • simplify mk_codec args by @LYF1999 in https://github.com/cloudwego/volo/pull/106
    • feat(grpc): de/compression support (#4) by @tuchg in https://github.com/cloudwego/volo/pull/91
    • chore: replace smol_str with faststr by @Millione in https://github.com/cloudwego/volo/pull/108
    • fix: bufreader length calc error by @PureWhiteWu in https://github.com/cloudwego/volo/pull/109
    • feat(grpc): multi-service support by @Millione in https://github.com/cloudwego/volo/pull/95
    • fix pilota rust wrapper by @LYF1999 in https://github.com/cloudwego/volo/pull/111
    • fix(grpc): add sync bound for request by @Millione in https://github.com/cloudwego/volo/pull/112
    • feat(grpc): expose more http2 configuration by @Millione in https://github.com/cloudwego/volo/pull/110
    • fix(grpc): better builder pattern by @Millione in https://github.com/cloudwego/volo/pull/113
    • chore(cli): adapt to grpc multi-service by @Millione in https://github.com/cloudwego/volo/pull/115
    • chore(grpc): change log level from warn to debug by @Millione in https://github.com/cloudwego/volo/pull/114

    New Contributors

    • @tuchg made their first contribution in https://github.com/cloudwego/volo/pull/88

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-thrift-0.2.1...volo-thrift-0.3.0

    Source code(tar.gz)
    Source code(zip)
  • volo-grpc-0.3.0(Dec 22, 2022)

    What's Changed

    • chore: change pilota dependency back to git by @PureWhiteWu in https://github.com/cloudwego/volo/pull/75
    • release: 0.2.1 for volo-build by @PureWhiteWu in https://github.com/cloudwego/volo/pull/76
    • chore: change pilota dependency back to git by @PureWhiteWu in https://github.com/cloudwego/volo/pull/77
    • feat: add touch for idl config by @LYF1999 in https://github.com/cloudwego/volo/pull/81
    • feat(thrift): support client Arc request by @Millione in https://github.com/cloudwego/volo/pull/84
    • fix(grpc): return trailers-only when error occured by @Millione in https://github.com/cloudwego/volo/pull/85
    • chore(grpc): move metainfo logic to metaservice by @Millione in https://github.com/cloudwego/volo/pull/86
    • chore: make the code more concise by @tuchg in https://github.com/cloudwego/volo/pull/88
    • feat: support zerocopy codec by @PureWhiteWu in https://github.com/cloudwego/volo/pull/92
    • chore: remove redundant clone by @PureWhiteWu in https://github.com/cloudwego/volo/pull/93
    • fix: buf reader compact by @PureWhiteWu in https://github.com/cloudwego/volo/pull/94
    • feat: migrate to motore 0.3 & new callopt by @LYF1999 in https://github.com/cloudwego/volo/pull/90
    • fix: unmatched method by @LYF1999 in https://github.com/cloudwego/volo/pull/96
    • fix: trait bound by @LYF1999 in https://github.com/cloudwego/volo/pull/97
    • fix: lifetime is not general enough by @LYF1999 in https://github.com/cloudwego/volo/pull/98
    • callopt for grpc by @LYF1999 in https://github.com/cloudwego/volo/pull/99
    • fix(grpc): MkGenericClient in codegen by @Millione in https://github.com/cloudwego/volo/pull/100
    • grpc oneshot service by @LYF1999 in https://github.com/cloudwego/volo/pull/101
    • remove mut for grpc method by @LYF1999 in https://github.com/cloudwego/volo/pull/102
    • chore(examples): thrift string default generated smolstr by @Millione in https://github.com/cloudwego/volo/pull/103
    • fix: protocol detect by @PureWhiteWu in https://github.com/cloudwego/volo/pull/104
    • fix(grpc): remove write destination addr by @Millione in https://github.com/cloudwego/volo/pull/105
    • simplify mk_codec args by @LYF1999 in https://github.com/cloudwego/volo/pull/106
    • feat(grpc): de/compression support (#4) by @tuchg in https://github.com/cloudwego/volo/pull/91
    • chore: replace smol_str with faststr by @Millione in https://github.com/cloudwego/volo/pull/108
    • fix: bufreader length calc error by @PureWhiteWu in https://github.com/cloudwego/volo/pull/109
    • feat(grpc): multi-service support by @Millione in https://github.com/cloudwego/volo/pull/95
    • fix pilota rust wrapper by @LYF1999 in https://github.com/cloudwego/volo/pull/111
    • fix(grpc): add sync bound for request by @Millione in https://github.com/cloudwego/volo/pull/112
    • feat(grpc): expose more http2 configuration by @Millione in https://github.com/cloudwego/volo/pull/110
    • fix(grpc): better builder pattern by @Millione in https://github.com/cloudwego/volo/pull/113
    • chore(cli): adapt to grpc multi-service by @Millione in https://github.com/cloudwego/volo/pull/115
    • chore(grpc): change log level from warn to debug by @Millione in https://github.com/cloudwego/volo/pull/114

    New Contributors

    • @tuchg made their first contribution in https://github.com/cloudwego/volo/pull/88

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-grpc-0.2.1...volo-grpc-0.3.0

    Source code(tar.gz)
    Source code(zip)
  • volo-cli-0.3.0(Dec 22, 2022)

    What's Changed

    • chore: change pilota dependency back to git by @PureWhiteWu in https://github.com/cloudwego/volo/pull/77
    • feat: add touch for idl config by @LYF1999 in https://github.com/cloudwego/volo/pull/81
    • feat(thrift): support client Arc request by @Millione in https://github.com/cloudwego/volo/pull/84
    • fix(grpc): return trailers-only when error occured by @Millione in https://github.com/cloudwego/volo/pull/85
    • chore(grpc): move metainfo logic to metaservice by @Millione in https://github.com/cloudwego/volo/pull/86
    • chore: make the code more concise by @tuchg in https://github.com/cloudwego/volo/pull/88
    • feat: support zerocopy codec by @PureWhiteWu in https://github.com/cloudwego/volo/pull/92
    • chore: remove redundant clone by @PureWhiteWu in https://github.com/cloudwego/volo/pull/93
    • fix: buf reader compact by @PureWhiteWu in https://github.com/cloudwego/volo/pull/94
    • feat: migrate to motore 0.3 & new callopt by @LYF1999 in https://github.com/cloudwego/volo/pull/90
    • fix: unmatched method by @LYF1999 in https://github.com/cloudwego/volo/pull/96
    • fix: trait bound by @LYF1999 in https://github.com/cloudwego/volo/pull/97
    • fix: lifetime is not general enough by @LYF1999 in https://github.com/cloudwego/volo/pull/98
    • callopt for grpc by @LYF1999 in https://github.com/cloudwego/volo/pull/99
    • fix(grpc): MkGenericClient in codegen by @Millione in https://github.com/cloudwego/volo/pull/100
    • grpc oneshot service by @LYF1999 in https://github.com/cloudwego/volo/pull/101
    • remove mut for grpc method by @LYF1999 in https://github.com/cloudwego/volo/pull/102
    • chore(examples): thrift string default generated smolstr by @Millione in https://github.com/cloudwego/volo/pull/103
    • fix: protocol detect by @PureWhiteWu in https://github.com/cloudwego/volo/pull/104
    • fix(grpc): remove write destination addr by @Millione in https://github.com/cloudwego/volo/pull/105
    • simplify mk_codec args by @LYF1999 in https://github.com/cloudwego/volo/pull/106
    • feat(grpc): de/compression support (#4) by @tuchg in https://github.com/cloudwego/volo/pull/91
    • chore: replace smol_str with faststr by @Millione in https://github.com/cloudwego/volo/pull/108
    • fix: bufreader length calc error by @PureWhiteWu in https://github.com/cloudwego/volo/pull/109
    • feat(grpc): multi-service support by @Millione in https://github.com/cloudwego/volo/pull/95
    • fix pilota rust wrapper by @LYF1999 in https://github.com/cloudwego/volo/pull/111
    • fix(grpc): add sync bound for request by @Millione in https://github.com/cloudwego/volo/pull/112
    • feat(grpc): expose more http2 configuration by @Millione in https://github.com/cloudwego/volo/pull/110
    • fix(grpc): better builder pattern by @Millione in https://github.com/cloudwego/volo/pull/113
    • chore(cli): adapt to grpc multi-service by @Millione in https://github.com/cloudwego/volo/pull/115
    • chore(grpc): change log level from warn to debug by @Millione in https://github.com/cloudwego/volo/pull/114

    New Contributors

    • @tuchg made their first contribution in https://github.com/cloudwego/volo/pull/88

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-cli-0.2.1...volo-cli-0.3.0

    Source code(tar.gz)
    Source code(zip)
  • volo-build-0.3.0(Dec 22, 2022)

    What's Changed

    • chore: change pilota dependency back to git by @PureWhiteWu in https://github.com/cloudwego/volo/pull/77
    • feat: add touch for idl config by @LYF1999 in https://github.com/cloudwego/volo/pull/81
    • feat(thrift): support client Arc request by @Millione in https://github.com/cloudwego/volo/pull/84
    • fix(grpc): return trailers-only when error occured by @Millione in https://github.com/cloudwego/volo/pull/85
    • chore(grpc): move metainfo logic to metaservice by @Millione in https://github.com/cloudwego/volo/pull/86
    • chore: make the code more concise by @tuchg in https://github.com/cloudwego/volo/pull/88
    • feat: support zerocopy codec by @PureWhiteWu in https://github.com/cloudwego/volo/pull/92
    • chore: remove redundant clone by @PureWhiteWu in https://github.com/cloudwego/volo/pull/93
    • fix: buf reader compact by @PureWhiteWu in https://github.com/cloudwego/volo/pull/94
    • feat: migrate to motore 0.3 & new callopt by @LYF1999 in https://github.com/cloudwego/volo/pull/90
    • fix: unmatched method by @LYF1999 in https://github.com/cloudwego/volo/pull/96
    • fix: trait bound by @LYF1999 in https://github.com/cloudwego/volo/pull/97
    • fix: lifetime is not general enough by @LYF1999 in https://github.com/cloudwego/volo/pull/98
    • callopt for grpc by @LYF1999 in https://github.com/cloudwego/volo/pull/99
    • fix(grpc): MkGenericClient in codegen by @Millione in https://github.com/cloudwego/volo/pull/100
    • grpc oneshot service by @LYF1999 in https://github.com/cloudwego/volo/pull/101
    • remove mut for grpc method by @LYF1999 in https://github.com/cloudwego/volo/pull/102
    • chore(examples): thrift string default generated smolstr by @Millione in https://github.com/cloudwego/volo/pull/103
    • fix: protocol detect by @PureWhiteWu in https://github.com/cloudwego/volo/pull/104
    • fix(grpc): remove write destination addr by @Millione in https://github.com/cloudwego/volo/pull/105
    • simplify mk_codec args by @LYF1999 in https://github.com/cloudwego/volo/pull/106
    • feat(grpc): de/compression support (#4) by @tuchg in https://github.com/cloudwego/volo/pull/91
    • chore: replace smol_str with faststr by @Millione in https://github.com/cloudwego/volo/pull/108
    • fix: bufreader length calc error by @PureWhiteWu in https://github.com/cloudwego/volo/pull/109
    • feat(grpc): multi-service support by @Millione in https://github.com/cloudwego/volo/pull/95
    • fix pilota rust wrapper by @LYF1999 in https://github.com/cloudwego/volo/pull/111
    • fix(grpc): add sync bound for request by @Millione in https://github.com/cloudwego/volo/pull/112
    • feat(grpc): expose more http2 configuration by @Millione in https://github.com/cloudwego/volo/pull/110
    • fix(grpc): better builder pattern by @Millione in https://github.com/cloudwego/volo/pull/113
    • chore(cli): adapt to grpc multi-service by @Millione in https://github.com/cloudwego/volo/pull/115
    • chore(grpc): change log level from warn to debug by @Millione in https://github.com/cloudwego/volo/pull/114

    New Contributors

    • @tuchg made their first contribution in https://github.com/cloudwego/volo/pull/88

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-build-0.2.1...volo-build-0.3.0

    Source code(tar.gz)
    Source code(zip)
  • volo-0.3.0(Dec 22, 2022)

    What's Changed

    • chore: change pilota dependency back to git by @PureWhiteWu in https://github.com/cloudwego/volo/pull/75
    • release: 0.2.1 for volo-build by @PureWhiteWu in https://github.com/cloudwego/volo/pull/76
    • chore: change pilota dependency back to git by @PureWhiteWu in https://github.com/cloudwego/volo/pull/77
    • feat: add touch for idl config by @LYF1999 in https://github.com/cloudwego/volo/pull/81
    • feat(thrift): support client Arc request by @Millione in https://github.com/cloudwego/volo/pull/84
    • fix(grpc): return trailers-only when error occured by @Millione in https://github.com/cloudwego/volo/pull/85
    • chore(grpc): move metainfo logic to metaservice by @Millione in https://github.com/cloudwego/volo/pull/86
    • chore: make the code more concise by @tuchg in https://github.com/cloudwego/volo/pull/88
    • feat: support zerocopy codec by @PureWhiteWu in https://github.com/cloudwego/volo/pull/92
    • chore: remove redundant clone by @PureWhiteWu in https://github.com/cloudwego/volo/pull/93
    • fix: buf reader compact by @PureWhiteWu in https://github.com/cloudwego/volo/pull/94
    • feat: migrate to motore 0.3 & new callopt by @LYF1999 in https://github.com/cloudwego/volo/pull/90
    • fix: unmatched method by @LYF1999 in https://github.com/cloudwego/volo/pull/96
    • fix: trait bound by @LYF1999 in https://github.com/cloudwego/volo/pull/97
    • fix: lifetime is not general enough by @LYF1999 in https://github.com/cloudwego/volo/pull/98
    • callopt for grpc by @LYF1999 in https://github.com/cloudwego/volo/pull/99
    • fix(grpc): MkGenericClient in codegen by @Millione in https://github.com/cloudwego/volo/pull/100
    • grpc oneshot service by @LYF1999 in https://github.com/cloudwego/volo/pull/101
    • remove mut for grpc method by @LYF1999 in https://github.com/cloudwego/volo/pull/102
    • chore(examples): thrift string default generated smolstr by @Millione in https://github.com/cloudwego/volo/pull/103
    • fix: protocol detect by @PureWhiteWu in https://github.com/cloudwego/volo/pull/104
    • fix(grpc): remove write destination addr by @Millione in https://github.com/cloudwego/volo/pull/105
    • simplify mk_codec args by @LYF1999 in https://github.com/cloudwego/volo/pull/106
    • feat(grpc): de/compression support (#4) by @tuchg in https://github.com/cloudwego/volo/pull/91
    • chore: replace smol_str with faststr by @Millione in https://github.com/cloudwego/volo/pull/108
    • fix: bufreader length calc error by @PureWhiteWu in https://github.com/cloudwego/volo/pull/109
    • feat(grpc): multi-service support by @Millione in https://github.com/cloudwego/volo/pull/95
    • fix pilota rust wrapper by @LYF1999 in https://github.com/cloudwego/volo/pull/111
    • fix(grpc): add sync bound for request by @Millione in https://github.com/cloudwego/volo/pull/112
    • feat(grpc): expose more http2 configuration by @Millione in https://github.com/cloudwego/volo/pull/110
    • fix(grpc): better builder pattern by @Millione in https://github.com/cloudwego/volo/pull/113
    • chore(cli): adapt to grpc multi-service by @Millione in https://github.com/cloudwego/volo/pull/115
    • chore(grpc): change log level from warn to debug by @Millione in https://github.com/cloudwego/volo/pull/114

    New Contributors

    • @tuchg made their first contribution in https://github.com/cloudwego/volo/pull/88

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-0.2.1...volo-0.3.0

    Source code(tar.gz)
    Source code(zip)
  • volo-thrift-0.2.1(Oct 26, 2022)

    What's Changed

    • use pilota git source by @LYF1999 in https://github.com/cloudwego/volo/pull/60
    • optimize volo-thrift code, remove unnecessary generic parameters by @LYF1999 in https://github.com/cloudwego/volo/pull/61
    • remove TAIT elision lifetime required after nightly-2022-10-20 by @ethe in https://github.com/cloudwego/volo/pull/63
    • fix: cx is not used in parameter list of the impl Trait type alias by @LYF1999 in https://github.com/cloudwego/volo/pull/64
    • feat: code adjust for Self by @daheige in https://github.com/cloudwego/volo/pull/62
    • feat: upgrade clap to 4 by @PureWhiteWu in https://github.com/cloudwego/volo/pull/65
    • chore: use workspace package and dependencies by @PureWhiteWu in https://github.com/cloudwego/volo/pull/66
    • optimize: volo codegen for thrift by @LYF1999 in https://github.com/cloudwego/volo/pull/67
    • doc: add examples by @PureWhiteWu in https://github.com/cloudwego/volo/pull/69
    • fix: ci rustfmt fail by @PureWhiteWu in https://github.com/cloudwego/volo/pull/70
    • feat: add writev support for volo net conn by @PureWhiteWu in https://github.com/cloudwego/volo/pull/72
    • remove useless liftetime paramenter in LoadBalance:: InstanceIter by @ethe in https://github.com/cloudwego/volo/pull/73

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-thrift-0.2.0...volo-thrift-0.2.1

    Source code(tar.gz)
    Source code(zip)
  • volo-grpc-0.2.1(Oct 26, 2022)

    What's Changed

    • use pilota git source by @LYF1999 in https://github.com/cloudwego/volo/pull/60
    • optimize volo-thrift code, remove unnecessary generic parameters by @LYF1999 in https://github.com/cloudwego/volo/pull/61
    • remove TAIT elision lifetime required after nightly-2022-10-20 by @ethe in https://github.com/cloudwego/volo/pull/63
    • fix: cx is not used in parameter list of the impl Trait type alias by @LYF1999 in https://github.com/cloudwego/volo/pull/64
    • feat: code adjust for Self by @daheige in https://github.com/cloudwego/volo/pull/62
    • feat: upgrade clap to 4 by @PureWhiteWu in https://github.com/cloudwego/volo/pull/65
    • chore: use workspace package and dependencies by @PureWhiteWu in https://github.com/cloudwego/volo/pull/66
    • optimize: volo codegen for thrift by @LYF1999 in https://github.com/cloudwego/volo/pull/67
    • doc: add examples by @PureWhiteWu in https://github.com/cloudwego/volo/pull/69
    • fix: ci rustfmt fail by @PureWhiteWu in https://github.com/cloudwego/volo/pull/70
    • feat: add writev support for volo net conn by @PureWhiteWu in https://github.com/cloudwego/volo/pull/72
    • remove useless liftetime paramenter in LoadBalance:: InstanceIter by @ethe in https://github.com/cloudwego/volo/pull/73

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-grpc-0.2.0...volo-grpc-0.2.1

    Source code(tar.gz)
    Source code(zip)
  • volo-cli-0.2.1(Oct 26, 2022)

    What's Changed

    • use pilota git source by @LYF1999 in https://github.com/cloudwego/volo/pull/60
    • optimize volo-thrift code, remove unnecessary generic parameters by @LYF1999 in https://github.com/cloudwego/volo/pull/61
    • remove TAIT elision lifetime required after nightly-2022-10-20 by @ethe in https://github.com/cloudwego/volo/pull/63
    • fix: cx is not used in parameter list of the impl Trait type alias by @LYF1999 in https://github.com/cloudwego/volo/pull/64
    • feat: code adjust for Self by @daheige in https://github.com/cloudwego/volo/pull/62
    • feat: upgrade clap to 4 by @PureWhiteWu in https://github.com/cloudwego/volo/pull/65
    • chore: use workspace package and dependencies by @PureWhiteWu in https://github.com/cloudwego/volo/pull/66
    • optimize: volo codegen for thrift by @LYF1999 in https://github.com/cloudwego/volo/pull/67
    • doc: add examples by @PureWhiteWu in https://github.com/cloudwego/volo/pull/69
    • fix: ci rustfmt fail by @PureWhiteWu in https://github.com/cloudwego/volo/pull/70
    • feat: add writev support for volo net conn by @PureWhiteWu in https://github.com/cloudwego/volo/pull/72
    • remove useless liftetime paramenter in LoadBalance:: InstanceIter by @ethe in https://github.com/cloudwego/volo/pull/73

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-cli-0.2.0...volo-cli-0.2.1

    Source code(tar.gz)
    Source code(zip)
  • volo-build-0.2.1(Oct 26, 2022)

    What's Changed

    • use pilota git source by @LYF1999 in https://github.com/cloudwego/volo/pull/60
    • optimize volo-thrift code, remove unnecessary generic parameters by @LYF1999 in https://github.com/cloudwego/volo/pull/61
    • remove TAIT elision lifetime required after nightly-2022-10-20 by @ethe in https://github.com/cloudwego/volo/pull/63
    • fix: cx is not used in parameter list of the impl Trait type alias by @LYF1999 in https://github.com/cloudwego/volo/pull/64
    • feat: code adjust for Self by @daheige in https://github.com/cloudwego/volo/pull/62
    • feat: upgrade clap to 4 by @PureWhiteWu in https://github.com/cloudwego/volo/pull/65
    • chore: use workspace package and dependencies by @PureWhiteWu in https://github.com/cloudwego/volo/pull/66
    • optimize: volo codegen for thrift by @LYF1999 in https://github.com/cloudwego/volo/pull/67
    • doc: add examples by @PureWhiteWu in https://github.com/cloudwego/volo/pull/69
    • fix: ci rustfmt fail by @PureWhiteWu in https://github.com/cloudwego/volo/pull/70
    • feat: add writev support for volo net conn by @PureWhiteWu in https://github.com/cloudwego/volo/pull/72
    • remove useless liftetime paramenter in LoadBalance:: InstanceIter by @ethe in https://github.com/cloudwego/volo/pull/73

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-build-0.2.0...volo-build-0.2.1

    Source code(tar.gz)
    Source code(zip)
  • volo-0.2.1(Oct 26, 2022)

    What's Changed

    • use pilota git source by @LYF1999 in https://github.com/cloudwego/volo/pull/60
    • optimize volo-thrift code, remove unnecessary generic parameters by @LYF1999 in https://github.com/cloudwego/volo/pull/61
    • remove TAIT elision lifetime required after nightly-2022-10-20 by @ethe in https://github.com/cloudwego/volo/pull/63
    • fix: cx is not used in parameter list of the impl Trait type alias by @LYF1999 in https://github.com/cloudwego/volo/pull/64
    • feat: code adjust for Self by @daheige in https://github.com/cloudwego/volo/pull/62
    • feat: upgrade clap to 4 by @PureWhiteWu in https://github.com/cloudwego/volo/pull/65
    • chore: use workspace package and dependencies by @PureWhiteWu in https://github.com/cloudwego/volo/pull/66
    • optimize: volo codegen for thrift by @LYF1999 in https://github.com/cloudwego/volo/pull/67
    • doc: add examples by @PureWhiteWu in https://github.com/cloudwego/volo/pull/69
    • fix: ci rustfmt fail by @PureWhiteWu in https://github.com/cloudwego/volo/pull/70
    • feat: add writev support for volo net conn by @PureWhiteWu in https://github.com/cloudwego/volo/pull/72
    • remove useless liftetime paramenter in LoadBalance:: InstanceIter by @ethe in https://github.com/cloudwego/volo/pull/73

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-0.2.0...volo-0.2.1

    Source code(tar.gz)
    Source code(zip)
  • volo-thrift-0.2.0(Oct 18, 2022)

    What's Changed

    • feat(thrift): support multiplex by @PureWhiteWu in https://github.com/cloudwego/volo/pull/42
    • remove triat Size by @LYF1999 in https://github.com/cloudwego/volo/pull/47
    • feat: public field and function in codec, context and message_wrapper by @Duslia in https://github.com/cloudwego/volo/pull/52
    • fix: write_field_begin args by @LYF1999 in https://github.com/cloudwego/volo/pull/53
    • fix: dep in multiplex by @LYF1999 in https://github.com/cloudwego/volo/pull/59

    New Contributors

    • @Duslia made their first contribution in https://github.com/cloudwego/volo/pull/52

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-thrift-0.1.0...volo-thrift-0.2.0

    Source code(tar.gz)
    Source code(zip)
  • volo-grpc-0.2.0(Oct 18, 2022)

    What's Changed

    • feat: add sd and lb for grpc by @Millione in https://github.com/cloudwego/volo/pull/26
    • make message mod & Status::from_hyper_error public by @ethe in https://github.com/cloudwego/volo/pull/27
    • feat: grpc server add layer_front() by @Millione in https://github.com/cloudwego/volo/pull/30
    • feat: grpc support metainfo by @Millione in https://github.com/cloudwego/volo/pull/32
    • fix: grpc middleware error constraints by @Millione in https://github.com/cloudwego/volo/pull/33
    • feat: volo-grpc status code adjust optimize by @daheige in https://github.com/cloudwego/volo/pull/37
    • feat: code adjust for Response use Self keywords by @daheige in https://github.com/cloudwego/volo/pull/38
    • fix: remove metainfo headers when received by @Millione in https://github.com/cloudwego/volo/pull/41
    • feat(grpc): support uds by @Millione in https://github.com/cloudwego/volo/pull/45
    • fix(grpc): optimize code by @Millione in https://github.com/cloudwego/volo/pull/57

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-grpc-0.1.0...volo-grpc-0.2.0

    Source code(tar.gz)
    Source code(zip)
  • volo-cli-0.2.0(Oct 18, 2022)

    What's Changed

    • remove gat feature by @LYF1999 in https://github.com/cloudwego/volo/pull/56

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-cli-0.1.1...volo-cli-0.2.0

    Source code(tar.gz)
    Source code(zip)
  • volo-build-0.2.0(Oct 18, 2022)

    What's Changed

    • migrate for new pilota ident name by @LYF1999 in https://github.com/cloudwego/volo/pull/39
    • fix: default namespace for thrift by @LYF1999 in https://github.com/cloudwego/volo/pull/44

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-cli-0.1.1...volo-build-0.2.0

    Source code(tar.gz)
    Source code(zip)
  • volo-0.2.0(Oct 18, 2022)

    What's Changed

    • Support Windows by @anwentec in https://github.com/cloudwego/volo/pull/31
    • fix: connect timeout by @LYF1999 in https://github.com/cloudwego/volo/pull/34
    • feat: assert code adjust by @daheige in https://github.com/cloudwego/volo/pull/35
    • feat: code adjust for Response use Self keywords by @daheige in https://github.com/cloudwego/volo/pull/38
    • retry IO error only by @ethe in https://github.com/cloudwego/volo/pull/46
    • remove triat Size by @LYF1999 in https://github.com/cloudwego/volo/pull/47
    • fix: remove unnecessary generic type of MkLbLayer by @LYF1999 in https://github.com/cloudwego/volo/pull/51
    • Update README.md (simple typo fix) by @minghuaw in https://github.com/cloudwego/volo/pull/55
    • remove gat feature by @LYF1999 in https://github.com/cloudwego/volo/pull/56

    New Contributors

    • @anwentec made their first contribution in https://github.com/cloudwego/volo/pull/31
    • @daheige made their first contribution in https://github.com/cloudwego/volo/pull/35
    • @Duslia made their first contribution in https://github.com/cloudwego/volo/pull/52
    • @minghuaw made their first contribution in https://github.com/cloudwego/volo/pull/55

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-cli-0.1.1...volo-0.2.0

    Source code(tar.gz)
    Source code(zip)
  • volo-cli-0.1.1(Sep 1, 2022)

    What's Changed

    • chore: bump volo-cli version by @PureWhiteWu in https://github.com/cloudwego/volo/pull/23

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-cli-0.1.0...volo-cli-0.1.1

    Source code(tar.gz)
    Source code(zip)
  • volo-build-0.1.1(Sep 1, 2022)

    What's Changed

    • fix(volo-build): idl update used wrong index by @PureWhiteWu in https://github.com/cloudwego/volo/pull/22

    Full Changelog: https://github.com/cloudwego/volo/compare/volo-build-0.1.0...volo-build-0.1.1

    Source code(tar.gz)
    Source code(zip)
  • volo-thrift-0.1.0(Aug 23, 2022)

  • volo-macros-0.1.0(Aug 23, 2022)

  • volo-grpc-0.1.0(Aug 23, 2022)

  • volo-cli-0.1.0(Aug 23, 2022)

  • volo-build-0.1.0(Aug 23, 2022)

  • volo-0.1.0(Aug 23, 2022)

Owner
CloudWeGo
A leading practice for building enterprise-class cloud native architectures!
CloudWeGo
High performance I/O framework written by Rust inspired by Netty

Introduction Retty is a High performance I/O framework written by Rust inspired by Netty 基于mio的IO多路复用高并发、高性能网络通信开发框架 Feature Rayon 线程池包装 EventLoop / E

lgphp 9 Dec 25, 2022
Drpc-Correct, high performance, robust, easy use Remote invocation framework

Drpc - Correct, high performance, robust, easy use Remote invocation framework

darkrpc 30 Dec 17, 2022
Fast Discord RPC Client written in Rust

Discord RPC Client Examples Big image, small image, details and one button discordrpc -c 942151169185316874 -d 'untypeable nickname' --button-1-text '

Oskar 10 Jan 1, 2023
Futures implementation for JSON-RPC

futures-jsonrpc Futures + JSON-RPC A lightweight remote procedure call protocol. It is designed to be simple! And, with futures, even more flexible! T

Victor Lopes 12 May 19, 2022
JSON-RPC endpoint proxy that dumps requests/responses for debugging

json_rpc_snoop How to build Ensure you have cargo installed and in your PATH (the easiest way is to visit https://rustup.rs/) make This will create t

null 10 Dec 14, 2022
A simple configuration-based module for inter-network RPC in Holochain hApps.

DNA Auth Resolver A simple configuration-based module for inter-network RPC in Holochain hApps. About Usage In the origin zome In the destination DNA

Shadman Baig 0 Feb 4, 2022
Cloud Native high performance security and privacy SQL proxy.

Fern proxy With the advent of Cloud Native applications, architecture patterns evolved and emerged to take advantage of cloud computing, and build mor

Fern 12 Nov 7, 2022
A high-performance, lightweight, and cross-platform QUIC library

TQUIC English | 中文 TQUIC is a high-performance, lightweight, and cross-platform library for the IETF QUIC protocol. Advantages High performance: TQUIC

Tencent 11 Oct 27, 2023
A high performance/low-overhead OpenMetrics library for Rust

* * * EXPERIMENTAL * * * discreet-metrics A high-performance/low-overhead metrics library aiming to conform with OpenMetrics and to satisfy the follow

null 2 Sep 14, 2022
A library-first, lightweight, high-performance, cloud-native supported API gateway🪐 by RUST

Preview version, will not guarantee the stability of the API! Do NOT use in production environment! A library-first, lightweight, high-performance, cl

Ideal World 4 May 7, 2023
High-performance link shortener

shorty High-performance link shortener written in Rust ?? Hosting In addition to being easy to build from source, shorty is available as a Docker imag

Caleb Denio 49 Jan 3, 2023
A high performance TCP SYN port scanner.

Armada A High-Performance TCP SYN scanner What is Armada? Armada is a high performance TCP SYN scanner. This is equivalent to the type of scanning tha

resync 259 Dec 19, 2022
🚀 10x easier, 🚀 10x cheaper, 🚀 high performance, 🚀 petabyte scale - Elasticsearch/Splunk/Datadog alternative for 🚀 (logs, metrics, traces).

?? 10x easier, ?? 10x cheaper, ?? petabyte scale - Elasticsearch/Splunk/Datadog alternative for ?? (logs, metrics, traces). ZincObserve ZincObserve is

Zinc Labs Inc. 80 Feb 22, 2023
The High Performance Proxy/Load Balancer

Silverwind-The Next Generation High-Performance Proxy English 简体中文 The Silverwind is a high-performance reverse proxy/load balancer. And it could be a

null 112 Apr 7, 2023
A high performance http proxy server & extensions platform & net packet capture tool

CthulhuRs A high performance http proxy server A browser extensions platform A net packet capture tool Demonstration Main features of CthulhuRs Inject

null 5 Apr 30, 2024
Rust library that helps you change the domain of the link to another domain 🦀🔐

Rust library that helps you to change the domain of the link to another domain, the library helps with privacy. It can be used to change the domain of sites that do not care about privacy to another that does.

TheAwiteb 2 Mar 28, 2022
An end-to-end encrypted, anonymous IP-hiding, decentralized, audio/video/file sharing/offline messaging multi-device platform built for both communications and application security and performance.

An end-to-end encrypted, anonymous IP-hiding, decentralized, audio/video/file sharing/offline messaging multi-device platform built for both communications and application security and performance.

null 2 Apr 27, 2022
TCP is so widely used, however QUIC may have a better performance.

TCP is so widely used, however QUIC may have a better performance. For softwares which use protocols built on TCP, this program helps them take FULL advantage of QUIC.

zephyr 15 Jun 10, 2022
Build tool for custom setups of docker containers. Docker compose didn't offer enough, Kubernetes offered too much. Carbon is the in-between.

docker abstraction layer with added flair Fast travel: Tips Contributing How it works Installation Help This tool started its life as a way to make de

akhara 3 Nov 10, 2022