程序员的成长绕不开架构设计,有时架构设计就像鸿沟一样挡在程序员晋升之路上,只要跨过去就可以海阔天空。 最近学习了李运华老师在极客时间的《从0开始学架构》文章,收获颇多,从课程中可以学习到:理解架构设计的本质和目的;掌握高性能和高可用架构模式;走进BAT标准技术架构实战;从编程到架构,实现思维跃迁。 在学习时,为了理解深刻便于复习思考整理了思维导图笔记,大家可以参考学习(本文暂时只是记录了基础架构的知识,其他章节的笔记后续再继续整理)。架构的定义 架构是顶层设计; 框架是面向编程或配置的半成品; 组件是从技术维度上的复用; 模块是从业务维度上职责的划分; 系统是相互协同可运行的实体。 架构设计的历史背景 软件架构的出现有其历史必然性。 20世纪60年代第一次软件危机引出了结构化编程,创造了模块概念; 20世纪80年代第二次软件危机引出了面向对象编程,创造了对象概念; 到了20世纪90年代软件架构开始流行,创造了组件概念。 我们可以看到,模块对象组件本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。 架构设计的目的 架构设计的主要目的是为了解决软件系统复杂度带来的问题。 架构复杂度来源 高性能: 软件系统中高性能带来的复杂度主要体现在两方面, 1。单台计算机内部为了高性能带来的复杂度; 2。多台计算机集群为了高性能带来的复杂度。 高可用: 系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。 高性能增加机器目的在于扩展处理性能;高可用增加机器目的在于冗余处理单元。 可扩展性: 可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修改就可以支持,无须整个系统重构或者重建。 设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。 低成本: 我们首先设定一个成本目标,当我们根据高性能、高可用的要求设计出方案时,评估一下方案是否能满足成本目标,如果不行,就需要重新设计架构;如果无论如何都无法设计出满足成本要求的方案,那就只能找老板调整成本目标了。 安全: 安全本身是一个庞大而又复杂的技术领域,并且一旦出问题,对业务和企业形象影响非常大。从技术的角度来讲,安全可以分为两类:一类是功能上的安全,一类是架构上的安全。 规模: 规模带来复杂度的主要原因就是量变引起质变,当数量超过一定的阈值后,复杂度会发生质的变化。