0%

软件架构模式分析

  • 了解软件架构模型概念
  • 学习常见的架构模式
  • 熟悉架构模式应用方法

架构模式概念

(一切交流靠接口)

架构的定义

架构是构成一个系统的基础组织结构,包括系统的组件构成,组件间的相互关系、系统和其所在环境的关系、以及知道架构设计和演进的相关准则

架构的特征

架构风格

架构风格是以结构组织模式定义的一类系统族。一种软件体系结构风格刻划了一个具有类似结构和语义的系统家族。

内容:

  • 构件
  • 交互关系
  • 约束条件

举例:

好处

架构与框架的关系

框架是软件,架构不是软件

  • 通过框架实现了架构的沉淀落地
  • 框架的质量决定了系统整体架构的质量
  • 对框架的验证,同时也验证了整个系统架构

架构模式

定义:

  • 架构模式是对以往系统的架构抽象而形成的模板
  • 是对某个具体环境下问题的结构性解决方案
  • 内容包括
    • 提供一些实现定义好的子系统,指定他们的责任
    • 给出把他们组织在一起的法则和指南
架构风格与架构模式的关系
  • 概念上通常可互用
  • 架构风格反映了系统遵循的某种模式,是一类系统的抽象总结描述
  • 架构模式,是架构风格具体化的模板,可包含一种或多种结构风格,是为了实现某个目标,而形成的解决方案模板

模式

模式是表示上下文系统目解决方案三个方面关系的一个规则。

模式的层次分类

  • 架构模式

  • 设计模式

  • 代码模式

软件架构模式具体实例

常见的架构模式

现状难处:

没有选择适合的架构模式->没有做好架构设计->代码耦合->需求不好改->架构大泥球化

六种常见的架构模式

1. 分层架构模型

分层架构反模式:层开放

2. 面向服务的架构 — SOA架构

包括业务方法和IT技术架构两个方面

基本特征:

  • 服务的封装性
  • 服务的重用
  • 服务的互操作(既定的通信协议进行操作)
  • 服务是自治的功能实体(强调实体的完全独立自主能力和自我管理、恢复能力)
  • 服务之间的送耦合度
  • 服务是位置透明的(设计和部署对用户完全透明)
  • 明确定义的接口(WSDL标准化接口)

优缺点

3. 微服务架构模式

定义:

  • 微服务是一种架构模式,它提倡将单体应用(巨石应用)划分为一组小服务
  • 每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(常见:基于HTTP的RESTful API)
  • 这些服务基于业务功能目标构建,通过全自动部署的方式进行独立部署
  • 对这些服务采取最低限度的集中化管理,每个服务可采用不同开发语言、使用不同的数据存储方式

微服务架构特征

  • 通过服务实现组件
    • 组件:可被单独替换和升级的软件单元
    • 库:被连接到一个程序并通过内存函数调用的组件,和程序在一个进程内(类库)
    • 服务:服务进程外加载的组件,和调用它的程序是两个独立的进程
    • 通过服务实现组件化:
      • 服务可独立部署
      • 服务有更明确的组件接口
  • 基于业务功能搭建团队
    • 每个业务团队,负责构建及运营其产品
    • 传统根据技术层面->根据业务功能划分团队
  • 做产品而非项目
    • 团队负责产品的整个生命周期而非只限于开发上限
  • 智能化服务端点和哑管道
    • 基于服务源的HTTP API请求
    • 轻量级异步消息机制(哑管道:值轻量级的消息总线,值具备信息路由能力)
  • 去中心化的数据管理
    • 通过Domain-Driven-Design进行区域划分
    • 每个微服务管理自己的数据库
    • 最终一致性+补偿机制
  • 离散式治理
    • 每个微服务团体可以通过工具用不同的方式实现标准化
    • Tolerant Reader、Consumer-Driven Contacts

拓扑结构

细粒度:

粗粒度:

粒度拆分

4. 事件驱动架构模式

定义:

  • 异步开发
  • 由高度解构、单一母的组件构成,负责异步事件的接受和处理
  • 主要拓扑结构:中介拓扑结构、代理拓扑结构

中介拓扑结构

代理拓扑结构

5. 基于内存空间的架构(SBA)

定义:

  • 源于元组空间概念,也就是分布式内存概念
  • 通过冗余的内存数据,代替数据库来实现高伸缩性

适用范围:

  • 解决高性能、高并发的伸缩性需求
  • 不太适合使用传统大规模关系型数据库的应用

6. 微内核架构

定义:

  • 即插即用
  • 通过插件的形式添加额外属性到核心系统中
  • 新特性和核心系统隔离

架构特点:

  • 可嵌入到其他架构中
  • 很好地支持了渐进式设计和增量开发

适用场景:

  • 基于核心系统的外围应用
  • 基于核心版本的分支版本扩展

整体评估

架构模式应用方法

架构模型的选择

  • 架构模式的选择主要在于核心业务需求
  • 架构模式的评估主要在于核心质量需求

混搭的架构模式

架构模式与技术专业委员会的关系

practice: