作者王嘉博士,曾是IBM公司的信息架构师,现在在万事达(MasterCard)公司担任高级技术顾问。

2012年年初,我从美国回到中国,并停留了十几天。在回国期间,我去了北京、上海 等5个城市,感受到了中国巨大的变化。尤其让我惊讶的是,中国的铁路系统取得了很多进步。如果乘高铁从南京出发,只需要1个多小时就能抵达300多公里之 外的上海。此外,中国的铁路系统也变得更加自动化,无论是购票还是登车,都比以前简便易行。作为一名IT技术专家,我相信这些进步和中国IT产业的发展息息相关。

中国可能拥有世界上最为庞大的铁路系统(印度排在第二位)。今年年初,铁道部调整了规 定,宣布实行购票验票实名制。这次调整落实了几个新的商业规则,例如一个帐号只能和一张身份证相连,而一张身份证只能在同一次火车上购买一张车票。铁道部 还改进了网络订票系统的性能。根据中国媒体的报道,有23.6%的火车票是通过网络订购的,这是中国铁路旅客运输取得的一项相当重要的成就。

但是,铁道部配套的网络订票系统却让人失望。这套系统主要存在两个问题。首先,人们只能 在早上6点到晚上11点买票。第二个问题更严重。很多人没有买成票,信用卡上的钱却被划去了。这种情况在美国很难想象,因为这会极大地损害公司的声誉和业 绩。而且对于美国公司的网络交易系统来说,一天24小时,一周7天都应该保持运转,这已经成为行业中极为基本的要求。从这里我们能看出中国IT行业和美国 的差距。

可能有人会认为,铁道部面对的是中国的春运 ,压力巨大,所以出一点问题也是情有可原的。这些人可能并不了解美国一些大网站(例如亚马逊以及大航空公司网站)每天的交易量。据报道,在一些购物的高峰 期(例如感恩节前后),亚马逊网站以及电子湾(eBay)网站的日交易量能达到几百万次,足以和铁道部网站的日交易量相媲美。所以,铁道部还有很多工作要 做。

为什么铁道部网站的订票时间被限定在早上6点至晚上11点之间?可能的原因有很多。不过 我认为最可能的原因是有限的后台处理容量,较低的数据复制以及同步的能力。很多中国人可能认为,每天有17个小时的时间订票就已经足够了,但是他们忽略了 时差带来的不便。对于居住在其它时区国家(例如欧洲国家和美国)的人来说,想通过这样的系统订票就很不困难了。我曾帮助美国最大的连锁酒店之一改进房间预 订系统。这家酒店的网络房间预订系统仅仅失灵了短短两个小时,就导致了几百万美元的损失。而中国的火车订票系统每天就有7小时时间处于停止运转的状态。虽 然中国的铁路运输并没有面对激烈的行业竞争,但仍然会给订票的人带来不便。中国的火车订票系统在整个社会中有着重要的地位,因此,设计类似的网络交易系统 的时候,应对系统功能的不连续性采取零容忍的态度。一个可行的方法是采用实时数据处理系统(real-time data processing system),并用它取代现有的分批处理系统 (batch processing system),因为实时处理系统可以不间断地处理数据,所以可以避免出现系统中断的状况。

铁道部的网络订票系统还出现了没有成功订票却扣除票费的情况。根据中国新闻媒体的报道, 铁道部对此做出的解释是,网络订票系统只给每次交易分配30分钟时间。这段时间在网络术语中被称为“时域(session)”。一旦时域过期,用户就会自 动登出,信息也会丢失,造成信用卡被扣钱的状况。时域过期并非新问题。只要合理设计网络平台和环境,就可以探测并且修正这个问题。

要想开发出成功的信息技术系统,就必须采用好的技术和方法,例如采用系统开发生命周期(SDLC)。考虑到中国迅猛发展的信息技术水平,这种方法对中国不会陌生,但是笔者仍然希望就如何改进网络订票系统进行一些讨论。

重视非功能性需求

信息技术的项目开发组在开始工作前,应该收集项目的需求,并深刻理解它们。项目需求可 以分成两个部分:功能性需求和非功能性需求。总地来说,功能性需求是指系统的表现,或者说是商业逻辑下的功能。而非功能性需求指的是系统的属性和质量,例 如安全性、表现执行性以及可操作性等等。尽管这两种需求都很重要,但是系统的功能性需求往往比非功能性需求更加有形,也更加直观易懂。所以在项目刚开始的 时候,人们很容易忽视非功能性需求。

当非功能性需求得不到确认和满足的时候,有可能会出现严重的后果, 如造成商业损失或甚至项目失败。如果在开始设计项目的时候忽略了非功能性需求,那就要在已有的设计上进行更新,这样就有可能超出预算。所以,在项目一开始 的时候,就应该对非功能性需求进行仔细地考量。此外,一些非功能性需求(例如系统反应时间)还需要被量化。最后,很多非功能性(如可用性)的需求和架构有 关,而和组成架构的单元设计关系不大。所以,非功能性需求必须作为架构的一部分被考虑。

架构和设计

IT系统的架构和设计是一个很大的课题,也很难在短短一篇评论中被讨论清楚。总体来 说,商业价值和需求决定了系统的架构。架构可以分为不同的层次,包括网络、IT基础设施,信息以及应用构架。面向服务的体系架构(SOA)是一种比较先进 的选择,它可以让商业过程变得更加自动化,还能使IT和商业保持一致。这样,商业过程就会变得更加灵活。此外,一些应用广泛的IT基础设施(例如企业服务 总线)还能带来其它好处,包括服务虚拟化、松散耦合以及服务组合等等。良好的数据中心架构可以帮助系统实现快速灾难恢复,所以这对关键系统(例如铁路购票 系统)来说至关重要。

就具体的设计而言,设计的选择必须优化系统的效果和效率。我们应该牢记一些设计原则,包括松散耦合、封装性、兼容和互操作性、可重复使用性、可扩展性、普遍可达性、界面稳定性以及标准的开放性。一言蔽之,设计会对系统的表现和性能产生巨大的影响。

让我们回到订票系统只有30分钟时域的问题。如果使用合理的设计方案和技术,这个问题 并不难被修正。从设计角度说,铁道部应该遵循著名的ACID原则 ,这些原则包括了原子性 (atomicity)、一致性(consistency),隔离性(isolation)以及持久性(durability)。它们保证了数据库交易的 可靠性。ACID原则并不是什么新东西,它在计算机科学领域已经出现了近30年的时间。在单个数据库中采用ACID并不困难。但是,要想在涉及多方交易时 采用ACID,就要麻烦得多。多方交易的工作原理并不难理解。如果所有交易方同意这次交易,那么这个交易就被通过并存在数据库;而如果有任何一方出现问 题,那么交易就被退回到起始状态。在多方交易的架构中,实施ACID需要一个负责的软件单元。它能从所有参与者那里收集信息,然后作出是否完成交易的决 定,最后再把这个决定发回参与者。这个作决定的软件单元被称为多方交易协调者(global transaction coordinator)。一些主要的软件供货商已经把多方交易协调者加入到他们的产品当中,例如IBM的产品系列。

综上所述,中国IT的进展值得高兴,但这个行业还有许多地方需要改进。中国公众应当对 现实抱有更高的期望,而不应只是被动地接收被寄予的东西。这样才能增加商业需求和加速商业进展,促进技术创新。在交易架构中加入实时系统虽然可以增加巨大 效益,但这项工作实现起来并不简单。相反的是,避免刷卡成功购票却失败的情况可能只需要一些技术上的改进。从这个角度说,铁道部也许应该先从后者入手。

本文原载于《科技创业》2012年3月刊。