Skyscrapers Aren’t Scalable

Michael Nygard

WE oFTEn HEAR SoFTWARE EnginEERing CoMpAREd to building sky- scrapers, dams, or roads. It’s true in some important aspects.
The hardest part of civil engineering isn’t designing a building that will stand up once it is finished, but figuring out the construction process. The construc- tion process has to go from a bare site to a finished building. In the interim, every worker must be able to apply his trade, and the unfinished structure has to stand up the whole time. We can take a lesson from that when it comes to deploying large integrated systems. (“Integrated” includes virtually every enterprise and web application!) Traditional “big bang” deployments are like stacking up a pile of beams and girders, throwing them into the air, and expect- ing them to stick together in the shape of a building.
Instead, we should plan to deploy one component at a time. Whether this is a replacement or a greenfield project, this has two large benefits.
First, when we deploy software, we are exposing ourselves to the accumulated technical risk embodied in the code. By deploying one component at a time, we spread technical risk out over a longer period of time. Every component has its own chance to fail in production, letting us harden each one independently.
The second large benefit is that it forces us to create well-defined interfaces between components. Deploying a single component of a new system often means reverse-integrating it with the old system. Therefore, by the time deployment is complete, each component has worked with two different systems: the original and the replacement. Nothing is reusable until it has been reused, so piecewise deployment automatically means greater reusability. In practice, it also leads to better coherence and looser coupling.

Conversely, there are some important ways that civil engineering analogies mislead us. In particular, the concreteness of the real world pushes us toward a waterfall process. After all, nobody starts building a skyscraper without knowing where it’s going or how tall it should be. Adding floors to an existing building is costly, disruptive, and risky, so we try to avoid it. Once designed, the skyscraper isn’t supposed to change its location or height. Skyscrapers aren’t scalable.
We cannot easily add lanes to roads, but we’ve learned how to easily add fea- tures to software. This isn’t a defect of our software processes, but a virtue of the medium in which we work. It’s OK to release an application that only does a few things, as long as users value those things enough to pay for them. In fact, the earlier you release your application, the greater the net present value of the whole thing will be.
“Early release” may appear to compete with “incremental deployment,” but they can actually work together quite well. Early release of individual compo- nents means that each one can iterate independently. In fact, it will force you to work out thorny issues like continuous availability during deployments and protocol versioning.
It’s rare to find a technique that simultaneously provides higher commercial value and better architectural qualities, but early deployment of individual components offers both.

转载于:https://www.cnblogs.com/yangykaifa/p/7257509.html

Skyscrapers Aren’t Scalable相关推荐

  1. 架构师须知97件事精华版

    原文 摘要 描述 17.    Business Drives   by Dave Muirhead [业务决定技术] 为了建设一个系统,架构师必须把技术部门和业务部门团结在一起.但要明白二者的立场是 ...

  2. 《97 Things Every Software Architect Should Know》读书笔记

    (从网上搜集的,并且整理为DOC文档,希望大家可以从这篇文章中学到更多的东西, 我准备将该文档翻译成中文,大家可以不定期的访问我的博客http://blog.csdn.net/jianglike18) ...

  3. 97条架构师必须掌握的知识

    1.      Don't put your resume aheadofthe requirements by Nitin Borwankar [需求先于履历] 身为架构师要平衡客户.公司和个人的利 ...

  4. 2018/8/30-31 A social learning particle swarm optimization for scalable optimization.

    信息:  2015年    Informatica science 题目: A social learning particle swarm optimization for  scalable op ...

  5. 目标检测-- DeNet: Scalable Real-time Object Detection with Directed Sparse Sampling

    DeNet: Scalable Real-time Object Detection with Directed Sparse Sampling ICCV2017 An easily extended ...

  6. 区块链论文: Bitcoin-NG: A Scalable Blockchain Protocol

    本文首发于 https://zhuanlan.zhihu.com/blockchain-top-paper 发现已有几篇中文博客描述这篇论文,但是本文跟它们的不同点在于,希望站在高层视角,结合图片来理 ...

  7. Why平台:Scalable是互联网公司的价值所在

    许多互联网公司的Revenu并不高,但资本市场对他的估值却远高于Revenu是其10倍.100倍的传统公司.Why? 我想是因为互联网的业务,许多是可以被大量复制的,因此可以低成本地Scale Up! ...

  8. Scalable IO in Java

    Scalable IO in Java http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 大部分IO都是下面这个步骤, Most have same basi ...

  9. Scalable, Distributed Systems Using Akka, Spring Boot, DDD, and Java--转

    原文地址:https://dzone.com/articles/scalable-distributed-systems-using-akka-spring-boot-ddd-and-java Whe ...

  10. AI公开课:19.05.22 Aya Soffer—IBM AI Tech VP《Advanced, scalable, and trusted AI 》课堂笔记以及个人感悟

    AI公开课:19.05.22 Aya Soffer-IBM AI Tech VP<Advanced, scalable, and trusted AI >课堂笔记以及个人感悟 Introd ...

最新文章

  1. 行人属性--HydraPlus-Net: Attentive Deep Features for Pedestrian Analysis
  2. 设计模式————单例模式
  3. .net 返回datatable显示sql列名_3汇总分析-SQL
  4. linux编辑文本文件aa的命令,linux入门必须掌握的命令--文本文件编辑
  5. C++Rabin Karp算法字符串快速查找(附完整源码)
  6. 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
  7. 字节跳动python面试_【字节跳动Python面试】生平遇到最好的面试体验-看准网
  8. signal.h-----信号函数
  9. busybox(二)编译
  10. 【UI】NGUI和UGUI
  11. 浅谈算法书籍学习路线
  12. 响应式开发(六)-----Bootstrap CSS----------Bootstrap文本排版
  13. word删除页眉下面的横线
  14. 【JAVA】关于自动化测试所需要学习的java基础知识笔记
  15. 关于一张出库单开具了多张发票的错误处理
  16. APP接入友盟统计,不上报数据问题
  17. 安装splash与启动
  18. 无标号有根仙人掌计数
  19. mcs微型计算机,CSY-Ⅱ/MCS-Ⅱ/MCS-2智能汽机微机测速仪
  20. html制作满天星,怎样使用原生js做出满天星效果

热门文章

  1. 华为OD机试题:叠积木(Python 解法)
  2. 【超详细】免费搭建一个资源类小程序,对接wordpress网站内容
  3. 加密经济学应用的机制设计
  4. 【典型液压系统】组合机床动力滑台液压系统
  5. Elasticsearch-7(全文搜索应用分享)
  6. 机器学习:蒙特卡罗方法
  7. 金蝶KIS保存记账凭证的时候提示“在清除未下设辅助账的科目所在的会计分录中的核算项目代码时出现冲突或错误,凭证还没有被保存,请您稍后重试。”错误
  8. java 句柄无效_c# – 通过java运行.net控制台时“句柄无效”
  9. kernel编译错误R_ARM_THM_JUMP19
  10. java 实时弹幕_[Java记录]实时抓取斗鱼弹幕