目录

1. 系统故障模式

2. 系统可靠性模型

3. 可靠性指标与评估

3.1 可靠性指标

3.2 可靠性计算

4. 可靠性设计

4.1 冗余技术

4.2 软件容错

4.3 集群技术

参考


系统可靠性是指系统在规定的时间内及规定的环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。

  • 规定时间

我们一般用系统的执行时间来算,这样比较准确。

  • 规定的条件

规定条件,一般是指软件的运行环境。在不同的环境下,软件的可靠性是不同的。有了明确的环境条件,我们就可以有效的判断软件系统是否失效,责任方是在用户方还是开发方。

  • 所要求的的功能

要求的功能不一样,软件的运行情况会有所区别,其可靠性也不同。所以要准确度量软件系统的准确性,必须先明确它的任务和功能。

1. 系统故障模式

系统故障时只由于部件失效、环境的物理干扰、操作错误、不正确的设计引起的硬件或软件中的错误状态。表现形式有:

永久性、间歇性、瞬时性

对故障的表现进行建模,可以建立4个级别的故障模型:

  • 逻辑级的故障模型:固定性故障、短路故障、开路故障、桥接故障。

  • 数据结构级的故障:故障在数据结构上表现为差错。常见的差错:独立差错、算数差错、单向差错。

  • 软件故障和软件差错:软件故障指软件设计过程造成的与设计说明不一致,软件故障在数据结构或程序输出中的表现成为软件差错。

  • 系统级的故障模型:在系统级上表现为功能错误,即系统输出与系统设计说明的不一致。

2. 系统可靠性模型

与系统故障模型对应的就是系统可靠性模型,常见有3种

  • 时间模型

  • 故障植入模型

  • 数据模型

3. 可靠性指标与评估

3.1 可靠性指标

  • 平均无故障时间

  • 平均故障修复时间

  • 平均故障间隔时间

3.2 可靠性计算

  • 串联系统

假设一个系统由n个子系统组成,当且仅当所有子系统都能正常工作,系统能正常工作。

设系统中各个子系统的可靠性分别用R1,R2,...,Rn表示,各个子系统的失效率分别为L1,L2,L3,...,Ln。

可靠性:R = R1 * R2 * R3 * ... * Rn

失效率:L = L1 + L2 + ... + Ln

  • 并联系统

在一个由 n 个模块(部件)构成的系统中,只要有一个模块可运行, 系统就可运行。

可靠性:R = 1 - (1 - R1)* (1 - R2) * (1 - R3) * ... * (1 - Rn)

  • 模冗余系统

4. 可靠性设计

提高计算机可靠性的技术有避错技术、容错技术 。避错是预防和避免系统在运行中出错,例如:软件测试就是一种避错技术;容错是指系统在某一组件故障存在的情况下不失效,仍能够正常工作的特性,例如:冗余组件设计。

4.1 冗余技术

  • 结构冗余

    • 静态冗余:三模冗余、多模冗余

    • 动态冗余:多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用模块替换它重新运行。

    • 混合冗余:兼有静态冗余和动态冗余的好处。

  • 信息冗余

实现正常功能所需要的信息外,再添加一些信息,以保证运行结果的正确的方法。例如:纠错码。

  • 时间冗余:使用附加一定时间的方法来完成系统功能,这些附加时间主要用在故障检测、复查、故障屏蔽上。

  • 冗余附加技术

为实现上述冗余所需要的资源和技术,包括程序、指令、数据、存放和调用他们的空间和通道等。

系统一旦发生故障,就需要采用某种方法进行恢复。故障的恢复策略一般有前向恢复和后向恢复。前向恢复时指当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况,这需要有错误的详细说明;后向恢复时指系统恢复到前一个正确状态,继续执行,这种方法显然不适合实时处理场合。

4.2 软件容错

软件容错的主要目的是提供足够的冗余信息和算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施。

  • 恢复块程序

恢复块方法是一种动态的故障屏蔽技术 ,采用向后恢复策略 。提供具有相同功能的主块和几个后备块,一个块就是一个执行完整的程序段,主块首先投入运行,结束后进行验证测试,如果没有通过验证测试,系统经现场恢复后由一后备块运行,直到可以耗尽所有后备块。

设计时应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和后备块之间的共性错误降到最低。

  • N版本程序设计

一种静态的故障屏蔽技术 ,采用向前恢复策略 。其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N份程序必须由不同的人独立设计,使用不同的方法,不同的设计语言,不同的开发环境和工具来实现。

  • 防卫式程序设计

一种不采用任何一种传统的容错技术就能实现软件容错的方法,对于程序中存在的错误和不一致性,防卫式程序设计的基本思想是通过在程序中包含错误检查代码错误恢复代码 ,使得一旦发生错误,程序能撤销错误状态,恢复到一个已知的正确状态。其实现策略有错误检测、破坏估计、错误恢复 3个方法。典型的防卫式程序设计:try {} catch {}

  • 其它技术:限流,熔断,服务降级

4.3 集群技术

利用多台服务器,提供更稳定的服务。包括负载均衡集群等。

  • 集群分类

    • 高性能计算科学集群

    • 负载均衡集群

    • 高可用集群

  • 集群硬件配置

    • 镜像服务器双机

    • 双机与磁盘阵列柜

    • 光纤通道双机双控集群系统

参考

  • 《系统架构设计师》

关于作者:

犇叔,浙江大学计算机科学与技术专业,研究生毕业,而立有余。先后在华为、阿里巴巴和字节跳动,从事技术研发工作,资深研发专家。主要研究领域包括虚拟化、分布式技术和存储系统(包括CPU与计算、GPU异构计算、分布式块存储、分布式数据库等领域)、高性能RDMA网络协议和数据中心应用、Linux内核等方向。

专业方向爱好:数学、科学技术应用

关注犇叔,期望为您带来更多科研领域的知识和产业应用。

内容坚持原创,坚持干货有料。坚持长期创作,关注犇叔不迷路

系统可靠性设计(系统架构师)相关推荐

  1. 公开课:如何成为一名高级系统运维工程师(架构师)?

        如何成为一名高级系统运维工程师(架构师)? --老男孩教育赵班长 内容简介: 突破瓶颈,从普通系统运维成长为高级系统工程师.架构师,如何提升,需要掌握哪些技能和知识,公开课上为您解惑. 分享形 ...

  2. 系统分析员、系统架构师、项目经理的区别(转载)

    上周从开发部转来一个刚毕业的小伙子,要我面试一下看看是否适合质量部的相关工作.交谈中,小伙子说大学里已经考过了系统分析员,于是我便问他:"系统分 析员主要做什么?" 小伙子想了一会 ...

  3. java面向对象思维导图_2020年Java进阶架构师的必备思维导图,让你少走弯路!

    架构师是什么?要做什么? 架构师 :是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物.架构师不是一个人,他需要建立高效的体系,带领团队去攻城略地,在规定的时间内完 ...

  4. 资深首席架构师眼中的架构应该是怎样的?【转】

    "架构的视角每个人都不一样,这位在eBay.携程.唯品会等平台型互联网公司都工作过的老司机就以平台架构视角和大家分享架构心得体会.一家之言,欢迎讨论. 本文首发于InfoQ垂直公众号「聊聊架 ...

  5. 程序员职业发展路径图:从菜鸟工程师到高级架构师

    http://www.sohu.com/a/249729952_355140 踽踽独行上下求索总是痛苦,如果有良师益友陪伴点拨必能事半功倍.从新手码农到高级架构师,要经过几步?要多努力,才能成为为人倚 ...

  6. 如何成为云原生时代的卓越架构师?

    简介:"软件开发需要面对本质困难和附属困难.云原生.DevOps大幅降低了附属困难,使得架构师可以全力聚焦于业务复杂性,而DDD恰是管理业务复杂性的有效方法." 本文作者:张刚,阿 ...

  7. 架构师是大忽悠吗?阿里技术大牛告诉你真相!

    来源:阿里云 作者:林昊(花名毕玄),阿里巴巴技术保障部研究员,曾任淘宝网平台架构部架构师.个人的研究方向主要为Java模块化.动态化系统的构建,以及高性能大型分布式Java系统构建,主导阿里数据中心 ...

  8. 如何成为云原生时代的卓越架构师

    简介: "软件开发需要面对本质困难和附属困难.云原生.DevOps大幅降低了附属困难,使得架构师可以全力聚焦于业务复杂性,而DDD恰是管理业务复杂性的有效方法." 本文作者:张刚, ...

  9. python爬虫架构师之路_一位资深 架构师大牛给予Java技术提升的学习路线建议

    一位资深 架构师大牛给予Java技术提升的学习路线建议 对于工作多年的程序员而言,日后的职业发展无非是继续专精技术.转型管理和晋升架构师三种选择. 架构师在一家公司有多重要.优秀架构师需要具备怎样的素 ...

  10. 康威定律,作为架构师还不会灵活运用?

    Soft skills are always hard than hard skills. 软技能比硬技能难. 老板听说最近流行"微服务",问架构师咱们的系统要不要来一套?老板又听 ...

最新文章

  1. 掌握好这23个Linux命令常用命令,让工作效率翻倍
  2. 让Redis突破内存大小的限制
  3. CAS增加免登陆(Remember Me)功能
  4. fmt打印不显示 go_程序猿学Go: 日志系统
  5. 10天学安卓-第九天
  6. 如何在WPF中调用Winform控件
  7. 【NOIP考前模拟赛】纯数学方法推导——旅行者问题
  8. 漫谈单体架构与微服务架构(上):单体架构
  9. python中的匿名函数lambda
  10. linux c 文件拷贝函数,Linux C函数库参考手册
  11. odoo tree视图过滤数据_OpenERP Odoo 搜索视图设置默认过滤按钮(filter button)
  12. asp.net登陆数据库的错误解决
  13. 继续ajax长轮询解决方案--递归
  14. Matlab中Fatal Error On Startup
  15. 学习累了吗,来听听乔布斯的演讲吧!
  16. 第二证券|热门板块再次爆发,早盘主力抢筹超10亿元!
  17. GDOC CEO Musk Shing出席“链接未来”区块链全球人才交流会
  18. 裴波那契数列(循环实现递归)
  19. 端口映射工具之80端口映射软件无公网IP时发布网站应用等应用
  20. 如何用html5制作3d旋转照片集

热门文章

  1. 担心侵权?必备无版权素材网站分享,不用担心视频剪辑缺素材
  2. java关键字的用法_JAVA总结(一)-----关键字分类及使用
  3. IE浏览器主页被篡改为2345,针对一般解决办法无法解决的情况
  4. 学术前沿趋势分析(一)
  5. 几个超好的Spring boot实战项目 (还不赶紧收藏起来)
  6. 【统计学习】5分钟了解假设检验中的第一类错误和第二类错误
  7. Spring源码解析(七)-Bean属性间的循环依赖
  8. Excel行列转置(行数据与列数据的转换)
  9. python - dict.__reversed__() 无效吗?
  10. web自动化之元素定位