首页 > 其他分享 >第八章 分布式系统的麻烦

第八章 分布式系统的麻烦

时间:2024-11-17 21:58:05浏览次数:1  
标签:网络 第八章 故障 麻烦 分布式系统 时钟 节点 延迟

任何可能出错的东西都会出错

故障与部分失效

  • 单机与分布式系统差异:单机软件运行较可预测,硬件正常时操作结果具确定性,遇硬件问题多导致整个系统故障。而分布式系统会面临部分失效情况,具有不确定性,其部分组件可能以不可预知方式损坏,这使分布式系统工作难度增加
  • 不同计算系统的故障处理:高性能计算(HPC)领域的超级计算机多用于科学计算,作业常将计算状态存盘,节点故障时通常停止集群工作负载,重启后从检查点继续,类似将部分失败升级为完全失败来处理。云计算则与多租户数据中心等相关联,节点由商品机器构建,故障率较高,需构建容错机制,允许系统容忍故障节点继续工作,以保障服务不中断。
  • 构建可靠系统的思路:即便组件不可靠,也可通过如纠错码、TCP 协议等机制构建更可靠的系统,但可靠性有限。在分布式系统中要接受部分故障可能,将容错机制融入软件设计,考虑各种错误情况并测试,不能简单假设缺陷罕见。

不可靠的网络

  • 网络问题表现及处理:网络是分布式系统中机器通信的唯一途径,多为异步分组网络,存在请求丢失、排队、远程节点失效或响应延迟等诸多问题,导致难以区分故障原因,通常采用超时机制处理,但超时设置面临长时等待或误判节点失效的两难困境
  • 真实世界网络故障情况:计算机网络建设多年,仍普遍存在故障,如数据中心网络、公有云服务都受其困扰,人为错误是网络中断主因,且网络分区等故障若处理不当会引发严重后果,需明确软件应对方式并测试
  • 检测故障的难点与方法:判断节点是否故障较难,虽存在如操作系统关闭 TCP 连接、脚本通知、查询交换机、路由器回复等可反馈故障信息的情况,但不能完全依赖,多数情况无反馈,需重试并结合超时判定节点状态。
    • 为什么需要自动检测故障节点
      • 负载平衡器需要停止向已死亡的节点转发请求(即从移出轮询列表(out of rotation))。
      • 在单主复制功能的分布式数据库中,如果主库失效,则需要将从库之一升级为新主库
  • 网络拥塞和排队影响:网络数据包延迟的可变性常源于排队,受交换机、操作系统、虚拟机等多因素影响,TCP 执行流量控制也会带来延迟。不同应用对延迟敏感度不同,像视频会议等用 UDP 以牺牲可靠性换低延迟,多数系统需通过实验或借助故障检测器来确定合适的超时时间。
    • 计算机网络上数据包延迟的可变性通常是由于排队
      • 交换机队列填满
      • 目标机器的cpu繁忙
      • 多个虚拟机争抢cpu
      • TCP执行流量控制
    • 怎么解决多租户数据中心的网络拥塞问题
      • 原因:在公共云和多租户数据中心中,资源被许多客户共享:网络链接和交换机,甚至每个机器的网卡和CPU(在虚拟机上运行时
      • 解决办法:通过实验方式选择超时:在一段较长的时期内、在多台机器上测量网络往返时间的分布,以确定延迟的预期变化。然后,考虑到应用程序的特性,可以确定故障检测延迟与过早超时风险之间的适当折衷。
      • 更好的办法:不是固定的常量超时时间,而是连续测量响应时间及其变化来自动调整超时时间
  • 同步网络与异步网络对比:将数据中心网络与传统固定电话网络对比,后者为同步网络,建立电路时分配固定带宽,保证最大端到端延迟固定(称之为有效延迟),而数据中心网络和互联网采用分组交换协议,针对突发流量优化,但存在网络拥塞、排队及无限延迟问题,目前技术难以保障网络延迟或可靠性。
  • 延迟和资源利用关系:延迟变化可视为动态资源分区结果,电话网络线路是静态资源分配,互联网则动态分享带宽,各有利弊,静态分配可实现延迟保证但利用率低、成本高,动态分配利用率高但有可变延迟缺点。

不可靠的时钟

  • 时钟分类及特点:现代计算机有时钟(实时时钟)和单调钟两种时钟,时钟根据日历返回日期时间,常与 NTP 同步但存在跳跃、精度有限等问题,不适用于测量经过时间;单调钟用于测量持续时间,保证一直前进但绝对值无意义,不同计算机的单调钟值不可比,在分布式系统中测量超时等情况较适用。
  • 时钟同步与准确性问题:获取时钟的方法存在诸多不可靠和不准确因素,如石英钟漂移、NTP 同步受网络延迟限制、NTP 服务器可能错误或配置错误、闰秒处理复杂以及虚拟机中时钟虚拟化等问题,使用需要同步时钟的软件时要监控时钟偏移,以防数据丢失等问题。
  • 有序事件的时间戳问题:依赖时钟对多节点事件排序有风险,如最后写入为准(LWW)冲突解决策略,会因时钟不同步或精度问题导致数据库写入丢失、无法区分顺序写入和并发写入等情况,逻辑时钟相对更适合排序事件。
  • 时钟读数的置信区间:时钟读数存在不确定性,应视为一个时间范围,不同时间源对应不同的误差计算方式,但多数系统不公开不确定性,Google 的 TrueTime API 是例外,会报告时钟置信区间,Spanner 利用该区间实现跨数据中心的快照隔离。
  • 暂停进程的影响及应对:分布式系统中,进程可能因垃圾收集、虚拟机挂起恢复、磁盘 I/O、页面调度、信号控制等多种原因长时间暂停,导致依赖同步时钟或假定执行时间短的代码出现问题,且分布式系统无共享内存,传统线程安全工具无法直接适用,不过可通过一些措施缓解垃圾收集暂停的影响

知识、真相与谎言

  • 分布式系统中的不确定性:分布式系统中节点只能通过消息判断其他节点状态,因网络、暂停等问题无法确切知晓真实情况,所以很多分布式算法依赖法定人数投票做决策,如宣告节点死亡等情况,减少对单个节点依赖
  • 领导者与锁定问题及防护措施:在分布式系统实现如数据库分区领导者、资源锁等唯一性控制时,需注意节点自认为的角色不一定获法定人数节点认可,可能因网络或暂停等原因出现问题,像租约过期仍写入导致数据损坏,可通过防护令牌机制,要求写入时附带递增的令牌,资源端检查令牌拒绝旧令牌请求来保障安全。
  • 拜占庭故障及相关情况:拜占庭故障指节点有意 “撒谎” 破坏系统保证,在如航空航天、多组织参与等特定场景需考虑拜占庭容错,但制作拜占庭容错系统协议复杂、成本高,在多数服务器端数据系统不实用,不过可添加一些简单机制防止弱形式的 “撒谎” 行为来提高可靠性。

标签:网络,第八章,故障,麻烦,分布式系统,时钟,节点,延迟
From: https://www.cnblogs.com/Cokiya/p/18551217

相关文章

  • 第八章
    8.4importnumpyasnpfromscipy.integrateimportodeintimportmatplotlib.pyplotaspltdefsystem(z,t):x,y=zdxdt=-x3-ydydt=x-y3return[dxdt,dydt]z0=[1,0.5]t=np.linspace(0,30,1000)sol=odeint(system,z0,t)x_sol=sol[:,0]y_sol=sol[:,1]plt.sub......
  • 第八章课后习题
    习题8.4点击查看代码fromscipy.integrateimportodeintimportnumpyasnpimportmatplotlib.pyplotasplt#设置Matplotlib不使用LaTeXplt.rc('font',size=15)plt.rc('text',usetex=False)#定义微分方程系统dz=lambdaz,t:[-z[0]**3-z[1],z[0]-......
  • 第八章 利用CSS制作导航菜单
    8.1水平顶部导航栏8.1.1简单水平导航栏的设计与实现简单水平导航栏是网页设计中非常常见的元素,它通常位于页面的顶部,并提供主要的网站导航选项。下面我们将详细讲解如何创建一个基本的水平导航栏,包括HTML结构、CSS样式以及鼠标事件处理。1导航栏的创建首先,我们需要使用H......
  • 第八章
    8.4求微分方程组的数值解x'=-x3-y,x(0)=1,y'=x-y3,y(0)=0.5,0<=t<=30,要求画出x(t)和y(t)的解曲线图形,再相平面上画出轨线点击查看代码importmatplotlib.pyplotaspltfromscipy.integrateimportsolve_ivpdefsystem(t,state):x,y=statedxdt=-x**3-y......
  • 第八章 利用CSS制作导航菜单
    8.1水平顶部导航栏8.1.1简单水平导航栏的设计与实现8.1.1.1导航栏的创建<nav>标签是HIML5新增的文档结构标签,用于标记导航栏,以便后续与网站的其他内整合,所以常用<nav>标签在页面上创建导航栏菜单区域。例如,在<nav>的首尾标签之间使用无序列表<u>标签配合列表选项<li>......
  • 第八章 利用CSS制作导航菜单
    8.1水平顶部导航栏8.1.1简单水平导航栏的设计与实现8.1.1.1导航栏的创建8.1.1.2列表样式的设计<!DOCTYPEhtml><html> <head> <metacharset="utf-8"/> <title></title> <style>li{ float:left; } ul{ list-style-type:n......
  • 第八章: 8.10将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(四个角的元
    第八章:8.10将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(四个角的元素的顺序是从左到右,从上到下,依次从小到大存放)思考:1.输入矩阵的值inta[5][5]={0};   inti=0,j=0;   printf("请输入一个5*5的数组:\n");   for(i=0;i<5;......
  • 分布式追踪与告警系统:保障分布式系统稳定运行的利器
    在复杂的分布式系统环境中,分布式追踪与告警系统扮演着至关重要的角色。它们能够帮助开发人员和运维人员快速定位问题、提高系统的可靠性和稳定性。那么,分布式追踪与告警系统的作用是什么?又该如何设计实现呢?一、分布式追踪与告警系统的作用1.快速定位问题在分布式系统中,一个请......
  • 第八章 习题
    1.利用CSS技术,结合链接和列表,设计并实现“山水之间”页面。 <!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title>山水之间</title> <style> .all{ width:900px; } .top{ width:900px; height:100px; b......
  • 第八章 课后练习
    1.利用CSS技术,结合链接和列表,设计并实现“山水之间”页面。<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title>山水之间</title> <style> .all{ width:900px; } .top{ width:900px; height:100px; ba......