Hi folks,

Here is my suggestion to improve Dubbo’s HeartBeat Design.

- The design of the two-way heartbeat is unnecessary, compatible with the 
existing logic, allowing the client to send a one-way heartbeat when the 
connection is idle, and the server periodically detects the connection 
availability. Timed time to ensure: client timeout * 3 ≈ server timeout
- Remove the timing tasks for reconnection and disconnection. Dubbo can judge 
whether the heartbeat request fails to respond. You can learn from the design 
of the improved scheme, maintain a mark of the number of heartbeat failures at 
the connection level, and successfully respond to any failures. Clear the mark; 
continuous heartbeat failure. The client initiates a reconnection. This can 
reduce an unnecessary timer, and any polling method is not elegant.

I've described more details in my blog, about Dubbo's existing heartbeat 
program, its shortcomings, and the advantages of replacing it with a new 
solution, as well as some forward thinking, welcome to discuss.

bolg:https://www.cnkirito.moe/heartbeat-design/ 
<http://www.cnkirito.moe/heartbeat-design/>

---

Hi 乡亲们:

我给现有 Dubbo 的心跳方案改进提了两条建议

- 双向心跳的设计是不必要的,兼容现有的逻辑,可以让客户端在连接空闲时发送单向心跳,服务端定时检测连接可用性。定时时间尽量保证:客户端超时时间 * 3 ≈ 
服务端超时时间
- 去除处理重连和断连的定时任务,Dubbo 
可以判断心跳请求是否响应失败,可以借鉴改进方案的设计,在连接级别维护一个心跳失败次数的标记,任意响应成功,清除标记;连续心跳失败 n 
次,客户端发起重连。这样可以减少一个不必要的定时器,任何轮询的方式,都是不优雅的。

我的博客中描述了更多的细节,关于 Dubbo 现有的心跳方案,它的不足之处,以及替换成新的方案的优势,以及一些展望思考,欢迎讨论。

博客地址:https://www.cnkirito.moe/heartbeat-design/

Reply via email to