程序员的成长绕不开架构设计,有时架构设计就像鸿沟一样挡在程序员晋升之路上,只要跨过去就可以海阔天空。
最近学习了李运华老师在极客时间的《从0开始学架构》文章,收获颇多,从课程中可以学习到:
理解架构设计的本质和目的;
掌握高性能和高可用架构模式;
走进 BAT 标准技术架构实战;
从编程到架构,实现思维跃迁。
在学习时,为了理解深刻便于复习思考整理了思维导图笔记,大家可以参考学习(本文暂时只是记录了基础架构的知识,其他章节的笔记后续再继续整理)。
架构的定义
架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。

架构设计的历史背景
软件架构的出现有其历史必然性。
20 世纪 60 年代第一次软件危机引出了“结构化编程”,创造了“模块”概念;
20 世纪 80 年代第二次软件危机引出了“面向对象编程”,创造了“对象”概念;
到了 20 世纪 90 年代“软件架构”开始流行,创造了“组件”概念。
我们可以看到,“模块”“对象”“组件”本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。

架构设计的目的
架构设计的主要目的是为了解决软件系统复杂度带来的问题。

架构复杂度来源
高性能:
软件系统中高性能带来的复杂度主要体现在两方面,
1.单台计算机内部为了高性能带来的复杂度;
2.多台计算机集群为了高性能带来的复杂度。

高可用:
系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。
高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元。

可扩展性:
可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修改就可以支持,无须整个系统重构或者重建。
设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。

低成本:
我们首先设定一个成本目标,当我们根据高性能、高可用的要求设计出方案时,评估一下方案是否能满足成本目标,如果不行,就需要重新设计架构;如果无论如何都无法设计出满足成本要求的方案,那就只能找老板调整成本目标了。
安全:
安全本身是一个庞大而又复杂的技术领域,并且一旦出问题,对业务和企业形象影响非常大。从技术的角度来讲,安全可以分为两类:一类是功能上的安全,一类是架构上的安全。
规模:
规模带来复杂度的主要原因就是“量变引起质变”,当数量超过一定的阈值后,复杂度会发生质的变化。
