作者:Praying


这篇文章准备写一写Rust与gRPC的那些事,gRPC是什么?这里引用gRPC官网的一句介绍,

gRPC is a modern open source high performance RPC framework that can run in any environment.

直白地翻译过来就是可以运行在各种环境的现代开源高性能RPC框架。当然,关于gRPC的性能,似乎在各种RPC框架性能测试中都是被吊打的对象。比如下图中就是百度开源RPC框架brpc中的性能测试:

Rust与gRPC的那些事_生产环境

更多详情请见brpc的benchmark

当然我不是有意在黑gRPC,它还是有很多优点的,比如多语言支持,在gRPC的官网中,就提供了下面这些语言的支持:

Rust与gRPC的那些事_生产环境_02

很显然,这些语言不包括Rust!,既然官方不支持,那么民间有么有实现呢?

一番搜索之后,找到了下面的实现:

​https://github.com/tikv/grpc-rs​

​https://github.com/stepancheg/grpc-rust​

​https://github.com/tower-rs/tower-grpc​

​https://github.com/tokenio/grpc-actix​

​https://github.com/hyperium/tonic​

下面来简单介绍一下这些实现。

1、tikv的grpc-rs实现

关于这个实现的历史其实可以去看下面这篇文章:

TiDB与gRPC的那点事-InfoQwww.infoq.cn


grpc-rs出身名门(pingcap也算是个名门吧),使用的gRPC的C语言版本通过Rust进行binding,不是纯native的rust,已经在TiKV上使用,也是经过生产环境检验过的,目前github还在活跃更新,是个不错的选择。

2. grpc-rust

这个库说实话,不怎么了解,但是在reddit上看到有人介绍,原话如下:

grpc-rust is definitely the most mature and popular, but the API is clunky and un-idiomatic.

就是说这个库比较成熟和流行,但是API似乎设计的不够好,这个是native的rust实现,目前github还在积极更新中。

3. tower-grpc

据说根正苗红,作者里有mio的作者carllerche,hyper的作者seanmonstar,但是已经停更了,最近的一次commit是四个月之前,不建议生产环境使用。

Rust与gRPC的那些事_github_03


4. grpc-actix

应该是基于actix生态实现的,目前也已经停更,不建议使用。

5. tonic

起初只找到了上面的四个库,但是赶脚都不太满意,然后突然想到去看看libra里使用了什么rpc框架,于是去翻了翻libra的仓库,被我发现了tonic。

Rust与gRPC的那些事_生产环境_04

然后去看看一下tonic的github,native的rust实现,async/await支持,star数也是这几个实现中最多的,然后作者也在积极更新中,于是我选择相信libra团队的眼光。

Rust与gRPC的那些事_生产环境_05

暂时就先写这么多吧~,刚开始写文章,写的不好的地方请各位多多批评指教~~