模块:从逻辑角度拆分,主要目的是职责分离
组件:从物理角度拆分,主要目的是单元复用
框架:组件规范(开发规范),提供基础功能的产品。
架构:对软件系统结构的描述
2000名程序员历时一年,花费原子弹1/4的投入,生产100w行代码。最终以失败告终。
【人力总会有局限,当自身的能力不足以应对问题时,除了学习之外,也应该思考是否不是自己的问题,而是问题本身超过了人类的局限】
整个软件开发的历史,就是一部与复杂度斗争的历史。
而架构设计的主要目的就是为了解决复杂度带来的问题。
问题:
总结: 任务分解和任务分配一样,有一个度,超过这个度,性能反而下降。
架构与编程的鸿沟:不确定性。
编程是确定的,不管采用何种方式,执行结果都是肯定的。
而不同的架构可能会产生相同的结果。
合适优于业界领先。
优秀的架构都是在企业当前人力,条件,业务等各种约束下设计出来的。(生搬硬套不可取)
简单优于复杂。
长城的宏伟,悉尼歌剧院的艺术感,”复杂“在制造领域代表先进,在建筑领域代表领先,但在软件领域代表问题。
为什么软件的复杂会带来问题???
除了软件开发的复杂性之外,软件在投入使用后,需要不断变化。没听说过长城不断拆了重建吧。
演化优于一步到位。
对于建筑来说,永恒是主题;而对于软件来说,变化才是主题。
软件架构更像是一个人类的进化史:
优先解决最主要的复杂度问题。
Nginx负载均衡策略的算法选择