摩天大厦不可伸缩
来源:互联网 发布:猎手软件下载 编辑:程序博客网 时间:2024/03/29 05:18
作者:迈克尔·尼加德(MichaelNygard)
大家经常把软件工程比喻成建造摩天大厦、水坝和公路,这种比喻在某些方面确实有道理。
土木工程不仅是设计建筑对象这么简单,真正的难题在于规划整个施工过程,确保建筑物拔地而起,包括从奠基到竣工的所有工作。在竣工之前,建筑工人必须各施所长,让建筑框架一直竖立着。其中的有些经验很值得我们借鉴,尤其是对于布署大型集成化软件系统(包括所有的企业应用和Web应用)。如果把软件工程比作土木工程,那么传统的“大爆炸”式软件部署方式(“big bang”deployments)(译注1)就好比把备齐的建筑材料一股脑儿扔上天,指望它们瞬间拼成大厦一样可笑。
相反,无论是开发新项目,还是替换己有的系统,都应该逐个部署系统组件。这样做有两个优点。
首先,隐藏在代码中的技术风险是部署软件时无法回避的问题,每个组件都有可能出问题,一次只部署一个组件,可以将风险分散到各个时间段,每次砌好“一块砖”。
其次,这种方法迫使我们设计清晰的组件间接口。在旧系统上部署新组件,相当于将新组件回归集成(reverse-integrating)(译注2)到旧系统里,如果新系统部署成功,那么所有新组件就同时适用于两套系统:旧系统和替换后的新系统。组件是否可重用必须通过实践检验,采用分段式部署(piecewise deployment)方法可以有效检验组件的可重用性。实践证明,这种方法还能提高系统的一致性,降低系统的耦合度。
但是,有些土木工程的经验是不能借鉴的,尤其是在建筑工程中屡试不爽的“瀑布式”(waterfall)施工方法。要知道,摩天大厦的选址和建筑高度在设计时就己经确定,事后加高楼层不但代价高昂,而且非常危险。设计定稿后,就不能再改变大厦的高度,更不能挪位置。毕竟,摩天大厦不需要可伸缩性。
与拓度马路相比,增加软件的功能要简单得多。这不是软件开发过程的瑕疵,恰好是软件的优势。应用软件只要具备了用户要求的关键功能就可以发布,不必等到十全十美才上市。事实上,产品越早发布,公司的净收益越高。
表面上看,“尽早发布”(early release)的做法和“递增式部署”(incremental deployment)似乎相互矛盾,但两者其实可以相辅相成。尽早发布单独的组件,意味着每个组件可以独立地迭代。这迫使你提前解决诸如划分协议版本、维持部署过程中的持续可用性等棘手的问题。
尽早部署独立的组件既可增加商业利润,又可以改善架构品质,这样实用的技巧实在不多。
译注1:“大爆炸式”部署是指用新系统彻底替换旧系统,新旧系统之间存在过渡阶段的布署方式。对复杂的系统来说,这种一刀切式的做法风验比较高。
译注2:回归集成是版本控制系统中的术语,指将分支版本(尤其是其中修改后内容,例如新开发的功能)合并到主版本库。
- 摩天大厦不可伸缩
- 37 摩天大厦不可伸缩
- js 摩天大厦
- 摩天大厦能能自转360度吗
- 大厦
- 一张纸折51次,有多高?一个冰箱?一层楼?或者一栋摩天大厦?NO,你错了.这个厚度超过了地球和太阳之间的距离。
- 小学生作文大厦
- 阿斯顿噶是个阿斯顿发大厦
- 东方红大厦
- 建设企业级SOA大厦
- 西尔斯大厦玻璃阳台
- 希格玛大厦的面试
- 国会大厦地方
- 百度的新大厦
- 牛顿力学大厦
- 判断摩天是该年第几天【数组】;
- 大是大厦大厦大方方的是
- 大是大厦大厦大方方的是
- java中volatile关键字的含义
- git——OS X创建仓库以及链接github
- table表格css样式
- 兄弟间的事,筹栎间的那点事
- [IOS]CoreAnimation基础[翻译6部分]
- 摩天大厦不可伸缩
- HDOJ5256 序列变换(dp)
- 黑马程序员——021——IO流⑥(DataStream、(字节、字符)数组、字符串流对象、转换流)
- 黑马程序员——022——反射
- 202 Happy Number
- 黑马程序员——023——hashCode方法与HashSet类
- 黑马程序员——024——网络编程①
- HDU 5416 CRB and Tree(dfs 异或逆运算)
- LeetCode ||Count Primes