分布式技术之故障恢复技术

文章目录

    • 分布式故障基础知识
      • 故障类型
      • 故障检测
      • 故障恢复
    • 分布式故障检测原理
    • 故障恢复策略

分布式故障基础知识

在这里插入图片描述

故障类型

  • 在任何一个分布式系统中,故障都是不可避免的。这里的故障,通常包括两类:
    • 一类是物理故障,比如硬盘损坏、断电断网、硬件升级等;
    • 另一类是软件层故障,比如系统存在 Bug 导致系统崩溃、系统负载过高导致系统崩溃等。
  • 在讨论分布式系统故障时,我们通常还会从是否是网络导致的故障的角度来进行故障划分,包括节点故障和网络故障,而这两类故障可能同时包括物理故障和软件层故障。由于软件层故障和具体的程序实现等相关,因此主要由开发者根据自己的实现去解决;而物理故障通常具有很多共同特征。

节点故障

  • 简单地说,节点故障就是单个机器自身出现故障。比如,由机器 A、B,……,Z 构成的分布式集群中,机器 A 自身出现故障,而不是非机器之间的网络连接出现故障,就是节点故障。
    在这里插入图片描述
  • 节点故障有很多种,大体可以分为两类:
    • 一类是硬件故障,比如机器硬盘损坏、内存接触不良等;
    • 另一类是软件故障,比如由于请求过多,超过服务器处理能力上限,导致无法处理,又或者是机器被攻击,导致机器瘫痪等。
  • 节点故障在软件层的表现结果是,该机器无法为用户提供服务。

网络故障

  • 简单地说,网络故障就是分布式集群中,节点之间无法完成通信。比如,由机器 A,B,……,Z 构成的分布式集群中,机器间比如机器 A 和 B 之间无法完成通信,就属于网络故障。
    在这里插入图片描述
  • 网络故障也有很多种,比如路由器故障、DNS 故障、网络线路断裂等。这些物理故障在软件层的表现结果是,机器间无法通信,影响分布式应用正常提供服务。

故障检测

  • 故障检测,就是指通过一定的方式识别或发现故障。就好比,我们把火灾、地震等危险事件看作是故障,采用火灾报警器、地震仪等来检测发现火灾或地震。
  • 如果可以提前检测到事件的发生,就能将损失降到最小。在分布式系统中,检测硬件故障通常比较麻烦,因此会通过查看软件层的表现结果来进行故障检测。比如,网络故障导致服务器之间无法通信,因此就可以通过检测服务器之间是否可以通信(比如,服务器之间心跳包是否可以正常地发送和接收),来检测是否存在网络故障。

故障恢复

  • 故障恢复,就是指修复分布式系统中出现的故障,使系统恢复正常。简单来说,故障恢复就是故障发生之后的弥补方案,可以理解为对故障进行修正或修复,以保证服务正常运行,有点类似“知错能改,善莫大焉”。

分布式故障检测原理

  • 在分布式系统中,常见的故障检测方法是心跳机制。基于心跳进行故障检测的策略主要分为两类,固定心跳检测策略和根据历史心跳信息预测故障策略。

故障恢复策略

  • 关于故障恢复策略,从单节点故障和网络故障两个维度展开。

  • 对于单节点故障问题,往往采取主备策略,即当主节点故障后,从备节点中选出一个作为新的主节点,以继续提供服务。这种备升主的方式比较好理解。

  • 如下图所示,用户 A 访问分布式集群时一直是与 Master 交互的,但当 Master 故障后,其他 Slave 会通过分布式选举算法选出一个新的主节点。假设,从 Slave 1、Slave 2 和 Slave 3 中选举出 Slave 2 作为新的 Master,则 Slave 2 需要承担原来 Master 的职责,继续为用户提供服务,因此当用户 A 再次访问集群时,提供服务的是新选出的 Master,也就是 Slave 2。这就是备升主的过程。
    在这里插入图片描述

  • 从用户 A 的角度来看,并不会感受到服务有什么异常,因为依旧可以正常访问集群。因此,主备策略可以大大提高分布式系统的可用性,在分布式系统中随处可见。比如Redis 集群、ZooKeeper 集群等,都是采用了这种主备策略来做故障恢复。

  • 对于网络故障问题的解决方案,简单来说就是 C、A、P 选择的问题,即在分布式系统的可用性和数据一致性之间做权衡。根据不同的应用场景,选择不同的解决方案。

  • 当分布式系统中出现网络故障时,对于高可用性要求严格的系统,比如要求必须及时响应用户的场景,就需要采用保 AP 弃 C 的策略;对于数据一致性有严格要求的系统,比如银行、金融系统等场景,就需要采用保 CP 弃 A 的策略。

  • 网络故障恢复问题也可以看作数据复制的问题,即网络故障恢复后节点间数据同步的问题。

  • 节点故障和网络故障也有交叉的地方,比如网络故障产生的原因可能是节点故障,即因为节点故障导致节点间无法通信,而不是纯粹的网络链路问题。这种情况有两种可能性,一种是节点临时性故障,即一段时间后就会恢复;一种是节点永久性故障,即节点不会恢复。针对第一种情况,只需等到故障恢复后,数据进行同步即可;第二种情况则需要备升主策略来解决。

知识扩展:固定心跳检测和基于历史心跳信息预测故障的策略,各有什么特点呢?
固定心跳检测的核心是,固定周期 T 秒发送心跳,若连续 k 次未收到心跳回复(时间 T 内),则判断心跳超时的时间为 kT 秒。可以看出,k 和 T 的设置非常重要。比如,对于要求秒级故障检测的场景(时延敏感性场景),则 kT≤1s,因此需要将 T 设置为 ms 级,比如200ms,k 设置为 1000/200=5 次。但,这样一来容易导致误判。因为判断超时的时间设置得太短,很可能是系统做内存回收或系统本身有高任务在运行导致心跳回复延后。对于时延不太敏感的场景,k 或 T 可以设置得大一些,降低误判率,但却会增加发现故障的时间。
φ值故障检测。φ值故障检测是基于心跳间隔符合正态分布的假设,通过对历史心跳数据采样来预测当前心跳是否超时的。也就是说,心跳间隔符合比较平稳或符合规律的情况下,比较适合,但对于具有突发情况或心跳间隔无规律的场景误判率比较高。
在网络状况确定且比较稳定的场景下,大多数系统会采用固定心跳检测策略,因为其可以根据网络状况与业务场景自主设定合适的 k 和 T 值,简单有效;而当网络状况有所变化,且变化有规律的场景,则可以使用φ值故障检测策略。

你知道的越多,你不知道的越多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

异常检测 | Matlab基于GNN图神经网络的数据异常数据检测

异常检测 | Matlab基于GNN图神经网络的数据异常数据检测 目录 异常检测 | Matlab基于GNN图神经网络的数据异常数据检测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 Matlab基于GNN图神经网络的数据异常数据检测。其核心思想是学习一个函数映射。本次使用人类活…

浅谈数字孪生的应用与发展

1、数字孪生概念 ”数字孪生是充分利用物理模型、传感器更新、运行历史等数据,集成多学科、多物理量、多尺度、多概率的仿真过程,在虚拟空间中完成映射,从而反映相对应的实体装备的全生命周期过程。数字孪生是一种超越现实的概念,可以被视为一个或多个重要的、彼此依赖的装…

elasticsearch系列五:集群的备份与恢复

概述 前几篇咱们讲了es的语法、存储的优化、常规运维等等,今天咱们看下如何备份数据和恢复数据。 在传统的关系型数据库中我们有多种备份方式,常见有热备、冷备、全量定时增量备份、通过开发程序备份等等,其实在es中是一样的。 官方建议采用s…

easyrecovery软件2024免费版电脑文件数据恢复工具

easyrecovery怎么恢复文件?大家可以参考下文easyrecovery恢复文件步骤来操作,easyrecovery是一款很强大的数据恢复软件,那么我们该如何使用这款软件呢?一起来了解吧! 一:EasyRecovery Professional 是一款非常不错的数据恢复软件…

在Django5中使用Websocket进行通信

Docker安装Redis docker run --restartalways -p 6379:6379 --name redis -d redis:7.0.12 --requirepass zhangdapeng520安装依赖 参考文档:https://channels.readthedocs.io/en/latest/installation.html pip install "channels[daphne]"展示聊天页…

js 常用方法举例说明50个

js 常用方法举例说明50个 JavaScript是一门广泛应用于Web开发的编程语言,它提供了丰富的方法来操作数据、处理事件、操作DOM等。以下是50个常用的JavaScript方法,每个方法都附有简单的说明和示例: getElementById: 通过元素的ID获…

【链表OJ—链表的回文结构】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

前端基础:Vue搞笑白话文(工作之余瞎写)

1、data:{}与data(){return{}}这两个是个什么鬼? vue实例 new Vue({el:#app,data:{name:李四}}) 组件实例 const aaa Vue.extent({data(){return {name:}} }) 为什么Vue实例可以那么写而组件实例就不行了?原因就是因为在底层原理上,组件…

华为电脑的IP地址:如何找到并管理?

​在现代科技的高速发展中,华为电脑已经成为了人们生活和工作中必不可少的重要工具。然而,对于很多用户来说,IP地址却是一个颇具挑战性的问题。在本文中,我们将会详细探讨华为电脑的IP地址在哪里找,并提供一些建议和技…

k8s集群通过helm部署skywalking

1、安装helm 下载脚本安装 ~# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 ~# chmod 700 get_helm.sh ~# ./get_helm.sh或者下载包进行安装 ~# wget https://get.helm.sh/helm-canary-linux-amd64.tar.gz ~# mv helm …

python使用openpyxl为excel模版填充数据,生成多个Sheet页面

目标:希望根据一个给定的excel模版,生成多个Sheet页面,比如模版: 示例程序 import openpyxlexcel_workbook openpyxl.load_workbook("模版.xlsx") for _i in range(3): # 比如填充3个页面# 复制模版sheet页&#x…

Python单元测试模块Unittest测试代码简单示例

一、测试项目目录结构: 创建一个项目,目录中有Calculator.py与Demo_test_three.py两个源码文件。Calculator.py是被测试的代码,Demo_test_three.py是执行测试的代码。本示例建了两级目录。一级目录名称:my_unittest;二级目录名称…

基于NXP I.MX8 + Codesys的工业软PLC解决方案

全新i.MX 8M Plus是一个混合人工智能SoC,将先进的嵌入式SoC与最新的人工智能/机器学习硬件NPU技术相结合,通过神经网络加速器,为边缘计算提供强大的机器学习能力,是i.MX 8M Plus一个最为突出的优势。WEC-IMX8P核心板特别适合在机器…

SpringBoot+拦截器(Interceptor)

记录一下SpringBoot的拦截器(Interceptor)使用 拦截器(Interceptor)是AOP面向切面编程的思想来实现的,对于只写代码的来说,具体如何实现不需要多关心,只需要关心如何去使用,会用在那些地方。 当http请求进入Springboot应用程序后…

GBASE南大通用-一文读懂如何用Zabbix监控GBase 8c

南大通用GBase 8c是基于openGauss3.0构建的一款多模多态的分布式数据库,支持行存、列存、内存等多种存储模式和单机、主备式、分布式等多种部署形态,具备多模多态、极高性能、极高可用、极致弹性、极致安全等特性,为金融、政务、互联网等行业…

CGAL的主成分分析

此软件包提供了分析二维和三维对象集的功能。它提供了所有有界对象的轴对齐边界框、质心和主成分分析的计算,以及加权点集的重心。请注意,与大多数CGAL软件包不同,该软件包使用近似方法(特别是线性最小二乘拟合)&#…

数据采集遇到验证码校验的一般破解方式简述

背景 百度自动采集是一种高效的数据采集方法,但是在采集过程中经常会遇到图片验证码的问题,从而导致采集失败。那么有没有什么方法可以绕过图片验证呢?本文将为您详细介绍。 解决方案 一、使用OCR技术识别验证码 OCR技术可以识别图片中的…

vue实现滑动切换:切换选项时滑块有滑动过渡的效果

效果图 思路: 1. 高亮的色块是独立的一个盒子,需要插入当前激活的内容用来撑开色块盒子的宽度,这样色块的宽度就会和当前激活的内容宽度一致,色块的字体颜色设置透明即可 2. 色块滑动的距离是读当前激活元素的offsetLeft&#x…

Python进行网页爬取,使用Python中的那些库和工具。

要使用Python进行网页爬取,您可以使用Python中的一些库和工具来实现。 常用的Python库和工具包括: Requests:用于发送HTTP请求和获取网页内容。Beautiful Soup:用于解析HTML和XML文档,并从中提取数据。Scrapy&#x…

【上分日记】377场周赛(图论 + dp)

文章目录 前言正文1.2975. 移除栅栏得到的正方形田地的最大面积2.2976. 转换字符串的最小成本 I3.2977. 转换字符串的最小成本 II 总结后文 前言 本场周赛,后两题都涉及到了图论的最短路径(克鲁斯卡尔算法)的知识,恰巧又没学过&am…