从零开始学架构-2

why:需要做资源容量预估,知道只架构师的一项工作内容,随再刷此书。

笔记:
架构设计的关键思维是判断和取舍,程序设计的关键思维是逻辑和实现。
基本概念:系统与子系统、模块与组件、框架与架构。
系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。
汽车是一个系统,有带人到目的地的能力。其中的组件如轮胎、发动机不具备这种能力,只有组合在一起,才能有带人去远方的能力。所以汽车是一个系统。
子系统和系统定义一样,只是观察的角度有差异,一个系统可能是另一个更大系统的子系统。

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

模块和组件都是系统的组成部分,只是从不同角度拆分系统而已。
从逻辑角度拆分系统后,得到的单元就是模块;从物理角度拆分系统后,得到的单元就是组件。划分模块的目的是职责分离,划分组件的目的是单元复用。
学生信息管理系统,这个系统从逻辑角度来拆分可分为登陆注册模块、个人信息模块,个人成绩模块;从物理角度来拆分,可拆为 Nginx、web 服务器、MySQL。

  1. 框架是组件规范:如 MVC 是常见的开发框架,类似 MVP、MVVP,J2EE 等框架。
  2. 框架提供基础功能的产品。例如 SpringMVC 就是 MVC 开发框架,除了满足 MVC 的规范,Spring 提供了很多基础功能来帮助我们实现功能,包括注解、Spring Security、Spring JPA 等。

软件架构是指软件系统的基础结构,创造这些基础结构的准则,以及对这些结构的描述。
框架(Fremework)关注的是规范,架构(Architecture)关注的是结构
架构中的基础结构没有明确说是从什么角度来分解。所以 SSH 框架、SSH 架构都在说。

从业务逻辑角度分解,学生管理系统架构为:
image.png
从物理部署角度分解,学生管理系统架构:
image.png
从开发规范分解,学生管理系统可以采用 MVC 框架开发
image.png
重新定义架构:软件架构指软件系统的顶层结构。

  1. 架构需要明确系统包含哪些个体(子系统、模块、组件)
  2. 架构需要明确个体运作和协作规则