从零开始学架构

文章整理

企业级消息通知系统,该如何做架构设计
史上最全的权限系统设计方案

从零开始学架构

基础概念

  • 系统:泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。
  • 子系统:也是由一群有关联的个体所组成的系统,一个系统可能是另外一个更大系统的子系统。

例如,把一个发动机和一台 PC 放在一起不能称之为一个系统,把发动机、底盘、轮胎、
车架组合起来才能成为一台汽车。

  • 模块:是一套一致且互相有紧密关联的软件组织, 它包含程序和数据结构两部分。
  • 组件:软件组件定义为自包含的、 可编程的、 可重用的、 与语言无关的软件单元, 软件组件可以很容易地被用于组装应用程序。
  • 模块与组件的区别:从逻辑的角度来拆分后得到的单元就是“模块”,从物理的角度来拆分系统得到的单元就是“组件”;划分模块的主要目的是职责分离,划分组件的主要目的是单元复用。

一个学生信息管理系统,这个系统从逻辑的角度来拆分,可以分为“登录注册模块”“个人信息模块”、“个人成绩模块”;从物理的角度来拆分,可以拆分为Nginx、 Web服务器、 MySQL。

  • 框架:为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时, 提供规范所要求之基础功能的软件产品。
    例如, SpringMVC 是 MVC 的开发框架。
  • 架构:指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。

框架关注的是“规范”,架构关注的是“结构”。框架的英文是Framework,架构的英文是Architecture。

“基础结构”这个概念并没有明确说是从什么角度来分解的。从不同的角度或维度,可以将系统划分为不同的结构。
从业务逻辑的角度分解,“学生管理系统”的架构如下图所示。
在这里插入图片描述
从物理部署的角度分解,“学生管理系统”的架构如下图所示。
在这里插入图片描述
从开发规范的角度分解,“学生管理系统”可以采用标准的MVC框架来开发,因此架构又变成了 MVC架构, 如下图所示。
在这里插入图片描述
以上这些“架构”,都是“学生管理系统”正确的架构,只是从不同的角度来分解而己,这
也是IBM 的RUP将软件架构视图分为著名的“4+1 视图”的原因。

架构设计的目的

架构设计的主要目的是为了解决复杂度带来的问题。

  • 通过熟悉理解需求,识别系统复杂性所在的地方,然后针对这些复杂点进行架构设计。
  • 架构设计并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点, 而是要识别出复杂点,然后有针对性地解决问题。
  • 理解每个架构方案背后所需要解决的复杂点,然后才能对比自己的业务复杂点,参考复杂点相似的方案。
  • 遵循这条准则能够让“老鸟”架构师有的放矢,而不是贪大求全。

复杂度来源

  • 高性能:
    • 单机复杂度
    • 集群的复杂度:任务分配、任务分解等
  • 高可用:
    高可用指“系统无中断地执行其功能”的能力。
    系统的高可用方案本质上都是通过“冗余”来实现高可用。
  • 可扩展性:
    可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系
    统不需要或仅需要少量修改就可以支持,无须整个系统重构或重建。
    • 预测变化
    • 应对变化: 第一种应对变化的常见方案是将“变化”封装在一个“变化层”,将不变的部分封装在一个独立的“稳定层”,其基本架构如下图所示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值