“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点 这里 可以跳转到教程。”
都说程序员的发展方向有两个: 一是一直钻研技术,往架构师方向发展 ; 二是转管理,往技术管理方向发展 。由于在管理的道路上已经“人满为患”了,大部分程序员的选择只有一个:往架构师方向发展。那么,如何才能成为一位优秀的架构师呢?成为一位架构师需要学习哪些技术知识、具备哪些能力呢?带着这种种的疑问,我阅读了《 从零开始学架构 》一书,该书是由 极客时间 App上的同名技术专栏改编而成。本书作者 李运华 老师是阿里巴巴资深技术专家,具备丰富的软件架构经验。
通过对本书的学习,我了解到了作为一位架构师需要具备的方方面面的知识。在这篇文章中,我分享一下自己的学习总结,供各位有志成为架构师的朋友参考。
作者在前言中提到,他大概从2006年开始参与架构设计,从最早开始接触架构设计,到自我感觉初步完整掌握架构设计,至少花费了6年时间;到自我感觉彻底掌握架构设计的精髓,至少花费了8年的时间。由此可见, 架构设计需要长期的实战才行 。在实践中,作者总结出 架构设计的关键思维是判断和取舍,程序设计的关键思维是逻辑和实现 。因此,对于想成为架构师的人来说,一定不能操之过急,要循序渐进地积累经验。
本书的主要内容分为 五个部分 ,分别是: 概念和基础、高性能架构模式、高可用架构模式、可扩展架构模式、架构实战 。
我用下面这张思维导图来概括本书的主要内容。
本书第一部分涉及到架构概念和基础知识,具体包括: 架构基础、架构设计原则和架构设计流程 。
我们通常所说的系统泛指由一群有关联的个体组成,根据某种规则运行,能完成个别元件不能单独完成的工作的群体; 软件模块 (Module) 是一套一致而互相紧密关联的软件组织,它包含了程序和数据结构两部分 ; 而软件框架 (Software Framework) 通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品 。那么,什么是软件架构呢?它指的是 软件系统的顶层结构 , 架构设计的主要目的是为了解决软件系统复杂度带来的问题 。
作者提到的架构设计原则有三个:第一, 合适原则 ,即合适的架构优于业界领先的架构;第二, 简单原则 ,即简单的架构优于复杂的架构;第三, 演化原则 ,即架构需要随着业务的发展而不断演进。作者认为, 真正优秀的架构都是在企业当前人力、条件、业务等各种约束条件下设计出来的,能够合理地将资源整合在一起并发挥出最大功效,并且能够快速落地 。
软件开发有一个过程,架构设计也有一个流程,主要包括:第一步, 分析出系统的复杂性 ;第二步, 架构师根据自己对业务的理解,挑选合适的架构模式进行组合,再对组合后的方案进行修改和调整 ;第三步, 通过 360 度环评的方式来评估备选方案,并且按照质量属性的优先级来判断备选方案的优劣 ;第四步, 通过分步骤、分阶段、分系统等方式,尽量降低方案复杂度 ;第五步, 采取设计团队的方式来进行设计,汇集团队经验,减少思维和经验盲区,让架构设计最终落地 。
本书第二部分涉及到高性能架构模式,主要包括: 存储高性能和计算高性能 。
存储高性能主要是 高性能数据库集群 ,第一种实现方式是“ 读写分离 ”,其本质是将访问压力分散到集群中的多个节点,但是没有分散存储压力;第二种实现方式是“ 分库分表 ”,既可以分散访问压力,又可以分散存储压力。
计算高性能主要有四种模型:第一, PPC 模型 (每次有新的连接时就新建一个进程去专门处理这个连接的请求);第二, TPC 模型 (每次有新的连接时就新建一个线程去专门处理这个连接的请求);第三, Reactor 模型 (其基础是I/O多路复用);第四, Proactor 模型 (非阻塞异步网络模式)。
本书第三部分涉及到高可用架构模式,主要包括: CAP 、 FMEA 、存储高可用、计算高可用、业务高可用 。
在架构设计上,有个非常经典的 CAP 理论 ,它三个核心要素是: C( 一致性 ) 、 A( 可用性 ) 和 P( 分区容忍性 ) 。CAP理论指 分布式系统中涉及读写操作时,一致性、可用性、分区容忍性三个要素只能保证两个,另外一个必须被牺牲 。分布式系统理论上不可能选择CA架构,只能选择CP或AP架构。
FMEA( 失效模式与影响分析 ) 是一种在各行各业都有广泛应用的可用性分析方法,通过对系统范围内潜在的故障模式加以分析,并按照严重程度进行分类,以确定失效对于系统的最终影响 。FMEA分析方法很简单,就是一个FMEA分析表,表中的内容包括: 功能点、故障模式、严重程度、故障原因、风险程度 。FMEA分析中不一定所有的问题都要解决,采取规避措施也可以。
本书第四部分涉及到可扩展架构模式,主要包括: 可扩展模式、分层架构、 SOA 架构、微服务、微内核架构 。
作者认为,软件系统与硬件、建筑系统最大的差异在于 软件是可扩展的 , 真正有生命力的软件系统都是在不断迭代和发展的 。所有的可扩展性架构设计背后的基本思想都可以总结为一个字: 拆 ,而拆分软件系统的方式有三种: 面向流程拆分、面向服务拆分和面向功能拆分 。可想而知,不同的拆分方式将得到不同的系统架构。
分层架构是很常见的架构模式,也叫 N 层架构 ,通常情况下,N至少是2层,一般不超过5层。无论采取何种分层维度,分层架构设计最核心的一点就是 需要保证各层之间的差异足够清晰,边界足够明显 。
SOA(面向服务的架构)提出的背景是企业内部的IT系统重复建设且效率低下,它的三个关键概念是: 服务、 ESB( 企业服务总线 ) 和松耦合 。在SOA架构中,每项业务功能都是一项服务,服务就意味着要对外提供开放的能力。
微服务是一种和SOA相似但本质上不同的架构理念,它的三个关键词是: small 、 lightweight 、 automated 。微服务和SOA不存在孰优孰劣,只是应用场景不同。
微内核架构也被称为 插件化架构 (Plug-in Architecture),是一种面向功能进行拆分的可扩展性架构,它通常用于实现基于产品的应用。微内核架构包含两类组件: 核心系统 (core system)和 插件模块 (plug-in modules)。
本书除了介绍架构设计理论之外,还用一个部分的内容介绍了 架构实战 ,包括: 消息队列设计实战、架构重构 等。此外,作者还在最后一章介绍了 开源系统 。
本书内容详尽、图文并茂,非常适合各位程序员朋友们阅读。就像作者在书中所说:每个程序员心中都有一个成为架构师的梦想,梦想是美好的,但道路是曲折的。要想成为一名合格的架构师,我们只能一步一个脚印,在摸爬滚打中提升自己的技能。
如果大家对本书的内容感兴趣,可以购买学习,也可以阅读我绘制的思维导图。下载链接如下,希望对大家了解架构设计有所帮助。