摩天大厦不可伸缩

来源:互联网 发布:猎手软件下载 编辑:程序博客网 时间:2024/03/29 05:18

作者:迈克尔·尼加德(MichaelNygard)

大家经常把软件工程比喻成建造摩天大厦、水坝和公路,这种比喻在某些方面确实有道理。

土木工程不仅是设计建筑对象这么简单,真正的难题在于规划整个施工过程,确保建筑物拔地而起,包括从奠基到竣工的所有工作。在竣工之前,建筑工人必须各施所长,让建筑框架一直竖立着。其中的有些经验很值得我们借鉴,尤其是对于布署大型集成化软件系统(包括所有的企业应用和Web应用)。如果把软件工程比作土木工程,那么传统的“大爆炸”式软件部署方式(“big bang”deployments)(译注1)就好比把备齐的建筑材料一股脑儿扔上天,指望它们瞬间拼成大厦一样可笑。

相反,无论是开发新项目,还是替换己有的系统,都应该逐个部署系统组件。这样做有两个优点。

首先,隐藏在代码中的技术风险是部署软件时无法回避的问题,每个组件都有可能出问题,一次只部署一个组件,可以将风险分散到各个时间段,每次砌好“一块砖”。

其次,这种方法迫使我们设计清晰的组件间接口。在旧系统上部署新组件,相当于将新组件回归集成(reverse-integrating)(译注2)到旧系统里,如果新系统部署成功,那么所有新组件就同时适用于两套系统:旧系统和替换后的新系统。组件是否可重用必须通过实践检验,采用分段式部署(piecewise deployment)方法可以有效检验组件的可重用性。实践证明,这种方法还能提高系统的一致性,降低系统的耦合度。

但是,有些土木工程的经验是不能借鉴的,尤其是在建筑工程中屡试不爽的“瀑布式”(waterfall)施工方法。要知道,摩天大厦的选址和建筑高度在设计时就己经确定,事后加高楼层不但代价高昂,而且非常危险。设计定稿后,就不能再改变大厦的高度,更不能挪位置。毕竟,摩天大厦不需要可伸缩性。

与拓度马路相比,增加软件的功能要简单得多。这不是软件开发过程的瑕疵,恰好是软件的优势。应用软件只要具备了用户要求的关键功能就可以发布,不必等到十全十美才上市。事实上,产品越早发布,公司的净收益越高。

表面上看,“尽早发布”(early release)的做法和“递增式部署”(incremental deployment)似乎相互矛盾,但两者其实可以相辅相成。尽早发布单独的组件,意味着每个组件可以独立地迭代。这迫使你提前解决诸如划分协议版本、维持部署过程中的持续可用性等棘手的问题。

尽早部署独立的组件既可增加商业利润,又可以改善架构品质,这样实用的技巧实在不多。

译注1:“大爆炸式”部署是指用新系统彻底替换旧系统,新旧系统之间存在过渡阶段的布署方式。对复杂的系统来说,这种一刀切式的做法风验比较高。

译注2:回归集成是版本控制系统中的术语,指将分支版本(尤其是其中修改后内容,例如新开发的功能)合并到主版本库。

0 0
原创粉丝点击