Oswald Regular
OpenSans Regular
构建更好的故障保险系统
软件防喷阀 — 切实有效的故障保险系统!

2010 年以前,有谁听说过“防喷阀”?随着墨西哥湾重大漏油事件的发生,关于防喷阀的新闻报道可谓铺天盖地,纷纷指出防喷阀能够在安全、清洁的采油工作与生态灾难之间构筑起一个坚实的安全屏障。防喷阀是一个重达几百吨的机械箱体,安放在海底井口上部。一切正常时,防喷阀允许原油从油井源源不断地流入采油管。发生事故时,防喷阀启动巨大的液压撞锤将两英尺管道砸扁,甚至使其断成两截。显然,防喷阀不会天天启动,但必须时刻待命,否则一旦发生事故,后果不堪设想!

幸运的是,海上石油钻井灾难很少发生。但是,业务数据处理系统灾难却不少见,通常表现为:停电且备份无法启动,机器崩溃(即使是冗余设备也照样崩溃),磁盘驱动器采用 RAID 阵列仍然出现故障,操作人员虽经培训却仍然按错按钮,无效数据入侵系统并进行肆意破坏,数据库拥塞并拒绝加载数据,网络拥塞、丢弃交易数据……当这些系统发生故障时,如果可以完全终止系统,这是您的运气。如果您不够幸运,数据将如同墨西哥湾油井的石油一样从数据管道喷涌而出,造成一片狼藉!之后,运营人员必须关闭系统,并尽可能恢复尽量多的数据,重新启动时将异常危险,可能再次导致井喷,造成更多的数据流失和更悲惨的局面。

软件开发人员不喜欢“井喷”这个字眼,因为它令人望而生畏,但这通常就是灾难的本质。这就是井喷的威力!数据杂乱地散于各处,系统支离破碎、残破不堪。

几十年以来,软件工程师们一直在与这种问题奋力抗争。由于“软件防喷阀”通常由客户自行定制设计(这些设计人员通常并不真正了解故障原因),从而使得构建故障保险系统的工作十分艰难。相关成本之高让软件工程师倾向于走捷径(您是否觉得“应该不会出现故障”的说法很耳熟?)。由于对故障原因缺乏了解,系统测试毫无针对性,只是随意进行。更糟的是,数据处理系统的高度稳定性通常会与其他需求(如高性能)直接发生冲突。通常只可两者取其一,而无法鱼熊兼得。业务目标(如性能)的交付显儿易见,但系统的稳定性却无法在短期内得到证明,因此通常被搁置一旁。

新思维、新方法

Ab Initio 深知防止数据处理井喷事故的唯一方式是采用截然不同的理念,这也是 Ab Initio 的核心原则。Ab Initio 工程师保证不冒然构建任何软件,保证从一开始就设计完备机制,绝对稳定而且易于使用,也不影响性能。这个理念已内置在 Ab Initio 软件之内,用户得以专注于其业务需求,无须担心发生恶梦般的井喷。

这是什么工作原理?首先,可将 Ab Initio 应用程序视为通过数据管道相互连接的一系列处理步骤,数据逐步高速流经这些管道,其中一个步骤可能具有多个流入管道和/或多个流出管道。这些管道最终连到数据存储单元或接受生成数据流的其他处理系统。这些互连的处理步骤和数据管道系统极其庞大,甚至比纽约市地铁地图更庞大、更复杂!

Ab Initio 检查点机制构成数据管道上的互锁阀。通常,整个处理系统有一组输入和输出阀门。处理系统的要害之处也可通过阀门控制。此外,阀门(检查点)处具有数据储存器,在数据传入下一段系统前捕获数据副本。用户可指定其中一些阀门(检查点),其余的阀门位置由 Ab Initio 软件自动确定。虽然一些阀门以其他软件技术(如数据库和消息队列)为载体,但多数都在 Ab Initio 的软件中实施。其关键之处在于,所有阀门都连接到中央控制器 Ab Initio Co>Operating System,该系统以严谨同步的方式打开和关闭。

Co>Operating System 设计理念为高性能的并行和分布式处理,故障发生时表现极度稳健。因此,虽然大量数据高速流经其管道,传输到网络、跨服务器并连接到各种外部系统,Co>Operating System 仍然仔细监控井喷并稳妥处理。

当最危急的情况发生时

由于 Co>Operating System 始终认真仔细地打开和关闭阀门,因此发生井喷时的损失仅限于在阀门间流动的数据。此外,由于 Co>Operating System 在其储存器保存任何具有风险的数据副本,并精确掌握流进流出系统的数据量。 因此,实际上不会造成任何数据损失。故障一旦修复,Co>Operating System 即可重新启动,并将自动在正确的位置恢复应用程序,用正确数据(来自储存器)重新填充数据管道,一切好像从未发生一样。这是最为理想的状况,虽然发生井喷,却无人员伤亡也无任何物资损失,管道后修复生产立即恢复。危急的情况发生时,难道还有比这更好的结局吗?

附注:本文省略了有关检查点的大量相关说明。诸如两阶段式事务提交、检查点触发器、消息最小段、事务管理器和 XA 协议等。Ab Initio 已仔细地考虑到方方面面,省去客户的大量繁琐工作。好消息是:产品确实好用。

English
Français
Español
Deutsch
语言:
简体中文
日本語