Huixxi commented on issue #1662:
URL: https://github.com/apache/brpc/issues/1662#issuecomment-1439526782

   > > > 
   > > 
   > > 
   > > 哦哦是这样,现在的实现逻辑是,先停止当前connfd接受新的请求,然后处理存量回包,再进行connfd的迁移
   > 
   > 这样,对于处理存量回包这个过程中,发过来的请求不友好吧。如果存量的请求处理时间比较长,没有接受的那些请求可能都超时了。
   > 
   > 将回包也迁移的方案可行吗?
   > 
   > 1. 旧进程先停止当前connfd接受新的请求,然后迁移connfd,而存量回包并行处理。
   > 2. 新进程收到connfd后,通知旧进程将回包迁移过来,同时新进程接收新的请求并处理,但是暂时不写回包。
   > 3. 
旧进程收到通知后,置一个标志位flag(=true),表示connfd已经迁移。如果此时在写回包,看到了flag被置为true,则将当前队头的回包写完,后面的回包或者后续调Write的回包会被迁移到新进程写。
   > 4. 
新进程收到迁移的第一个回包,则开始允许写回包,接收到的新请求的回包也可以开始写了。为了避免旧进程刚好没有回包或者队头只有一个回包,没有要迁移到新进程的回包,导致新进程迟迟不能写回包的问题,旧进程收到通知后,写一个空包,用于触发新进程写回包。
   >    这个方案会导致迁移过程中回包的顺序被打乱,对于有时序要求的业务,不适用。
   
   超时的情况可能存在,可以依赖上层业务重试策略缓解?回包迁移的方案可以在真正设计的时候在详细设计一下,但是实现起来可能会很复杂。。


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to