- 推荐序一:架构师真正要学会的事情
- 推荐序二
- 译者序 2.0
- 序
- 关于本书
- Part Ⅰ 什么是软件架构
- 第 1 章 什么是架构
- 第 2 章 架构的种类
- 第 3 章 软件架构是什么
- 第 4 章 敏捷软件架构是什么
- 第 5 章 架构对上设计
- 第 6 章 软件架构重要吗
- 第 7 章 问题
- Part Ⅱ 软件架构的角色
- 第 8 章 软件架构的角色
- 第 9 章 软件架构师应该编码吗
- 第 10 章 软件架构师应该是建造大师
- 第 11 章 从开发者到架构师
- 第 12 章 拓展 T
- 第 13 章 软技能
- 第 14 章 软件架构不是接力运动
- 第 15 章 软件架构要引入控制吗
- 第 16 章 小心鸿沟
- 第 17 章 未来的软件架构师在哪里
- 第 18 章 每个人都是架构师,除非他们有其他身份
- 第 19 章 软件架构咨询师
- 第 20 章 问题
- Part Ⅲ 设计软件
- 第 21 章 架构驱动力
- 第 22 章 质量属性(非功能需求)
- 第 23 章 处理非功能需求
- 第 24 章 约束
- 第 25 章 原则
- 第 26 章 技术不是实现细节
- 第 27 章 更多分层等于更高复杂度
- 第 28 章 协同设计是一把双刃剑
- 第 29 章 软件架构是对话的平台
- 第 30 章 SharePoint 项目也需要软件架构
- 第 31 章 问题
- Part Ⅳ 可视化软件
- 第 32 章 沟通障碍
- 第 33 章 对草图的需要
- 第 34 章 无效的草图
- 第 35 章 C4:语境、容器、组件和类
- 第 36 章 语境图
- 第 37 章 容器图
- 第 38 章 组件图
- 第 39 章 是否包含技术选择
- 第 40 章 你会那样编码吗
- 第 41 章 软件架构和编码
- 第 42 章 你不需要 UML 工具
- 第 43 章 有效的草图
- 第 44 章 C4 的常见问题
- 第 45 章 问题
- Part Ⅴ 为软件生成文档
- 第 46 章 代码不会讲述完整的故事
- 第 47 章 软件文档即指南
- 第 48 章 语境
- 第 49 章 功能性概览
- 第 50 章 质量属性
- 第 51 章 约束
- 第 52 章 原则
- 第 53 章 软件架构
- 第 54 章 外部接口
- 第 55 章 代码
- 第 56 章 数据
- 第 57 章 基础设施架构
- 第 58 章 部署
- 第 59 章 运营和支持
- 第 60 章 决策日志
- 第 61 章 问题
- Part Ⅵ 开发生命周期中的软件架构
- 第 62 章 敏捷和架构的冲突:神话还是现实
- 第 63 章 量化风险
- 第 64 章 风险风暴
- 第 65 章 恰如其分的预先设计
- 第 66 章 初识软件架构
- 第 67 章 问题
- Part Ⅶ 金融风险系统
- 第 68 章 金融风险系统
- Part Ⅷ 附录:技术部落 的软件指南
第 4 章 敏捷软件架构是什么
以我的经验,人们用“敏捷”一词指代的往往不止一件事情。首当其冲就是软件开发的敏捷方法1;快速行动,拥抱变化,持续交付,接收反馈,不一而足。与敏捷思维模式相关的第二个意思是,人们如何在敏捷环境中一起工作,通常包括了团队动态、系统思维、心理学以及其他可能会跟创建高效团队联系在一起的事情。
先把后面提到的这些“肤浅的东西”放到一边,在我看来,给软件架构打上“敏捷”的标签就意味着它能够应对所处环境中的变化,适应人们提出的不断变化的需求。这跟敏捷团队创建的软件架构不尽相同。以敏捷方式交付软件并不能保证得到的软件架构是敏捷的。事实上,以我的经验,发生相反的事情通常是因为团队更关注交付功能,而非架构。
理解“敏捷”
要理解你的软件架构需要多敏捷,就应该看看敏捷究竟是什么。美国空军战斗机飞行员约翰•博伊德(John Boyd)提出了一个名为OODA循环的概念2。本质上,这个循环构成了基本的决策过程。想象一下,你是一个正与敌人缠斗的战斗机飞行员。为了击败对手,你需要观察情况,确定自己的方位(比如做一些分析),决定做什么,并采取行动。在激烈的战斗中,为避免被对手击落,这个循环要执行得尽可能快。博伊德说,如果你能洞悉对手的OODA循环,执行得比他更快,就能混淆视听,误导对手。如果你比对手更敏捷,就能成为最后的赢家。
2http://en.wikipedia.org/wiki/OODA_loop——观察、定向、决策和行动,Observe、Orient、Decide、Act。——译者注
在一篇题为“What Lessons Can the Agile Community Learn from A Maverick3 Fighter Pilot”(敏捷社区能从特立独行的战斗机飞行员身上学到什么)4的论文中,不列颠哥伦比亚大学的史蒂夫•阿道夫引用了博伊德的概念,将其应用于软件开发,得出的结论是敏捷是相对的,且按时间来衡量。如果你的软件团队交付的软件跟不上所处环境的变化,就不算敏捷。如果你在一个庞大而行动缓慢、鲜有改变的组织中工作,很可能交付软件要花费数月,却仍被组织认为是“敏捷”的;在一个精益初创团队中,情况多半就不一样了。
3Maverick是电影《壮志凌云》中汤姆•克鲁斯饰演的飞行员的代号。——译者注
4http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&arnumber=1667567
好的架构带来敏捷
产生这个讨论的动力是好的软件架构能带来敏捷。尽管面向服务的架构(SOA5)因为过于复杂、臃肿和粗糙的实现而被一些组织看作肮脏的词汇,但软件系统由小型微服务6构成仍呈一种增长趋势,每个服务只专注做好一件事。一个微服务通常可能不到100行代码。如果需要改变,服务可以用另一种语言重新编写。这种架构风格以多种方式提供了敏捷。小型、松耦合的组件和服务可以孤立地构建、修改和测试,甚至根据需求变化移除和替换。因为能够加入新组件、服务并在需要时扩展,这种架构风格也很适合非常灵活和可适配的部署模型。
5Service-Oriented Architecture,http://en.wikipedia.org/wiki/Service-oriented_architecture。——译者注
6http://www.infoq.com/presentations/Micro-Services
然而,天上不会掉馅饼。构建一个这样的软件系统需要时间、精力和准则。很多人也不需要这种水平的适应性和敏捷性,这就是为什么你看到那么多团队构建的软件系统实际上整体感强得多,各部分捆绑在一起并以单一单元部署。尽管更易于构建,然而这种架构风格在面对变化的需求时通常要花费更多精力去适配,因为功能往往交织在代码库中。
不同的软件架构提供不同层次的敏捷
在我看来,两种架构风格各有优缺点,应该在权衡利弊之后,再决定是构架一个整体系统还是几个微系统。和IT行业中所有的事情一样,在这两者之间也有中间地带。抱着实用主义的想法,你总能选择构建一个由很多定义好的小组件构成,但仍作为单一单元部署的软件系统。这也让你有可能在将来轻松地迁移到微服务架构。
你需要有多敏捷
理解组织或业务变化的速度很重要,因为这能帮助你决定采用何种架构风格,可能是整体架构、微服务架构或者介于两者之间。要理解这种权衡并做出相应的选择。敏捷不是白来的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论