brpc icon indicating copy to clipboard operation
brpc copied to clipboard

limiting max bytes in stream comsume queue with the same host socket

Open chenbay opened this issue 3 years ago • 4 comments

  1. Add socket_max_streams_unconsumed_bytes to socket for limiting max bytes in stream comsume queue with the same host socket.
  2. Add min_buffer_size to stream options and remain_buffer_size to message Feedback for stream buffer control.

chenbay avatar Sep 19 '22 09:09 chenbay

@chenbay Could you describe the use case of these new options?

wwbmmm avatar Oct 14 '22 07:10 wwbmmm

@chenbay Could you describe the use case of these new options?

@wwbmmm 两个节点间多个streams protocol通过一个socket连接传输数据,handler里消费速度跟不上,数据堆积在_consumer_queue里,因为streams数量我们使用的没法限制,所以想加到socket上限制。

chenbay avatar Oct 17 '22 06:10 chenbay

@chenbay Could you describe the use case of these new options?

@wwbmmm 两个节点间多个streams protocol通过一个socket连接传输数据,handler里消费速度跟不上,数据堆积在_consumer_queue里,因为streams数量我们使用的没法限制,所以想加到socket上限制。

感觉好像没必要在Socket上限制。如果每个Stream都设置了max_buf_size,当数据堆积在_consumer_queue到一定程度,发送端自然会限流,每个Stream都会被限住,那么Socket上自然就限住了。 而且如果有部分Stream消费地比较快的话,那么这部分Stream的发送端还可以继续发送。但如果在Socket层面限流的话,就会导致这部分Stream也被限制发送了,造成不必要的限制。

wwbmmm avatar Oct 17 '22 08:10 wwbmmm

@chenbay Could you describe the use case of these new options?

@wwbmmm 两个节点间多个streams protocol通过一个socket连接传输数据,handler里消费速度跟不上,数据堆积在_consumer_queue里,因为streams数量我们使用的没法限制,所以想加到socket上限制。

感觉好像没必要在Socket上限制。如果每个Stream都设置了max_buf_size,当数据堆积在_consumer_queue到一定程度,发送端自然会限流,每个Stream都会被限住,那么Socket上自然就限住了。 而且如果有部分Stream消费地比较快的话,那么这部分Stream的发送端还可以继续发送。但如果在Socket层面限流的话,就会导致这部分Stream也被限制发送了,造成不必要的限制。

max_buf_size只能限制单个stream的buffer size,我们两个节点间stream数量可能很多,希望能限制这些streams的总buffer大小,控制内存占用,目前考虑的是通过socket来限制(因为socket就是端到端),socket内的多个streams就让他们自己竞争,有一个min_buf_size也保证了stream不会饿死。

chenbay avatar Oct 17 '22 15:10 chenbay

max_buf_size只能限制单个stream的buffer size,我们两个节点间stream数量可能很多,希望能限制这些streams的总buffer大小,控制内存占用,目前考虑的是通过socket来限制(因为socket就是端到端),socket内的多个streams就让他们自己竞争,有一个min_buf_size也保证了stream不会饿死。

如果是出于控制内存的角度倒是可以理解这个需求 如果是这个需求的话,感觉不需要通过协议传递remain_buffer_size,只需要发送端根据接收端返回的consumed_size,统计一个Socket级别的buf size即可。

wwbmmm avatar Oct 18 '22 06:10 wwbmmm