可靠性相关概念
可靠度、可用度、可维护度、平均无故障时间、平均故障修复时间、平均故障间隔时间等。
系统的可靠性和可用性:
可靠性:系统在规定的时间及规定的环境下,完成规定功能的能力。可用性:在某个给定时间点上系统能够按照需求执行的概率。可靠性更像是源头,更偏向于过程和手段,可用性是尽头,更偏向结果。
软件与硬件
软件可靠性不等于硬件可靠性。可以从几个维度进行分析。
复杂度: 软件复杂度比硬件高,大部分失效来自软件实现。
物理退化: 硬件失效主要来自物理退化所致,软件不存在物理退化。比如内存或硬盘使用久了可能会损坏。
唯一性:软件是唯一的,每一个Copy的版本都是一样的。而两个硬件不可能完成一致。例如硬盘的烧制都会有细微的变化。
版本更新周期:硬件较慢,软件较快
可靠性的指标
可用性 = 正常运行时间 / (故障时间) x 100%
串联与并联系统
串联系统,总的系统可靠性比单个模块的可靠性更低。 可靠性 = R1(可靠性) x R2(可靠性)
并联系统,总的系统可靠性比单个模块的可靠性高。 可靠性 = 1 - ((1 - R1) x (1 - R2) x( 1 - R3)) 把并联的部分当作一个整体模块,在和其他模块相乘。
混合系统。先计算并联然后在计算串联。
可靠性设计
可靠性的设计可以从几个维度进行考虑。避错技术、容错技术、检错技术、降低复杂度设计。
避错技术: 全面的测试工作将错误提前发现并解决。
容错技术:当错误发生后该如何错误。当错误发生后系统仍可以提供服务。
结构冗余:硬件冗余(多台服务器,多台中间件等)、软件冗余(微服务部署多个等等)
信息冗余:周六19:30~21:30(下午) 。 下午就是信息冗余 前面的时间已经证明时间。
时间冗余:
检错技术: 监控告警,出现错误后通知技术人员,进行人工干预处理错误。
降低复杂度设计: 通过良好的设计、比如模块间的高内聚、低耦合。
N版本程序设计(静态冗余)
与通常软件开发过程不同的是,N版本程序增加了三个新的阶段: 相异成份规范评审、相异性确认、背对背测试。
N版本的同步、N版本之间的通信、表决算法(全等表决、非精确表决、Consmetie表决)、一致比较问题、数据相异性。
恢复块方法(动态冗余)
设计时应保证实现主块和后备块之间的独立性、避免相关错误的产生,使主块和备份块之间的共性错误降到最低程度。
必须保证验证测试程序的正确性。
对比 - N版本 / 恢复块
防卫式程序设计
对于程序中存在的错误和不一致性,通过在程序中包含错误检查代码和错误恢复代码,使得一旦错误发生,程序能撤销错误状态,恢复到一个已知的正确状态中去。
try catch finailly
实现策略:错误检测、破坏估计、错误恢复。
双机容错
双机热备模型 (主系统、备用系统)
双机互备模式(同时提供不同的服务,心不跳则接管)
双机双工模式(同时提供相同的服务,集群的一种)
集群技术
可伸缩性、高可用性、可管理性、高性价比、高透明性