前言

在分布式软件系统中,故障的发生时必可避免的,故障处理时每个系统都要面对的现实问题,但是随着系统越来越复杂,故障的发现、定位、处理难度也就随之增大,从可靠性的角度故障可以分为两个方向:主动预防故障发生、防止故障在系统扩散,本章节主要讲述如何防止故障在系统扩散、故障的发现、定位、止损的处理方法。

初识故障

随着互联网软件体系的不断壮大,发生故障成为不可避免的事情,每一个系统都可能有很多因素组成,这些因素都很有可能引发系统故障,面对这些因素我们要能够识别并将其分类形成故障分类,不同的故障带来的问题复杂性也不同,因此为了便于统一管理和治理,了解其各个故障的特性及故障的传播方式,才能有效阻断故障的传播,将故障缩小最小范围内,一旦形成多种因素,在不可控的情况,那么就很容易引发故障。

故障分类

按故障持续时间分类

按故障的持续时间可分为瞬时故障、间歇故障、永久故障,如下:

  • 瞬时故障:引发这类故障的大多数原因可能是网络中断,服务器内存垃圾回收或者后台线程繁忙停止数据访问操作,其特点是故障时间短,可自行恢复。
  • 间歇故障:引发这类故障可能多数情况下和数据有关,不同用户的数据在某些条件触发了Bug,其特点是偶现,频次性,不可自动恢复,定位比较麻烦。
  • 永久故障:引发这类故障可能是数据存储层磁盘损坏、数据丢失,在某些情况下容易出现丢数据的情况下,现如今数据存储层,多数都是集群模式,数据相互备份,防止数据丢失,其特点单机情况下,容易出现数据丢失,集群模式无该问题,相比之下成本更高了。

按故障发生行为分类

按照故障发生的行为可以分突发性故障和渐发性故障,如下:

  • 突发性故障:出现故障前无明显征兆,或者很难通过行为预测,通常情况下在出现故障前,都多多少少有些征兆,只不过是我们可能并未关注而已,或者未关注到,都是可以找到些许蛛丝马迹的。
  • 渐发性故障:渐发性故障在前期出现征兆,有一定的规律性,可进行状态检测和故障预防,如mysql慢查询,如果不处理或者量大之后可能引发其他致命性问题。

按故障发生原因分类

按照故障发生原因可分为外因故障和内因故障,如下:

  • 外因故障:是因人为操作不当导致的故障,变更是引起故障的主要因素。
  • 内因故障:是因设计方案或者方案实现存在的缺陷Bug和隐患而导致的故障。

按故障部件分类

按照故障部件可分为硬件故障和软件故障,如下:

  • 硬件故障:多指磁盘、CPU、内存等基础设备损坏而导致
  • 软件故障:系统或平台因设计而本身存在缺陷bug或者隐患引起的故障

小结

在当下的分布式系统中,不可能存在无故障的系统,存在故障时不可避免的,因此我们要能够正视和认识故障,了解故障的一切,故障产生的原因、故障的分类、故障的传播途径、方式等等,其实故障的整个生命周期,只有我们对故障的足够的了解,才能通过有效的手段去预防故障的方式,或通过手段降低故障带来的影响和损失。

传播方式

在分布式系统中,如何防止故障传播,首要的是如何确定故障传播的方式,只有明确故障的传播方式,才能够有效的阻断故障传播,例如疫情期间大家都戴口罩,可以有效的防止新型冠状病毒的传播,也是比较有效的抗疫手段,对于戴口罩这种方式,也是通过研究表明,新型冠状病毒传播方式是通过飞沫传播,也就是人与人近距离交流,通过打喷嚏的形式,产生大量的飞沫,对于做稳定性也是如此,了解故障的方式是必须,不可缺少的步骤,故障传播的方式大致的可以概括为几个词分别是多米诺骨牌效应、同质化问题、资源共享。

多米诺骨牌

多米诺骨牌效应是指在一个相互通信的系统中,某个服务产生很小的bug就可能产生一系列的连锁反应,人们把这种现象称为“多米诺骨牌效应”或“多米诺效应”;例如,数据库服务过载出现阻塞,导致依赖数据库的上层服务也出现阻塞,从而导致整个系统的故障。在微服务架构中,很多服务之间都相互依赖,一旦某个服务故障,则可能影响其他的服务,进而导致整个系统都不可用。多米诺骨牌是最终是产生的结果或反应,那么由此能够看出来,服务间的强弱依赖则是该故障的传播方式之一。

同质化问题

同质化问题是更多是指硬件,之前看过一种理论,同一个磁盘阵列中不能购买同一品牌,同一批次的磁盘组成磁盘阵列,从理论上来说,同一批次,又是同一使用环境,一起出问题的概率总要比不同批次的概率大点,通俗的讲就是鸡蛋不能放在同一个篮子,当下云原生时代,除大厂有自建集群,当然有钱的除外,更多都采购云厂商虚拟服务器。例如:在服务部署架构时,一般都采用多服务部署多实例,目的也是防止出现同质化问题

资源共享

资源共享是指一台实例部署多个服务,多个共享实例资源(CPU、磁盘、内存)等,那么可能造成的问题,其中某个服务把资源全部占用,那么其他的服务就没有资源,无法提供服务,必然造成故障。举个生活的例子,在道路交通标志线划分就是机动车、非机动车和行人,提高道路利用率,减少或防止交通事故,对于机动车采取划线的形式,每条车道只能行单车,车道之间有空隙,目的也是将机动车划分形式路线,只要相互不越线形式则不会出现交通事故,一旦越线就出现交通事故,出现资源抢占的情况。在架构设计时,例如数据库连接数,CPU资源,内存资源,文件描述符资源等,一旦某个服务出现抢占的情况,很容易导致业务被卡住,导致系统假死的问题;故在架构设计,提前将资源隔离并拆分,让服务独占该使用资源,不会和其他服务发生抢占的情况。

小结

故障传播方式大致可以分为多米诺骨牌、同质化问题、资源共享这类情况,通过上述的了解,相信你对于故障传播方式能够有清晰的认识,对于不同传播方式也有对应的解决方案,这样才能架构构设计时,才能够将该思想考虑实际架构设计方案中,才能够有效预防故障。

小结

通过本小节的了解,对于故障的分类和故障传播方式能够有清晰的认识,对于故障没有什么好的办法,只能不断的去了解故障特性、发生原因、故障分类及传播方式;这样在实战中才能将所考虑应用架构设计中并实施落地,才可以预防故障的发生,对于故障预防大于一切,其他都是降低故障的影响和损失。

第二十七篇:稳定性之故障处理【初识故障与传播方式】相关推荐

  1. 第二十七篇 导航栏和内容块

    导航栏和内容块 上节课留下了一个小练习: 老师做了一份,但是没有图片图标,所以代码里没有用到 img 标签. 在写之前,我们要分析吧,这个页面,难度只有左侧的导航栏.因为动态! 我们可以用到jQuer ...

  2. 单片机怎么跳出循环_自学单片机第二十七篇:矩阵按键的硬件测试

    我们继续来说矩阵按键的问题,这次是用在实际电路中的.在仿真中我们没有发现问题,但是文章最后我提出了,这个电路在实际应用中一定是存在问题的,那么问题在哪里呢? 这是我们分析的电路. 前几篇我们也对硬件进 ...

  3. 第二十七篇、基于Arduino uno,获取mlx90614非接触式红外测温传感器的温度值——结果导向

    0.结果 说明:先来看看串口调试助手显示的结果,第一个值是空气的温度,第二个值是被测量的物体温度,如果是你想要的,可以接着往下看. 1.外观 说明:虽然mlx90614非接触式红外测温传感器形态各异, ...

  4. Android UI开发第二十七篇——实现左右划出菜单

    年前就想写左右滑动菜单,苦于没有时间,一直拖到现在,这篇代码实现参考了网上流行的SlidingMenu,使用的FrameLayout布局,不是扩展的HorizontalScrollView. 程序中自 ...

  5. “约见”面试官系列之常见面试题第二十七篇之vue-router的重要属性

    export default new Router({mode: 'history', //路由模式,取值为history与hashbase: '/', //打包路径,默认为/,可以修改routes: ...

  6. 第二十七篇、使用MVVM布局页面

    思路:架构的设计模式主要有这么两种 >MVC :这种方式用得很多,也很是常见,不在过多的介绍 >MVVM:使用这种 常常需要导入第三方框架,常见的是响应式框架 >主要讲一下ViewM ...

  7. Python之路(第二十七篇) 面向对象进阶:内置方法、描述符

    一.__call__ 对象后面加括号,触发执行类下面的__call__方法. 创建对象时,对象 = 类名() :而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()( ...

  8. 第二十七篇 网页数据解析三种方法: 正则表达--BeautifulSoup--xpath 满满的干货

    心得: 生活不允许自己懈怠自己,革命尚未成功,同志还须努力,有句话说的好,你尽管努力,剩下的交给天意. 我们从网页上抓取的原始数据大多都是html的数据格式,那如何从html中提取想要的字符串,得需要 ...

  9. 第二十七篇 镜像电流源

    特点: 1.电流源Q2输出的电压范围很宽,可以在VCC和零点几伏之间工作: 2.可以用一个电流Ip来控制电流I: 缺点: 由于Early效应存在,在Q2中一个固定的电流,Vbe会随着集电极电压发生微小 ...

  10. 程序员编程艺术第二十七章:不改变正负数相对顺序重新排列数组(无解?)

    第二十七章:不改变正负数之间相对顺序重新排列数组.时间O(N),空间O(1) 前言 本文开始之前,顺道说个事:CSDN最近开始评选10大博客专栏,投票地址为:http://event.blog.csd ...

最新文章

  1. linux分区模型,linux设备驱动模型详解.pdf
  2. 动态产生一个TextBox,并使输入的文本靠右对齐
  3. matlab将矩阵提取,matlab – 从现有矩阵中提取矩阵
  4. createmutex创建的锁需要手动关闭句柄吗_你知道吗?汽车的儿童锁居然还能发挥这么大的作用!...
  5. bigdecimal判断等于0_vue2.0源码用到的工具函数,12个简易的复用函数,看看有多简单...
  6. 终于来了!Python 编辑神器 Jupyter ,推出首款官方可视化 Debug 工具!
  7. 俞敏洪辟谣“周末暑假不能上课”:人生已经不易 为何还要捅刀
  8. MySQL数据类型中的二进制类型有_在MySQL数据类型中,常用的数据类型有()。A.()数值类型()B.()字符串类型()C.()日期时间类型()D.()二进制类型...
  9. ssm注解配置连接mysql_基于注解和配置类的SSM(Spring+SpringMVC+Mybatis)项目详细配置...
  10. 如何通过父类引用“调用”子类所独有的方法
  11. 淘宝商品评论获取评论
  12. 划分子网(计算机网络)
  13. 腾讯云主机配置tomcat服务器
  14. DDD落地过程中有关DTO的思考
  15. 解决ubuntu下wps卡顿和缺少字体
  16. 在Windows7 系统上部署DNS服务器
  17. December, 14
  18. ***学习笔记教程七:密码恢复
  19. 腾讯邮箱 新浪邮箱 网易 免费企业邮箱 阿里云/万网域名MX解析配置
  20. 11月15日 作业2,黑洞子弹,子弹发射位置朝着准星方向 UE4斯坦福 学习笔记

热门文章

  1. android xp,安卓手机刷xp系统装机版xp
  2. 最新县及县以上行政区划代码(截止2014年10月31日)
  3. 微软、google、IBM的某些招聘试题
  4. iOS开发:唯一标志符
  5. 快手:星星之火,寒冬燎原
  6. [NOI 2010]航空管制
  7. 服务器篇 使用Windows Server 2012R2搭建DHCP服务器-01
  8. excel筛选中文或者筛选数字
  9. 惊艳全网的裸眼3D巨屏,竟是一场视觉骗局?
  10. chrome浏览器更新后重新安装配置chromedriver