第17章 · 播客 第3集

系统的可靠性分析与设计 · 硬件冗余、TMR 与可靠性措施

🎙️ 本集播客第3集:从容错、自检、冗余四大类讲起,双机热备份的「心跳」与三种工作模式、服务器集群逐一辨析;再上重头戏硬件冗余——三模冗余 TMR 的多数表决器与 0.9 模块代入演算、NMR 推广,最后是信息冗余:海明码 Richard Hamming 1950 年与 CRC 生成多项式,以及冷热备份的静态动态转储。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
🎙️ 第17章播客 第3集
⬇ 下载本集 点击播放
阿明
容错的「配置」讲完了。第 17.6 节提高系统可靠性的措施,开头那两句「掩蔽」和「重组」是什么关系?
小雅
原文原话:防止故障造成系统失效的两种技术是故障掩蔽技术和系统重组技术,故障掩蔽技术是指防止故障造成差错的各种技术,系统重组技术是防止差错导致系统失效的各种技术。注意链条:故障导致差错、差错导致失效,掩蔽卡在第一环「不让故障变成差错」,重组卡在第二环「不让差错变成失效」。这两条是达到容错的两种基本途径,而它们又是建立在资源冗余的基础上的——所以接下来自然进入冗余的具体玩法。17.6 主要讲硬件冗余和信息冗余前两种形式。
阿明
硬件冗余的重头戏,应该就是三模冗余 TMR 了吧?我总听到这个词,但细节说不上来。
小雅
硬件冗余最常用的就是三模冗余,全称 Triple Modular Redundancy,缩写 TMR。工作方式原文说得很完整:三个相同的模块接收三个相同的输入,产生的三个结果送至多数表决器,表决器的输出取决于三个输入的多数。如果有一个故障模块,则另两个正常模块的输出可将故障模块的输出掩蔽,从而不在表决器输出产生差错。
小雅
这就是练习第10题的考点:问多数表决器的作用,正确选项是「取三个模块输出的多数作为输出,掩蔽单个故障模块」;A 选项「检测模块故障并报警」是拿自检的概念来钓——TMR 的表决器不做检测报警,它是把故障直接「盖住」,系统根本不知道也不需要知道哪个模块坏了,这两个动词「掩蔽」对「检测」,一字之差就是答案。B 负载均衡、D 修复失效模块就更不沾边,负载均衡是双机双工的事,TMR 也修不了任何东西。
阿明
「掩蔽」不是「检测」,也不是「修复」。那 TMR 的可靠度怎么算?原文有公式吗?
小雅
有,而且能从我们上集的并联公式自己推出来。TMR 系统三个模块,只要两个以上正常、表决结果就正确,等价于「三取二」:系统可靠度等于 Rm 的 3 次方,加 3 乘 Rm 的平方乘 1 减 Rm——第一项是三个全好,第二项是恰好坏一个,坏哪一个有三种选法,所以乘 3。由于每个模块的可靠度 Rm 等于 e 的负 λt 次方,整个式子还能化简,但考试你就记这个组合式。代入数字算一遍:设每个模块可靠度 0.9。第一步,三个全好:0.9 的 3 次方等于 0.729。
小雅
第二步,恰好坏一个:Rm 平方是 0.9 乘 0.9 等于 0.81,1 减 Rm 等于 0.1,所以一项是 0.81 乘 0.1 等于 0.081,乘上选法 3 得 0.243。第三步,相加:0.729 加 0.243 等于 0.972。对比一下:单个模块 0.9,三模冗余做到 0.972,这就是冗余的收益;但你也能看出模式——它比三并联的 0.999 低,因为表决器本身还可能坏,而且坏两个模块系统就失效了。
阿明
等下,0.972 这个数我好像在哪儿见过……而且你刚说表决器可能坏,那表决器坏了不就全完了?
小雅
问到点子上了。完整公式里其实还乘了表决器可靠度 Rv,Rv 和 Rm 分别表示表决器和模块的可靠度,假设各模块可靠度相同——刚才 0.972 是简化成表决器完美的情况。原文专门交代了表决器这个软肋:上面的分析没有考虑表决的可靠性,为了能够容忍表决器的故障,可以对表决器也采用 3 倍冗余。一般说来,对于一个由若干模块构成的系统,可以对每个模块分别实施 TMR 技术。
小雅
原文还说了修复的价值:在无修复的屏蔽冗余系统中,当屏蔽冗余因模块中的故障而耗尽时,再发生模块故障将导致输出的错误;假若模块具有修复能力,则系统的可靠性将会大大提高。带修复的 TMR 要用马尔柯夫模型算,方法是上集提过的状态转移方程,结论记住方向就行:修复让 TMR 更可靠,而且可用度等于 P0 加 P1,对 TMR 函数积分还能得出平均无故障时间 MTTF。
阿明
那 NMR 呢?名字里带个 N,是随便几个模块都行吗?
小雅
不行,原文把话说死了:TMR 的推广是 N 模冗余,N-Modular Redundancy,缩写 NMR,与三模冗余原理相同,但采用 N 个相同的模块,N 大于 3,且 N 为奇数,以方便进行多数表决。两个条件缺一不可:大于 3、必须是奇数。为什么奇数?多数表决需要「多数」明确无争议,偶数个模块可能打成平票,比如四个模块两票对两票,表决器没法裁决。练习第10题的解析也点了这句:NMR 是 TMR 的推广,N 大于 3 且为奇数。问「NMR 中 N 的取值」,选项要是有「任意整数」「大于 3 的偶数」这种,直接排除。
小雅
硬件加完了,第二路冗余是信息冗余。原文定义:信息冗余是指通过在数据中附加冗余的信息以达到故障检测、故障掩蔽或容错的目的,应用最广泛的是海明校验码、奇偶校验码。注意它跟硬件冗余的分工:硬件冗余加设备,信息冗余加数据位,但目标三个词一样——检测、掩蔽、容错。
阿明
海明码这块,我教材上抄了一堆「码距」「重叠奇偶校验」,考试到底考什么?
小雅
先钉一个纯记忆点,练习第11题就考它:海明校验码是由 Richard Hamming 于 1950 年提出的,目前仍然被广泛采用的一种很有效的校验方法。人名 Richard Hamming、年份 1950,选项里 Shooman 1972、Nelson 1973、Mills 1972 都是本章出现过的真专家——Shooman 是时间模型、可靠性增长模型,Nelson 是数据模型,Mills 是故障植入模型——出题人就把他们的年份挪过来配错对。这道题的防御法:把四个名字各自挂在自家模型上,Hamming 挂海明码 1950,别人来串门就抓。
小雅
然后是它能干什么、怎么干的。能力原文一句话:只要增加少数几个校验位,就能检测出二位同时出错,亦能检测出一位出错并能自动恢复该出错位的正确值,后者称为自动纠错。注意量词:检测两位、纠正一位。实现原理:在 k 个数据位之外加上 r 个校验位,从而形成一个 k 加 r 位的新的码字,使新的码字的码距比较均匀地拉大;把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。
阿明
「检测二位、纠正一位」。那纠错具体怎么定位到是哪一位?
小雅
原文用「重叠奇偶校验」解释:将原始数据位分成若干个重叠的组,每组设一位奇偶校验位,由于组间有重叠,每位原始数据从属于多于一个组,而且每位原始数据的从属关系是不一样的,纠错时根据哪些组的奇偶校验位出错,就可以唯一地确定是哪一位数据出错,将该位取反就完成了纠错。「取反」就是纠错的全部动作。海明码还是一种特殊的 n,k 线性纠错码,可以借助奇偶校验矩阵来描述,(n,k) 线性码的校验矩阵是一个 n 减 k 行乘 n 列的矩阵,元素是 0 和 1,每一列与码字中的一个位相对应,每一行与校验位相对应。
小雅
推导使用长度 m 位的码字的海明码四步也要过一遍:一,确定最小的校验位数 k,每个校验位符合不同的奇偶测试规定;二,原有信息和 k 个校验位一起编成长为 m 加 k 位的新码字,选择 k 个校验位以满足必要的奇偶条件;三,对所接收的信息作所需的 k 个奇偶检查;四,如果所有的奇偶检查结果均正确,则认为信息无错误,如果发现有一位或多位错了,则错误的位由这些检查的结果来唯一地确定。
阿明
还有个 CRC 循环冗余校验码,跟海明码什么关系?我只记得要拿个多项式做除法。
小雅
同属信息冗余的校验码,原文说 CRC 也广泛应用于移动通信和磁盘数据存储中。基本原理:在 K 位信息码后再添加 R 位的校验码,整个编码长度为 N 位,因此这种编码又称 N,K 码。对于一个给定的 N,K 码,可以证明存在一个最高次幂为 N 减 K 等于 R 的多项式 G(x),根据 G(x) 可以生成 R 位的校验码,G(x) 叫作这个 CRC 码的生成多项式。
小雅
生成过程记四步:一,将 x 的最高幂次为 R 的生成多项式 G(x) 转换成对应的 R 加 1 位二进制数;二,将信息码左移 R 位,相当于信息多项式 C(x) 乘 2 的 R 次方;三,用生成多项式对信息码做模 2 除,得到 R 位的余数;四,将余数拼到信息码左移后空出的位置,得到完整的 CRC 码。一句话概括:左移、模 2 除、取余数、拼上去。