37 摩天大厦不可伸缩

来源:互联网 发布:知乎你见过最漂亮的人 编辑:程序博客网 时间:2024/04/27 12:35

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

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

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

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

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

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

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

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

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