架构之美

架构的完美性

《团队之美》这本书里面有对 Mike Cohn 的一段采访,他提到:
“一个应用中所有的代码不一定要处于同样的质量水平”。
“不是每件事都要做到第一流,在大多数情况下,我们根本没机会做到第一流”。
在这里插入图片描述
软件架构设计其实更加类似于大自然“设计”一个生物,通过演化让生物适应环境,逐步变得更加强大。

就如下图的技术发展趋势图一样,世界上其实不存在完美的架构。多数情况下,架构是一种妥协,一种特定时期和场景下平衡的产物
在这里插入图片描述

架构的抽象性

如果一个技术已经存在3年,比如现在很火的前端技术React和Vue等,那么预估这个技术大致还有3年的生命期,再久就不确定了;

如果一个架构或设计原则已经存在15年,例如面向对象设计的SOLID原则,可以预期它还有15年甚至更久的生命期。原则是比具体技术

更抽象,更接近事物本质,也更经得起时间考验的东西。这些原则沉淀在架构师的脑海中,最终内化成他的mindset,以潜意识方式影响和指导他的架构和设计工作。

今天和大家介绍实战派的开发架构大师Robert C.Martin以及他的力作

  1. 敏捷软件开发:原则模式与实践 –- 第13届软件开发震撼大奖获奖作品;在这本书,Robert 大叔提出了开创先河的面向对象设计的SOLID 五大原则。
    在这里插入图片描述
  2. 代码整洁之道 –- 细节之中自有天地,整洁成就卓越代码。在这本书,Robert 提出一种观念:代码质量与其整洁度成正比。
    干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。
    在这里插入图片描述
  3. 架构整洁之道 –- 人的意愿是无穷的,而实际行动却处处受限。人的欲望是无止境的,行为却不得不遵从现实的限制。by 威廉·莎士比亚。
    在这本书,Robert 提出一种观念:所谓的架构,就是用最小的人力成本来满足构建和维护系统需求
    在这里插入图片描述

架构的著名定律

计算机虽然历史不长,但是在高速发展的历程中,产生了很多著名定律。除了大家耳熟能详的摩尔定律外,今天我们再聊聊和架构相关的两个著名定律。

分别是并发编程的阿姆达尔定律和微服务的康威定律

  1. 阿姆达尔定律(Amdahl’s Law)
    阿姆达尔定律的模型阐释了我们现实生产中串行资源争用时候的现象。如下图模型,一个系统中,不可避免有一些资源必须串行访问,这限制了我们的加速比,即使我们增加了并发数(横轴),但取得效果并不理想,难以获得线性扩展能力(图中直线)。
    在这里插入图片描述
    这个定律的最佳工程实践,大家可以参看 《并发编程实战》的 第11章 性能与可伸缩性
    在这里插入图片描述
  2. 微服务的康威定律(Conway‘s Low)
    康威定律的核心就如下一句话:
    Organizations which design systems … are constrained to produce designs which are copies of the communication structures of these organizations. - Melvin Conway(1967)
    设计系统的组织,其产生的架构设计等价于组织间的沟通结构。
    组织的沟通和系统设计之间的紧密联系,在很多别的领域有类似的阐述。对于复杂的系统,聊设计就离不开聊人与人的沟通,解决好人与人的沟通问题,才能有一个好的系统设计。
    相信几乎每个程序员都读过的《人月神话》,里面许多观点都和这句话有异曲同工之妙。
    在这里插入图片描述
第一部分 论架构 第1章 架构概述  13 1.1 简介  13 1.2 创建软件架构  19 1.3 架构结构  23 1.4 好的架构  27 1.5 美丽的架构  28 致谢  30 参考文献  31 第2章 两个系统的故事:现代软件神话  33 2.1 混乱大都市  34 2.2 设计之城  40 2.3 说明什么问题  47 2.4 轮到你了  48 参考文献  48 第二部分 企业级应用架构 第3章 伸缩性架构设计  51 3.1 简介  51 3.2 背景  52 3.3 架构  56 3.4 关于架构的思考  61 第4章 记忆留存  67 4.1 功能和约束  68 4.2 工作流 69 4.3 架构关注点  70 4.4 用户反应  90 4.5 结论  90 参考文献  90 第5章 面向资源的架构:在Web中  91 5.1 简介  91 5.2 传统的Web服务  92 5.3 Web  94 5.4 面向资源的架构  99 5.5 数据驱动的应用  102 5.6 应用面向资源的架构  103 5.7 结论  108 第6章 数据增长:Facebook平台的架构  109 6.1 简介  109 6.2 创建一个社会关系Web服务  114 6.3 创建社会关系数据查询服务  121 6.4 创建一个社会关系Web门户:FBML  129 6.5 系统的支持功能  142 6.6 总结  147 第三部分 系统架构 第7章 Xen和虚拟化之美  151 7.1 简介  151 7.2 Xenoservers  152 7.3 虚拟化的挑战  154 7.4 半虚拟化  155 7.5 Xen的变换形式  158 7.6 改变的硬件,改变的Xen  163 7.7 经验教训  165 7.8 延伸阅读  166 第8章 Guardian:一个容错操作系统环境  169 8.1 Tandem/16,将来所有的计算机都会像这样构建 170 8.2 硬件  170 8.3 物理布局  172 8.4 处理器架构  172 8.5 处理器间总线  178 8.6 输入/输出  178 8.7 进程结构  179 8.8 消息系统  179 8.9 文件系统  183 8.10 轶闻趣事  188 8.11 弊端  189 8.12 后继者  190 8.13 延伸阅读  191 第9章 JPC:一个纯Java的x86 PC模拟程序  193 9.1 简介  193 9.2 概念验证  195 9.3 PC架构  198 9.4 Java性能技巧  199 9.5 把4GB放入4GB:这不起作用  200 9.6 保护模式的危险  203 9.7 从事一项毫无成功希望的斗争  206 9.8 劫持JVM  210 9.9 终极灵活性  220 9.10 终极安全性  222 9.11 第二次做会更好  223 第10章 元循环虚拟机的力量:Jikes RVM  225 10.1 背景  225 10.2 与运行时环境相关的传言  227 10.3 Jikes RVM简史  229 10.4 一个自足执行的运行时自举  230 10.5 运行时组件  234 10.6 经验教训  246 参考文献  247 第四部分 最终用户应用架构 第11章 GNU Emacs:滋长的特性是其优势  251 11.1 使用中的Emacs  252 11.2 Emacs的架构  254 11.3 滋长的特性  260 11.4 另外两个架构  262 第12章 当集市开始构建教堂  267 12.1 简介  267 12.2 KDE项目的历史和组织结构  269 12.3 Akonadi  274 12.4 ThreadWeaver  289 第五部分 语言与架构 第13章 软件架构:面向对象与面向函数  299 13.1 概述  299 13.2 函数式示例  302 13.3 函数式解决方案的模块性评价  305 13.4 面向对象视图  313 13.5 面向对象模块性的评价和改进  319 13.6 代理:将操作封装到对象中  323 致谢 328 参考文献 328 第14章 重读经典  331 14.1 所有东西都是对象  335 14.2 类型是隐式定义的  342 14.3 问题  348 14.4 砖块和灰浆建筑架构  352 参考资料  359 跋 漂亮地构建 363
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王祖龙Jason

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值