admin管理员组文章数量:1027740
分布式系统不可靠的网络问题
在之前我们讲述了分布式系统会出现partial failures主要原因是部分组件或者服务发生故障faults,其实还存在另一个故障,即网络故障.今天我们来聊下分布式系统不可靠的网络问题.
不可靠的网络问题分类
在前面我们讲述了分布式系统模型,其中已经对响应结果做出了分析,这里我借助《设计数据密集系统》一张图来说明下, 总结起来主要有三个方面:
- 请求/响应丢失: 数据包可能因物理链路故障(如光缆被挖断)或协议层错误(如TCP重传超限)彻底丢失.
- 乱序与延迟:异步网络无法保证数据包按发送顺序到达,且延迟受拥塞控制算法(如TCP BBR)、路由跳数影响,形成长尾延迟(如99分位延迟可能达到平均值的10倍以上)
- 节点失效的模糊性:无法区分网络中断与节点宕机(例如,对端进程可能因网络问题而暂时无响应而被认为节点宕机)
关于第一点相信很容易理解, 一般就是硬件故障导致的; 这里主要讲述下为什么网络数据包存在乱序以及网络延迟为什么是不可靠的, 最后我们再分析下分布式系统两大类集群存在服务节点失效判断的模糊性.
同步网络与异步网络
同步网络与有界延迟
什么是同步网络,其实在我们传统的电话网络中就是采用同步网络实现的.同步网络就是在通话双方之间的整个路径上会为通话分配固定的、有保障的网络带宽流量,这条电路会一直保持到通话结束,其网络拓扑结构为星型结构,其主要特征是流量路径固定,以南北流量为准,同时也存在单点故障问题,如下:
这里的同步网络就好比我们乘坐广州到北京高铁, 单个铁轨上只能容纳一列高铁,通话两端就好比从广州到北京, 那么这这个过程中我们的路程固定, 速率也是固定的, 那么到达目的地的时间一般而言也是固定, 至少我们可预测达到目的地时间点.
那么将上述的例子映射到我们同步网络环境中,同步网络是双向的,即双轨,广州到北京以及北京广州的轨道.从网络拓扑结构中可以看出,每个电路都是提前预留对应传输数据的大小,并且由于不存在排队现象,网络延迟从端到端是固定的,我们把这种情况称之为有界延迟.
异步网络与无界延迟
相比同步网络,我们的数据中心网络以及移动电话则是异步网络,异步网络好比我们的高速公路, 在同一个高速公路上会存在大小不同的车型, 就好比数据包, 同时在同一个高速公路上也存在车辆临时换道插队现象,关键是会存在堵车,尤其是临近节假日高峰时段,原本4小时达到目的地由于中间堵车导致我们10小时甚至更久的时间达到,即网络端到端的延迟是不固定的, 因为存在网络拥塞导致数据包要进行排队等待现象,对于产生的延迟具备不可预测性,我们称之为无界延迟.
那为什么异步网络会乱序呢? 在我们的异步网络中是采用分组交换的传输机制,也就是说我们会把网络的数据包拆分不同的小包通过数据传输进行传送,那么这些不同的数据包就好比我们高速公路上不同大小车型的车辆运行在同一个高速公路通道上,对于数据包的传输我们无法保证其顺序,由于乱序的存在会导致数据不完整,因此一般为了保证数据的完整性,我们一般会在数据包会增加对应的头尾标记,这样当数据包从一端传送到另一端的时候也能够保证其数据的完整性.其实就是一个数据拆包与粘包的机制.
对于异步网络的拓扑结构, 主要有两种, 即Fat Tree结构以及Spine-Leaf结构,如下:
关于同步与异步网络总结如下:
节点失效的模糊性
既然我们已经知道分布式系统中网络延迟具备不可靠性, 那么由于这个原因也给分布式系统额外增加了新的复杂度,即节点失效的模糊性.
节点失效的模糊性主要是体现在分布式系统中针对Fault Tolerance中节点故障自动检测切换过程,主要分为两类,一是计算集群故障检测; 二是存储集群故障检测.
计算集群
针对计算集群的自动检测如下, 负载均衡器需要停止向已死机的节点Node3(即停止让其参与请求分配)发送请求。
存储集群
存储集群, 比如主从架构中, 如果Master节点发生故障, 那么就需要从其中一个Slave节点进行选举提升为新的Master节点.
但是在上述故障检测过程中, 由于网络的存在, 我们必须要考虑到实际不可预测的因素, 比如上述的两者模型中Node3节点/Master节点真的是故障还是由于网络问题而被判断为故障呢?
可能会想到一个可行的解决方案, 那么就是在上述故障检测中增加超时机制, 如果超过指定的时间我们再进行重试, 若无响应则我们判断为对应的节点故障, 然后再采取故障容错机制或者重新选举新Master节点方式来避免分布式系统产生更多连锁的Failures.
但是超时时间要设置多长呢? 如果设置的时间过长, 那么会导致分布式系统出现的Failures时间更长, 如果时间过短, 那么就会产生误判, 比如上述计算集群中由于误判导致Node1以及Node2节点流量突增而过载产生级联故障. 那么我们有办法预测我们的网络延迟以及请求处理的时间吗? 假如往返的网络延迟均为d, 请求处理时间为r, 那么我们设置超时间为2d + r则是一个合理的超时时间, 但是实际运行环境中并不具备.因为网络延迟不确定,因此我们设置延迟超时其实是与资源利用的Trade-Off.
总结
在采用数据中心的异步网络组成的分布式系统中, 基于分组交换技术以及网络阻塞排队导致我们分布式系统在网络超时设置上存在很多的不确定性, 对于超时的时间设置反而需要我们在延迟与资源利用率之间进行Trade-Off.
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-20,如有侵权请联系 cloudcommunity@tencent 删除网络异步分布式系统集群同步分布式系统不可靠的网络问题
在之前我们讲述了分布式系统会出现partial failures主要原因是部分组件或者服务发生故障faults,其实还存在另一个故障,即网络故障.今天我们来聊下分布式系统不可靠的网络问题.
不可靠的网络问题分类
在前面我们讲述了分布式系统模型,其中已经对响应结果做出了分析,这里我借助《设计数据密集系统》一张图来说明下, 总结起来主要有三个方面:
- 请求/响应丢失: 数据包可能因物理链路故障(如光缆被挖断)或协议层错误(如TCP重传超限)彻底丢失.
- 乱序与延迟:异步网络无法保证数据包按发送顺序到达,且延迟受拥塞控制算法(如TCP BBR)、路由跳数影响,形成长尾延迟(如99分位延迟可能达到平均值的10倍以上)
- 节点失效的模糊性:无法区分网络中断与节点宕机(例如,对端进程可能因网络问题而暂时无响应而被认为节点宕机)
关于第一点相信很容易理解, 一般就是硬件故障导致的; 这里主要讲述下为什么网络数据包存在乱序以及网络延迟为什么是不可靠的, 最后我们再分析下分布式系统两大类集群存在服务节点失效判断的模糊性.
同步网络与异步网络
同步网络与有界延迟
什么是同步网络,其实在我们传统的电话网络中就是采用同步网络实现的.同步网络就是在通话双方之间的整个路径上会为通话分配固定的、有保障的网络带宽流量,这条电路会一直保持到通话结束,其网络拓扑结构为星型结构,其主要特征是流量路径固定,以南北流量为准,同时也存在单点故障问题,如下:
这里的同步网络就好比我们乘坐广州到北京高铁, 单个铁轨上只能容纳一列高铁,通话两端就好比从广州到北京, 那么这这个过程中我们的路程固定, 速率也是固定的, 那么到达目的地的时间一般而言也是固定, 至少我们可预测达到目的地时间点.
那么将上述的例子映射到我们同步网络环境中,同步网络是双向的,即双轨,广州到北京以及北京广州的轨道.从网络拓扑结构中可以看出,每个电路都是提前预留对应传输数据的大小,并且由于不存在排队现象,网络延迟从端到端是固定的,我们把这种情况称之为有界延迟.
异步网络与无界延迟
相比同步网络,我们的数据中心网络以及移动电话则是异步网络,异步网络好比我们的高速公路, 在同一个高速公路上会存在大小不同的车型, 就好比数据包, 同时在同一个高速公路上也存在车辆临时换道插队现象,关键是会存在堵车,尤其是临近节假日高峰时段,原本4小时达到目的地由于中间堵车导致我们10小时甚至更久的时间达到,即网络端到端的延迟是不固定的, 因为存在网络拥塞导致数据包要进行排队等待现象,对于产生的延迟具备不可预测性,我们称之为无界延迟.
那为什么异步网络会乱序呢? 在我们的异步网络中是采用分组交换的传输机制,也就是说我们会把网络的数据包拆分不同的小包通过数据传输进行传送,那么这些不同的数据包就好比我们高速公路上不同大小车型的车辆运行在同一个高速公路通道上,对于数据包的传输我们无法保证其顺序,由于乱序的存在会导致数据不完整,因此一般为了保证数据的完整性,我们一般会在数据包会增加对应的头尾标记,这样当数据包从一端传送到另一端的时候也能够保证其数据的完整性.其实就是一个数据拆包与粘包的机制.
对于异步网络的拓扑结构, 主要有两种, 即Fat Tree结构以及Spine-Leaf结构,如下:
关于同步与异步网络总结如下:
节点失效的模糊性
既然我们已经知道分布式系统中网络延迟具备不可靠性, 那么由于这个原因也给分布式系统额外增加了新的复杂度,即节点失效的模糊性.
节点失效的模糊性主要是体现在分布式系统中针对Fault Tolerance中节点故障自动检测切换过程,主要分为两类,一是计算集群故障检测; 二是存储集群故障检测.
计算集群
针对计算集群的自动检测如下, 负载均衡器需要停止向已死机的节点Node3(即停止让其参与请求分配)发送请求。
存储集群
存储集群, 比如主从架构中, 如果Master节点发生故障, 那么就需要从其中一个Slave节点进行选举提升为新的Master节点.
但是在上述故障检测过程中, 由于网络的存在, 我们必须要考虑到实际不可预测的因素, 比如上述的两者模型中Node3节点/Master节点真的是故障还是由于网络问题而被判断为故障呢?
可能会想到一个可行的解决方案, 那么就是在上述故障检测中增加超时机制, 如果超过指定的时间我们再进行重试, 若无响应则我们判断为对应的节点故障, 然后再采取故障容错机制或者重新选举新Master节点方式来避免分布式系统产生更多连锁的Failures.
但是超时时间要设置多长呢? 如果设置的时间过长, 那么会导致分布式系统出现的Failures时间更长, 如果时间过短, 那么就会产生误判, 比如上述计算集群中由于误判导致Node1以及Node2节点流量突增而过载产生级联故障. 那么我们有办法预测我们的网络延迟以及请求处理的时间吗? 假如往返的网络延迟均为d, 请求处理时间为r, 那么我们设置超时间为2d + r则是一个合理的超时时间, 但是实际运行环境中并不具备.因为网络延迟不确定,因此我们设置延迟超时其实是与资源利用的Trade-Off.
总结
在采用数据中心的异步网络组成的分布式系统中, 基于分组交换技术以及网络阻塞排队导致我们分布式系统在网络超时设置上存在很多的不确定性, 对于超时的时间设置反而需要我们在延迟与资源利用率之间进行Trade-Off.
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-20,如有侵权请联系 cloudcommunity@tencent 删除网络异步分布式系统集群同步本文标签: 分布式系统不可靠的网络问题
版权声明:本文标题:分布式系统不可靠的网络问题 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1747438242a2166507.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论