前两年美国航空系统大面积瘫痪的新闻刷了屏——登机系统崩了、值机终端全挂、几百个航班延误甚至取消。后来调查说是一个数据库的配置更新出了问题,没想到牵一发而动全身。这件事让航空电子(航电)系统的安全冗余设计重新进入了公众视野——按理说飞机上的航电系统应该是地球上最可靠的电子系统之一,怎么地面系统一个小故障就能搞出这么大动静?
先搞清楚航电系统到底是什么。航空电子是飞机上所有电子系统的总称,包括飞行控制系统(自动驾仪、电传飞控)、导航系统(GPS、惯性导航、VOR/DME)、通信系统(VHF、HF、卫星通信)、显示系统(座舱里的大屏幕)、监视系统(气象雷达、空中防撞)还有最近几年越来越重要的健康监测系统。一架现代民航客机的航电设备加起来有几吨重,代码量可能上亿行,比一辆特斯拉还复杂。
飞机上的航电系统对可靠性的要求到底有多高?FAA(美国联邦航空局)有个标准叫DO-178C,里面把机载软件分成A、B、C、D四个等级。A级是最严格的,对应"灾难性"故障等级——如果这个软件出bug导致系统失效,后果是飞机坠毁、全员遇难。A级软件的失效率要求是每小时飞行不能超过10^-9次,也就是飞一万亿小时才允许出一次问题,这个苛刻程度简直反人类。
那航电系统怎么做到这么高的可靠性?核心思路就是四个字——安全冗余。飞行控制系统用的是三重冗余架构:三套完全相同的飞控计算机并行运行,每一套都独立采样、独立计算,三套结果做投票表决,少数服从多数。这样就算其中一套出了问题,另外两套还能正常工作,飞机不会失控。波音777的飞控系统就是这种设计,三套计算机甚至用了不同厂商的CPU和不同团队写的软件,目的是避免同一个bug同时干掉三套系统。
通信和导航系统也有类似的备份思路。长距离通信至少有VHF、HF和卫星通信三种手段,GPS失效了还有惯性导航、VOR/DME地面导航可以兜底。飞机上还有一套完全独立的应急电源系统,主电源和APU(辅助动力装置)都挂了,电池组还能撑个半小时,够飞行员紧急迫降。这些冗余设计在正常飞行时看起来很浪费,但关键时刻就是保命的。
但这次出问题的不是飞机上的航电,是地面系统。地面系统跟机载系统的可靠性设计逻辑完全不一样——机载系统追求的是极端可靠性,成本不是第一考量;地面系统追求的是大规模调度效率和成本控制,可靠性当然也重要但优先级没那么极端。航空公司的登机系统、行李处理系统、航班调度系统是一套庞大的分布式IT系统,数据库的一个配置写错了,可能导致数据同步出问题,然后系统级雪崩。这种故障模式在飞机上的航电系统里几乎看不到——机载系统的各个子系统之间是隔离的,一个导航系统挂了不会拖垮飞控系统。
那地面系统怎么避免这种级别的故障?航空业的做法其实很成熟,但执行到位不容易。首先是多活数据中心——核心数据库不能只有一份,至少要两三份同时跑在不同地点,每个数据中心都能独立承载全部业务流量。其次是灰度发布和变更审批——数据库配置这种改动不能直接改生产环境,先在测试环境验证,再灰度到一小部分用户,观察没问题了再全量推广。这次出事就是因为一个配置改了没充分验证,直接影响了全局。
还有个设计原则叫"优雅降级"——当部分系统出问题时,整体性能下降但不能完全停摆。比如值机系统数据库崩了,能不能切到离线模式让柜台手工办理?而不是一崩就全崩。这个原则在航空业其实已经有了——机场的应急广播系统是独立的,航班显示屏挂了广播还能正常工作。但IT系统里做优雅降级比硬件系统难多了,因为IT系统的依赖链太复杂。
对我们做电子和IT系统的人来说,航空电子的安全冗余设计思路其实很有参考价值。哪怕你不是做航空的,做工业控制、医疗设备、服务器集群这些高可靠要求的系统,基本原则是相通的:关键路径要做多路备份、不同备份之间要物理隔离防止共因失效、故障模式要做充分的FMEA(失效模式与影响分析)、软件要分等级管理验证。美国航空系统瘫痪事件的教训不是"航电系统不可靠",而是"地面IT系统在可靠性设计上跟机载系统还有不小差距"——毕竟飞机上天了没法停下来修,而地面系统理论上总该有时间来降级处理。
上一篇:中国拟全面支持半导体产业政策解读:国产芯片的机会与硬骨头
下一篇:没有了