第一个接受安全问题拷问的是运行控制系统,这个系统负责从制定航班计划,到飞行员资源调配,再到飞机起飞降落管控,乃至航班异常处理(备降/返航/调机),是航司生产运行的中枢系统。如此关键的系统,在设计之初,就考虑了平滑上线方案,保持老系统功能可用的条件下,业务分航线逐步切到新系统运行,一旦出现系统故障,可以立刻切回老系统继续管控航班。这套方案最大的挑战在于电报系统,电报系统是航司和空管沟通航班调度的关键通道,每个航司只有一条专线与空管相连,无法做双线热备,是整套系统唯一的SPF(Single Point of Failure)。电报系统通过电报机通信,发送摩斯电码,模拟信号,据说建国前就在使用了,谍战片里那种,这样的古董系统,偶尔出现乱码也情有可原吧,但请谨记,航空业不允许出错,所以这就相当于要求一个Java程序员用C写代码,还不许有bug。解决问题的关键在于回归问题本原,监控系统可用性的最基本策略是心跳检测,通过定时发送测试电报给自己,覆盖了发送和接收双向通道的可用性检测,并结合正常业务电报的收发以及航班疏密,适当减少检测频度以节约成本。如何让新老系统共用一条线路?“Any problem in computer science can be solved with another level of indirection”,封装电报系统,内部分航线调度,隔离新老系统。同时冷备一条网络线路,预防运营商抽风。做足了准备工作,系统终于要上线了,在发布准备会上,业务部门突然提出,分航线迁移业务不可行,因为虽然航班管控是按航线组织的,但飞行员是个共享稀缺资源池,如果按航线拆分,将出现飞行员短缺,而且局方不认可系统新老并行方案,局方要求新系统不允许出现故障。