brpc icon indicating copy to clipboard operation
brpc copied to clipboard

h2c/grpc遗留问题

Open jamesge opened this issue 7 years ago • 10 comments

  • [ ] 明确一些边缘header的设置规则,比如[grpc-]accept-encoding, grpc-timeout
  • [ ] 改进server端判定client端是否支持gzip的方法,client端不一定要设置accept-encoding
  • [x] grpc不支持application/grpc+json
  • [ ] 考虑移除x-bd-error-code x-bd-log-id等字段的可行性。
  • [ ] http/h2c支持snappy压缩。(deflate就没必要支持了)
  • [x] http_verbose排版不对,且不是原子写出,多线程下可能交叉
  • [x] protocol支持传递协议参数
  • [ ] 支持ProgressiveAttachment和ProgressiveReader
  • [x] http2协议名从h2c改为h2,根据ssl状态动态显示为h2c或h2
  • [x] http2/grpc文档
  • [ ] 当h2response的包体长度大于remote window size时,当前的做法是直接返回RST_STREAM,更好的做法是等到收到window_update再发,just like tcp。
  • [x] (Bug)由于连接建立完成后,H2的setting和req是一起发送的,此时client发送一个包体大于默认值的包,会发送失败,那么setting也发不过去,Server也不会发送任何Setting,相当与不会收到任何消息
  • [ ] grpc支持streaming rpc
  • [ ] 文档中说明http2未实现功能。
  • [ ] 支持rpc dump和rpc replay

jamesge avatar Sep 29 '18 02:09 jamesge

赞h2c/grpc的支持, 请问下这里有grpc stream 方式的支持计划么?

ghost avatar Oct 08 '18 06:10 ghost

这里面的ProgressiveReader和ProgressiveAttachment是二进制流层面的,是更加基础的功能,http1也支持(但是不同流要不同连接)。grpc stream要在其之上再封装一层,如果你有需求可以建一个单独的issue。

jamesge avatar Oct 09 '18 03:10 jamesge

@jamesge 我遇到了上面说的 "当h2response的包体长度小于remote window size时,当前的做法是直接返回RST_STREAM,更好的做法是等到收到window_update再发,just like tcp"这个问题, 这个问题可以grpc-java客户端这边通过调大window size来解决吗.

Xavier1994 avatar Mar 27 '19 11:03 Xavier1994

@Xavier1994 调到最大可以让这个问题出现的概率非常小,不过也就失去了流控的作用了,如果你们的场景是客户端流控不太重要,可以调大

zyearn avatar Mar 28 '19 03:03 zyearn

“当h2response的包体长度小于remote window size时,当前的做法是直接返回RST_STREAM,更好的做法是等到收到window_update再发”;是大于吧? 请问大概什么时候修复这个问题?

taozhiwei avatar Aug 11 '19 08:08 taozhiwei

@taozhiwei 目前可以把remote window size调大作为workaround,在你们业务场景会带来什么问题么

zyearn avatar Aug 12 '19 03:08 zyearn

@taozhiwei 目前可以把remote window size调大作为workaround,在你们业务场景会带来什么问题么

我已经修改grpc client调用方式了: ManagedChannel channel = NettyChannelBuilder.forAddress("127.0.0.1",8080).flowControlWindow(2097152).usePlaintext().build();

taozhiwei avatar Aug 13 '19 13:08 taozhiwei

在用 grpc客户端调用brpc的server端, 当流量大的时候, 经常出现如下错误 [ERROR] [external/brpc/src/brpc/policy/http2_rpc_protocol.cpp:718:()] [0] Fail to find stream_id=835341

@jamesge @zyearn 请问是否是需要调整某些参数

Xavier1994 avatar Nov 22 '19 03:11 Xavier1994

@Xavier1994 这个是正常的错误,server因为某些错误关闭一个stream而client还在向这个stream发送数据就会报这个错。看看有没有其他错误日志以及是否把client端的windowsize设置正确

zyearn avatar Nov 22 '19 13:11 zyearn

确实是正常的, 只要客户端端大量超时就会有这个错, 原因是客户端超时的时候会发一个RST去结束这个stream, 但是这个时候这个stream可能正常的数据还在处理, server先处理RST之后就会close掉这个stream, 就会报这个错

Xavier1994 avatar Nov 26 '19 12:11 Xavier1994