为什么分布式软件一般都使用心跳包而不适用 tcp 的保活机制呢

2020-03-31 17:49:04 +08:00
 jdz
6703 次点击
所在节点    程序员
39 条回复
guyeu
2020-03-31 18:31:52 +08:00
1. 默认配置和分布式服务的需求差异比较大;
2. 调优难,往往需要修改操作系统参数,而这会影响一堆服务;
3. 扩展难度大,比如很多分布式服务的心跳包会带数据;
4. 只能检测连接的活性,而无法检测服务的可用性;
5. 处理事件不方便,很多语言的标准库提供的 API 很难用;
6. 没有收益,TCP 自带的保活相比应用层自己实现,没有效率优势;
123444a
2020-03-31 19:29:02 +08:00
tcp??究竟 tcp 包活英文是什么,现行互联网有这个东西么
rdZZZ
2020-03-31 21:39:53 +08:00
有没有保熟机制 🐶
andj4cn
2020-03-31 21:43:47 +08:00
推荐一篇上古论文,end to end arguments in system design 。简单来说就是端到端通信可靠性只能靠应用层保证,具体可以看论文的阐述。
hallDrawnel
2020-03-31 21:44:22 +08:00
一个是应用层可用,一个是网络层可用,两者不等价。
littlewing
2020-03-31 21:44:43 +08:00
1. 心跳包可能还顺带了一些信息
2. tcp 连接可用并代表着应用可用
andj4cn
2020-03-31 21:47:04 +08:00
@andj4cn 底层不一定能完整定义应用层所要求的可靠性
djoiwhud
2020-03-31 21:54:25 +08:00
就一点,tcp 协议自身的心跳机制是有迟滞的,而且应用层无法自己控制和确认。
opengps
2020-03-31 21:55:57 +08:00
我做过 socket 开发,我清除心跳的可靠性更高,更实时。
tcp 某些默认检测机制时间太久,不适合用于存活检测
23571113
2020-03-31 22:02:50 +08:00
实际上很多性能要求很高的分布式系统的共识算法都是自己针对特定情况实现了网络层, 比如 polarfs 利用 dpdk 技术完全没有走内核网络栈, 还有 2019OSDI best paper 的那个 eRPC 就是针对机房优化过的 UDP.
qiayue
2020-03-31 22:09:02 +08:00
其中一个原因:
一个连接如果长时间没有数据传输,运营商会切断这个连接
cabing
2020-03-31 22:11:14 +08:00
tcp 协议是操作系统内核里面的黑盒,心跳包可控。
zmxnv123
2020-04-01 00:20:56 +08:00
Tcp 保活时间参数是在内核设置的,作用于整个物理机。
sampeng
2020-04-01 00:31:54 +08:00
自己做过才知道相信自己比相信外部要强一百倍
jinsongzhao
2020-04-01 00:37:44 +08:00
具体写过就知道,根本没法和多播 UDP 比。TCP 是有连接的,只有被连接的服务器知道客户机器是否活着,被连服务器死了就玩完了。TCP 建立连接过程慢,开销大,不能快速知道其他机器是否存活,光这几点就足够了。而基于多播的 UDP,参与监听的服务器就能知道是否存活,客户机不需要到处找服务器建立连接,判断存活速度可以根据 UDP 包连续间隔。
passerbytiny
2020-04-01 01:24:51 +08:00
tcp 没有保活机制,只有超时自动断线,而这个超时间隔是两小时。光靠 tcp,你连上之后拔网线,两端都要在两小时之后才知道中间挂了。
b00tyhunt3r
2020-04-01 02:16:01 +08:00
@123444a
keep alive?
pigmen
2020-04-01 07:47:10 +08:00
不懂就问 能不能建立一个 tcp 链接 通信,双方就类似 ping pong 的形式保活
CallMeReznov
2020-04-01 08:06:22 +08:00
可能业务死了活了死了活了都几轮了. TCP 都没反应过来.
而且在高负载情况的下可能是雪上加霜.
hand515
2020-04-01 08:53:26 +08:00
@pigmen #18 可以啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/658025

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX