架构学习之从头开始学架构(2)

架构是什么?

在我踏进IT界的时候,我身边的人就在我耳边说,各种“架构”,我的耳朵都快听起茧了,所以“架构”是一个常见常闻的词了。我们会对新员工培训整个系统的架构,开发项目的时候在PDCP(IBM项目管理流程中的,总的来说就是项目怎么做)阶段的时候,会对项目整个技术架构做评审,或者学习业界比较有名的开源系统(例如Kafka、RocketMq 、Apollo、Dubbo)的架构,研究大公司的架构实现(例如,支付宝架构、京东架构,美团架构等等一系列)虽然架构离我们程序员近在咫尺,可以却远在千里,如果要探索架构的时候很难有人能够定义或者解释的比较明确,如果想把架构是什么解释的比较全面的话,我认为需要和我们常见的几个概念有关系那就是:系统、子系统、模块、组件、框架。为了方便大家的理解请理解下面这个图。
在这里插入图片描述

系统的定义

中国著名学者钱学森认为:系统是由相互作用相互依赖的若干组成部分结合而成的,具有特定功能的有机整体,而且这个有机整体又是它从属的更大系统的组成部分。运动着的若干部分,在相互联系、相互作用之中组成的具有某种确定功能的整体,谓之系统。

总结系统定义:
相互联系:系统是由相互作用相互依赖的若干有关联关系而组成的,并不是独立存在的。也不是毫不相干的个体,比如手机和显示器不能成为一个系统,但是 显示器,CPU,主板,内存,鼠标,键盘,机箱等组合起来就可以是一台个人电脑。
严格规范:系统内部都是按照严格规范规定协调和分工每个模块进行相应的工作,不能各自独立完成某个事件和工作单元。
能力更强:系统所产生的能力要远大于个体能力之和,系统在个体组合后,将会产生更强的新能力,就好个人电脑能让我们有联网购物,编写软件的能力,但是CPU,内存,主板,键盘这些都不具备这样的能力。

子系统的定义

这个跟系统概念差不多,逻辑思维上有差异,就是系统中可能有很多的子系统,也有可能这个子系统也是一个非常庞大的系统。所以系统和子系统不是存在大小关系,而是宏观上的认识。

1,支付宝是一个系统,它里面就有登录子系统,记账子系统,聊天子系统,花呗子系统,借呗子系统。
2,登录子系统又可以分为积分子系统,短信子系统,防伪子系统,验证码子系统,安全子系统等。
3,这个里面的短信子系统,验证码子系统不能在分的子系统了,但可以有很多的模块和组件来划分,在到物理上的话,就是基础设施了。比如 redis,mysql,mq,lucene,solr。

模块和组件

模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已。

从逻辑的角度来拆分系统后,得到的单元就是“模块”;从物理的角度来拆分系统后,得到的单元就是“组件”。划分模块的主要目的是职责分离;划分组件的主要目的是单元复用。其实,“组件”的英文 component 也可翻译成中文的“零件”一词,“零件”更容易理解一些,“零件”是一个物理的概念,并且具备“独立且可替换”的特点。
我用一个列子来说明一下,可以加深大家对这些概念的理解。如果一个图书管理系统,我们可以拆分为,登录模块,人员信息模块,图书管理模块,这样我们就把一个系统从逻辑职责上拆分了。这样更加的具有高内聚性,低耦合。物理上,我们可以有任务分配器(nginx,openresty,tengine),web容器(tomcat,Apache,jetty),数据库(mysql,Cassandra,oracle)这些都可以是零件,也可以替换。 这样组合在一起它就是一个系统的架构了。

框架和架构

这2个词语我觉得很多人基本上都会混在一起说,很多人都说我们是ssm架构,ssh架构,sbm架构,sbc架构,dubbo架构等等。框架是和架构比较相似的概念,且两者有较强的关联关系,所以在实际工作中,这两个概念有时我们容易分不清楚。
从定义来讲框架和架构还是很容易区分的:
框架:英文单词是"framework",框架是注重规范约束。就比如spring,给我们提供MVC规范,而且还有很多基础功能来快速帮助我们实现需求,比如(@Controller ,@Service ,security,)
架构:英文单词是"architecture" ,架构就是基础结构。但是基础结构又没有明确的概念,我们利用不同的角度和维度来分不同的结构,我已经在模块和组件中已经有过不同维度和角度的划分了。我们看一下图书管理系统的图解架构。
逻辑上:
在这里插入图片描述
物理架构上:
在这里插入图片描述
框架上:
我们可以利用MVC开发的规范来开发系统。所有在开发架构上,我们又变成了MVC架构。
在这里插入图片描述

总结架构

我们要做的东西都能抽象为一个系统,架构既可做动词也可做名词,作为动词就代表系统的设计,作为名词就代表系统的表现形式。
所以架构首先继承了系统的属性:
0、系统整体要有近期和远期价值
1、由多个有关系的个体组成
2、整体大于个体之和,能创造出新的价值
系统的架构从无到有由人来执行,所以也具备人思考和交流的属性:
0、思维带宽较小,不能同时考虑很多事情,需要把系统做分解(模块和组件)
1、线性思想和交流,多维关系要降级到二维关系
2、人作为个体的个性化-也即多样性,架构没用统一标准,适合,简单,能演进才是最重要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章