grpc-rust icon indicating copy to clipboard operation
grpc-rust copied to clipboard

What's the status of the project ?

Open ngaut opened this issue 7 years ago • 24 comments

Excellent work! @stepancheg

What's the status of the project ? We want to use gRPC in our project TiKV, and we can help you to test the project.

ngaut avatar Oct 03 '16 07:10 ngaut

Thanks for the feedback!

Project is is not ready to use yet. It can do simple requests, but

  • HTTP/2 impementation is very incomplete, in particular WINDOW is not implementeed yet, that seems to be the reason behind bug #13
  • performance optimizations have not beed started yet

I'm going to continue developing it soon, but I think you need to wait a couple of weeks to start evaluating it.

stepancheg avatar Oct 04 '16 02:10 stepancheg

Good to hear that. Thank you for listing the details! Please ping me if it's ready for testing. We will help you to test it as soon as possible.

ngaut avatar Oct 04 '16 06:10 ngaut

I'm also looking forward to this.
:+1:

nstott avatar Oct 15 '16 02:10 nstott

Doing a great job, looking forward to this being ready 👍

Is it usable for development now and perhaps production in a few weeks?

calebmer avatar Oct 27 '16 14:10 calebmer

Status update:

I've implemented "in" window in server. Missing parts are:

  • respect client window in server (out window)
  • implement window in rust client (in and out)

So, I HTTP/2 implementation should be feature complete soon, but honestly I doubt it will be ready for production. Especially if you need high performance.

(gRPC part is easy compared to HTTP/2 implementation).

Good news is that I've started implementing tests which verify rust implementation against go: https://github.com/stepancheg/grpc-rust/tree/master/long-tests It already helped to catch bugs.

stepancheg avatar Oct 31 '16 01:10 stepancheg

Great news! Well done, @stepancheg

ngaut avatar Oct 31 '16 01:10 ngaut

Is it threaded or evented? Do you use mio?

kanekv avatar Nov 02 '16 07:11 kanekv

@Kane-Sendgrid it is evented. It uses tokio-core which in turn uses mio.

stepancheg avatar Nov 03 '16 04:11 stepancheg

"In" window in client is also implemented now.

Now working on "out" window in client and server.

stepancheg avatar Nov 18 '16 02:11 stepancheg

Hi @stepancheg

Thanks for your great work first.

We decide to use gRPC in TiKV in production, see https://github.com/pingcap/tikv/issues/1424. But I still want to know what is the status of the project now? What do we need to pay attention to?

Btw, we want to use gRPC and Restful in one port like etcd, see https://github.com/grpc-ecosystem/grpc-gateway, https://coreos.com/blog/gRPC-protobufs-swagger.html, how can we do this in rust?

siddontang avatar Dec 20 '16 14:12 siddontang

WINDOW_UPDATE is implemented now.

So, features of gRPC and HTTP/2 are implemented, although implementation still contains a lot of undiscovered bugs, and performance needs to be improved.

stepancheg avatar Jan 02 '17 22:01 stepancheg

btw, have you talked to gRPC team? Maybe unlikely in the near future, but I wish this is officially maintained by gRPC someday.

kkimdev avatar Jan 10 '17 02:01 kkimdev

Also, have you considered wrapping grpc.h instead of directly implementing in Rust http://www.grpc.io/grpc/core/grpc_8h.html ?

kkimdev avatar Jan 11 '17 00:01 kkimdev

@stepancheg We're seriously evaluating a move from JSON/HTTP to grpc at re:infer. Our existing production code is Rust & Python, so we would love to help out with the Rust implementation.

I understand your time is limited, and I don't want to put any additional pressure on it, but if you could write up some kind of roadmap and TODOs, we'd be more super happy to contribute. Right now it's pretty hard for us to see what the holes in the implementation are (e.g. I noticed you recently moved to solicit for HTTP/2.0, is that move completed?; what is the status of load balancing and resolution? etc.) Alternatively, is there some IRC channel you hang out on where we could chat at some point?

Thanks so much for all your work (on this and rust-protobuf which we're already using for storage)!

cristicbz avatar Jan 20 '17 10:01 cristicbz

@kkimdev

Also, have you considered wrapping grpc.h instead of directly implementing in Rust http://www.grpc.io/grpc/core/grpc_8h.html ?

Yes, I've considered it, but I decided against it, because:

  • it is easier for users to have pure rust implementation than requiring from them to compile C implementation
  • implementing HTTP/2 from scratch seems to me marginally harder than implementing correct bindings to C implementation. Probably I'm wrong, but that is how it looked to me when I started the implementation. There was a "solicit" implementation of HTTP/2 which I was hoping to use. It turned out that solicit cannot be used directly for async implementation, and I had to copy and rewrite large part of it, but as I said, I didn't expect that at start.
  • eventually Rust community will have decent implementation of HTTP/2 which is the largest part of gRPC implementation, so there will be no need for C implementation

Anyway, if someone wishes to contribute bindings to C implementation to grpc-rust, I will be happy to accept it. I think it would be great I grpc-rust users could have an option to switch implementations preserving the same interface. I would do it myself, but unfortunately now I have no time for that.

stepancheg avatar Jan 21 '17 20:01 stepancheg

Yeah, I would love to have libraries in pure Rust as much as possible. Though, my impression is that Google's grpc implementation is really a non-trivial work that it will be almost impossible for us to catch up the quality and the maintenance work. For example, they have continuous performance benchmarks and monitor regressions and improvement headrooms https://performance-dot-grpc-testing.appspot.com/explore?dashboard=5685265389584384 , and they put good efforts in optimizing their grpc C implementation https://github.com/grpc/grpc/projects/1. So personally, although it sucks to manage C/C++ compiling, I'd still prefer to use their grpc implementation for production use at least today.

I think an option to switch the underlying implementation is a great idea. Btw, Rust's bindgen is able to generate c-binding well, C++ binding needs some work though https://github.com/grpc/grpc/issues/9316 .

kkimdev avatar Jan 21 '17 20:01 kkimdev

cristicbz@

if you could write up some kind of roadmap and TODOs, we'd be more super happy to contribute

I've updated the TODO list and created a could of issues on the github project. You are welcome to grab anything.

I noticed you recently moved to solicit for HTTP/2.0, is that move completed?

Actually it is the opposite. I used solicit and maintained a series of patches againtst it. Solicit project seems to be abandoned, and it is not designed for async processing, so I decided to import part of the project source code into grpc-rust. (I should mention original author somewhere).

what is the status of load balancing and resolution

I'm not sure what you mean, but probably nothing is done in that area.

Alternatively, is there some IRC channel you hang out on where we could chat at some point?

There's a channel on gitter: https://gitter.im/grpc-rust/Lobby for a quick chat.

stepancheg avatar Jan 21 '17 21:01 stepancheg

@stepancheg Thanks for all of that, I won't have time to look at it for a little while, but just wanted to clarify

what is the status of load balancing and resolution

I'm not sure what you mean, but probably nothing is done in that area.

This is the stuff I'm talking about:

https://github.com/grpc/grpc/blob/master/doc/naming.md https://github.com/grpc/grpc/blob/master/doc/load-balancing.md

cristicbz avatar Jan 21 '17 23:01 cristicbz

Created a separate issue for grpc.h, if anything will be done in that area, it should be discussed there.

stepancheg avatar Jan 21 '17 23:01 stepancheg

An issue about load-balancing.

Not sure "naming" is important at this point of grpc-rust development, but if it is, please open an issue.

stepancheg avatar Jan 21 '17 23:01 stepancheg

Hey @stepancheg , wanted to resurrect this thread to ask the same question about the project status? The README says "It basically works, but not suitable for production use.", but I'd really prefer to use this project rather than prost because this project provides protoc plugins that are agnostic to build.rs

mieubrisse avatar Feb 08 '21 21:02 mieubrisse

ask the same question about the project status?

Same as before. Unfortunately, I don't have much time to implement it properly. I tried to keep existing things working, but the amount of work need to do everything properly is huge.

stepancheg avatar Feb 13 '21 21:02 stepancheg

Hi, I came to this project by way of rust-protobuf which I found because I wanted to build rust crates from .proto files with no external toolchain dependencies (ie protoc). I poked around and noticed https://github.com/stepancheg/grpc-rust/issues/139#issuecomment-438497711:

Pure rust grpc codegen is not yet implemented.

"Oh great!", I thought, "then it's on the roadmap". But after poking around, scanning issues, and looking at commit history, I can't tell how active this project is, so I have a few suggestions:

Update the README with development status. No shame in any status (not maintained, maintained with limited time/attention, etc…), and making it clear could help everyone who shows up and may prompt more contributors. Add a roadmap to the README, or use github project features to prioritize the backlog of issues. I would really appreciate a grpc tool that is (a) async and (b) does not rely on non-cargo toolchain (ie protoc), because it feels like that would be a boon to rust grpc support! Let us know how we can help and thanks for a great project.

nathan-at-least avatar Oct 20 '22 23:10 nathan-at-least

I think at the moment the best way to proceed is to implement codec for tower-grpc if you want to use rust-protobuf. This project is far from being production ready, and mostly abandoned. That shouldn't be too hard.

Another option is to patch prost to use protobuf parser from rust-protobuf, that shouldn't be too hard as well, because rust-protobuf has all the machinery to emit data in protobuf format (as protoc does). Basically, protoc but as a library can be built from rust-protobuf.

stepancheg avatar Oct 20 '22 23:10 stepancheg