NOTAM系统的设计难点——为什么一次停电能搞得这么惨?

文丨李瀚明

FAA一个停电搞挂了NOTAM数据库,结果闹得全美几个小时飞不了。这个事说大不大说小不小,但还是值得出来科普一下这个系统,也算是给国内一个参考。

NOTAM系统全称Notice toAir Missions(就飞行任务发出的通知,ICAO缩写作Noticesto Airmen)。对于一般市民最常用的查询NOTAM的渠道是FAA的官网https://www.notams.faa.gov/dinsQueryWeb/、https://pilotweb.nas.faa.gov/PilotWeb/或者ICAO的官网https://www.icao.int/safety/istars/pages/notams.aspx。

为了理解NOTAM系统的设计架构,我们就需要了解NOTAM本身的性质。NOTAM作为给飞行任务的通知,其发出人必然是飞行任务中所涉及的环节的管理者。例如,一架从ZGGG飞到RJTT的航班,涉及到不同的管理区域,因此不同的管理者都可以发出与之相关的NOTAM:ZGGG机场(起飞机场及其终端区)、ZGZU、ZSHA和RJJJ(沿途FIR和管制区)、RJTT机场(到达机场及其终端区)。如果还需要查询一下备降场(例如RJAA、RKSI或者VHHH),那还需要查询更多的区域。

我们可以看到的是,如果每个管制单位都只通过自己的系统发布自己管内的NOTAM,那么作为用户的航空公司和飞行员会非常麻烦,要查询不同的NOTAM。因此,ICAO Annex 15《航行信息服务 Aeronautical Information Services》给出了一个规范,说各国的民航当局有必要成立International NOTAM Office(NOF),以便在国家之间交换NOTAM。

换言之,FAA一方面要负责收集全美国各机场各FIR管制区的NOTAM,然后集中到FAA自己的系统里,既供国内用户查询,也要交换到海外国家;同时,还要接受海外国家交换来的NOTAM,供国内用户查询。

这使得NOTAM系统是个并发读、并发写的系统——并发读自然毋庸置疑,并发写则是来自于多个国家同时交换的情况。所以,理论上NOTAM系统是持续7x24小时,每时每刻都在接受来自不同民航单位的写入。

每时每刻都有东西写入的系统,相对于一个每时每刻都只需要读取的系统,可靠性是下降好几个数量级的。当异常事件(例如这一次的停电)发生时,无法确定正在写入的数据是否完整、妥善地写入了系统,也无法确定停电期间是否遗漏了写入信息。这使得FAA只能采取停航的做法——确定信息是否妥善写入对于FAA NOTAM这样的系统而言确实需要时间。

这个问题是世界通用的——美国会有这个问题、日本会有、欧盟会有、中国也会有。NOTAM系统高并发写入的特征使得它必然需要顶尖的灾备能力——甚至比金融交易所或者银行而言都有过之而无不及。相对有休市时间的交易所而言,NOTAM系统需要保持7x24运作;而相对单一账户不同时读写,可以执行分区的银行而言,NOTAM系统单一实体需要同时读写(即管制单位添加新NOTAM的同时,用户还在查询涉及这个机场的NOTAM)。

因此,NOTAM系统的架构设计,其实堪称是IT系统设计的顶尖难题。“后人哀之而不鉴之,亦使后人而复哀后人也”,中国民航最好还是抱着“有则改之、无则加勉;前事不忘,后事之师”的心态,检讨自己的NOTAM系统实现。

点击【李及李】阅读更多相关信息

全部专栏