架构设计学习01--什么是架构?

说清楚什么是架构前,需要先解释几个概念:

系统与子系统

系统的概念

系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它有“总体”、“整体”或“联盟”的意思。

定义的关键内容有:

1.关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一期不能成为一个系统。

2.规则:系统内的个体需要按照指定的规则运作,而不是单个个体各自为政。规则规定了系统内个体分工和协作的方式。

3.能力:系统能力与个体能力本质上的差别,系统能力不是个体能力之和,而是产生了新的能力。

子系统的概念

子系统也是由一群有关联的个体所组成的系统,多半会是更大系统的一部分。

举例说明

以微信为例:

  • 微信本身是一个系统,包含聊天、登录、支付和朋友圈等子系统;
  • 朋友圈子系统又包含动态、评论、点赞等子系统;
  • 评论这个系统可能又包含防刷子系统、审核子系统、发布子系统和存储子系统等;
  • 评论审核子系统不再包含业务意义上的子系统,而是包括各个模块或者组件,这些模块或者组件本身也是另外一个维度上的系统。如MySQL、Redis

模块与组件

模块和组件的概念是经常被混淆的,因为有时候它们确实代表的是一样的东西。至于模块和组件,我这里就不去抄它们的维基百科定义了,因为看着挺费时间,而且你逐字逐句去分析,依然不容易懂。这里我就说说两者的区别。

模块

模块是从逻辑角度去看系统组成的,比如,很多系统都是由登录认证模块、用户模块、日志模块、XX模块…组成的,模块代表的是一组有关联关系的功能的集合。

组件

组件是个物理概念,或者说更偏向技术概念,比如编译器、MySQL数据库、Tomcat容器、Kafka消息中间件等等,作为开发人员的你,经上面这么一说,对组件应该马上就吃的很透了。

框架和架构

这两个概念,稍微啰嗦一点。

框架

一般是为了实现某业界标准或完成特定基本任务的软件组件规范,提供规范所要求的基础功能实现的软件产品。

嗯,首先它是一类产品,按照它的定义来看,它是有特定功能的。常见的框架,比如Spring、MyBatis等。

架构

架构指的是软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。

如果和框架对比,可以发现,架构更注重“结构”,框架更关注的是“规范”。其实,我相信大家是不会弄混淆的,但是需要说明的是,框架里面往往都是有深厚的架构设计的,哪怕有些架构是很小的,并不像分布式系统那么夸张。

给架构做个结论

上面说了这么多,无非是想把架构的含义理清楚,那么到这里,我们来下个结论吧。

软件架构指的是软件系统的顶层结构。

  • 首先,系统是一群关联个体的组成,这些个体可以是子系统、模块和组件等,架构的工作就是要明确系统包含哪些个体;
  • 其次,系统中的个体需要“根据某种规则”运作,架构需要明确个体运作和协作的规则;
  • 第三,架构是一种顶层设计,已经包含了系统的最大化和最小化模样。

PS:我早两年就对架构有自己的理解,就是:

架构是一种解决问题的方案(不是方法),是综合解决各类矛盾的药方,如果矛盾是无法完全解决的,那么架构的作用就是选择利益最大,损失最小的方式去解决问题。