Go-Yo
Go-Yo
> 主要用在什么场景?如果上下游都是brpc,可以用https://github.com/apache/incubator-brpc/blob/master/docs/en/streaming_rpc.md 我们的服务目前基于 brpc(v0.9.5)开发。使用场景为语音识别/合成。 目前服务版本升级,需要同时支持请求/应答双向流。由于要走 NGINX/openresty 反向代理,所以brpc client方式可能不适合。 由于brpc的一些特性十分好用,所以我们想在之前brpc server的基础上进行迭代开发,筛选后可行的方案为HTTP/2(brpc不支持Websocket)。 目前比较符合我们需求的是gRPC streaming RPC(NGINX支持gRPC反向代理)或者HTTP/2 API(考虑过libcurl,但测试发现用libcurl发h2给brpc server会被解析为h1.1)。 关系为:gRPC client->NGINX/openresty->brpc(gRPC) server
> nginx 和 upstream server 之间还不支持grpc和h2c协议吧?貌似只在和客户端方向之间的通信上支持。 [NGINX 在 1.13.10 及以后的版本中已经包含 grpc 相关功能](http://nginx.org/en/docs/http/ngx_http_grpc_module.html#grpc_pass) 在 NGINX 配置文件 location 中,添加 grpc_pass (例如:grpcs://127.0.0.1:443;)即可实现 gRPC 反向代理的配置。目前我们的服务已经对这个 feature 验证并测试通过。
> nginx 和 upstream server 之间还不支持grpc和h2c协议吧?貌似只在和客户端方向之间的通信上支持。 另外,NGINX 已经在较早的版本中支持 h2c 协议,详细信息可以参考[这里](http://nginx.org/en/docs/http/ngx_http_v2_module.html)
> 我理解brpc的定位是服务器之间高效的RPC通信,包括它的设计实现等都能体现这些。@crise1990你想要的其实是客户端和服务器之间的通信(公网),注意这里的客户端是真正意义的移动端。 > > 目前nginx支持的h2,向下游upstream发送的时候,是不是已经修改为http1.1了啊? 嗯对,因为之前服务端的设计需要考虑到移动端通信(公网)的问题,而且服务端并没有支持 Websocket(我之前接手的服务端代码是基于 bRPC 框架实现,对外 API 是走 HTTP/1.1 协议) 而服务间调用,之前是想在不大改服务端框架的情况下,找到一种更适合流式服务设计的方法,所以想问下 bRPC 是否已经集成了 gRPC Streaming 特性 是的,NGINX 即便是目前支持的 h2 或者 h2c,都会在向下游 upstream 发送的时候改为 HTTP/1.x
> > > 我理解brpc的定位是服务器之间高效的RPC通信,包括它的设计实现等都能体现这些。@crise1990你想要的其实是客户端和服务器之间的通信(公网),注意这里的客户端是真正意义的移动端。 > > > 目前nginx支持的h2,向下游upstream发送的时候,是不是已经修改为http1.1了啊? > > > > > > 嗯对,因为之前服务端的设计需要考虑到移动端通信(公网)的问题,而且服务端并没有支持 Websocket(我之前接手的服务端代码是基于 bRPC 框架实现,对外 API 是走 HTTP/1.1 协议) > > 而服务间调用,之前是想在不大改服务端框架的情况下,找到一种更适合流式服务设计的方法,所以想问下 bRPC 是否已经集成了 gRPC Streaming 特性...