架构风格概述

架构风格定义了用于描述系统的术语表和一组指导构建系统的规则。

五大架构风格子风格
数据流风格【Data Flow】批处理【Batch Sequential】、管道-过滤器【Pipes And Filters】
调用/返回风格【Call Return】主程序/子程序【Main Program And Subroutine】、面向对象【Object orienred】、分层架构【Layered System】
独立构建风格【Independent Components】进程通信【Communicating Processes】、事件驱动系统(隐式调用)【Event System】
虚拟机风格【Virtual Machine】解释器【Interpreter】、规则系统【Rule Base System】
以数据中心风格【Data Centered】数据库系统【Database System】、黑板系统【Blackboard System】、超文本系统【Hypertext System】

数据流风格

file
file

优点

  • 松耦合【高内聚-低耦合】
  • 良好的重用性/可维护性
  • 可扩展性【标准接口适配】
  • 良好的隐蔽性
  • 支持并行

缺点

  • 交互性差
  • 复杂性高
  • 性能较差(每个过滤器都需要解析与合成数据)

典型实例

  • 传统编译器
  • 网络报文处理

数据流风格两大分类

批处理序列:大量整体数据、无需用户交互
管道-过滤器:流式数据、弱用户交互

返回/调用风格

file

返回/调用风格主要分为三类

  • 主程序/子程序:面向过程
  • 面向对象:对象的方法调用
  • 分层:层与层之间的方法调用

常用的为分层架构风格,详见搬砖方法论:分层策略

file

优点

  • 良好的重用性,只要接口不变可用在其它地方
  • 可维护性好
  • 可扩展性好,支持递增设计

缺点

  • 并不是每个系统都方便分层
  • 很难招到一个合适的、正确的层次抽象方法
  • 不同层次之间耦合度高的系统很难实现

特点

  • 各个层次的组件形成不同功能级别的虚拟机
  • 多层相互协同工作,而且实现透明

独立构建风格

file

优点

  • 松耦合
  • 良好的重用性、可修改性、可扩展性

缺点

  • 构建放弃了对系统计算的控制。一个构建触发一个事件时,不能确定其他构建是否会响应它。而且即使它知道事件注册了哪些构建的过程,它也不能保证这些过程被调用的顺序。
  • 数据交换的问题
  • 既然过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理就存在问题。

特点

  • 系统由若干子系统构成且称为一个整体
  • 系统有统一的目标
  • 子系统有主从之分
  • 每一子系统有自己的事件收集和处理机制

虚拟机风格

file

子分类优点缺点特点适合领域
解释器可以灵活应对自定义场景复杂度较高适用于需要“自定义规则”的场合
规则为中心可以灵活应对自定义场景复杂度较高在解释器的基础上增加经验规则适用于专家系统

以数据为中心风格

file

子分类优点缺点特点适合领域
数据库系统以数据为中心
黑办系统可更改性和可维护性;可重用的知识源;容错性和健壮性测试困难;不能保证有好的解决方案;难以建立好的控制策略;低效;开发困难;缺少并行机制在以数据为中心的基础上,使用中心数据触发业务逻辑部件语音识别、模式识别、图形处理、知识推理

闭环控制架构风格(过程控制)

file

  • 适合于嵌入式系统,用于解决简单闭环控制问题。
  • 经典应用:空调温控,定速巡航。

C2风格

file

基本规则

  • 构建和连接件都有一个顶部和一个底部。
  • 构建的顶部要连接到连接件的底部,构建的底部要连接到连接件的顶部,构建之间不允许直接连接
  • 一个连接件可以和任意数目的其他构件和连接件连接。
  • 当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。

层次架构风格

file

file

MVC架构风格

file

  • Model 是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • View 是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
  • Controller 是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVP架构风格

file

  • MVP是MVC的变种
  • MVP实现了V与M之间的解耦(V不直接使用M,修改V不会影响M)
  • MVP更好的支持单元测试(业务逻辑在P中,可以脱离V来测试这些逻辑,可以将一个P用于多个V,而不需要改变P的逻辑)
  • MVP中V要处理界面事件,业务逻辑在P中,MVC中界面事件由C处理

MVVM架构风格

file

RIA架构风格

file

  • 反应速度快
  • 易于传播
  • 交互性强

基于服务的架构(SOA)

服务是一种为了满足某项业务需求的操作、规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持。

file

file

  • 服务构件粗粒度,传统构件细粒度居多
  • 服务构件的接口是标准的,主要是WSDL接口,传统构件常以具体API形式出现
  • 服务构件的实现与语言无关,传统构件绑定某种特定语言
  • 服务构件可以通过构件容器提供QoS的服务,传统构件完全由程序代码直接控制

SOA的实现方式——WebService

file

  • 底层传输层
  • 服务通信协议层
  • 服务描述层
  • 服务层
  • 业务流程层
  • 服务注册层

SOA的实现方式——ESB

file

服务请求者与服务提供者之间解耦

  • 提供位置透明性的消息路由和寻址服务
  • 提供服务注册和命名的管理功能
  • 支持多种的消息传递范型
  • 支持多种可以广泛使用的传出协议
  • 支持多种数据格式及其相互转换
  • 提供日志和监控功能

关键技术

功能协议
发现服务UDDI、DISCO
描述服务WSDL、XML Schema
消息格式层SOAP、REST
编码格式层XML(DOM,SAX)
传输协议层HTTP、TCP/IP、SMTP等

微服务架构风格

file

优点

  • 小服务【专注于一件事】
  • 轻量级的通讯机制
  • 松耦合
  • 独立测试
  • 独立部署【简单部署】
  • 独立运行【每个服务独立在独立进程中】
  • 支持异构【例如每个服务使用不同数据库】
  • 更好的可用性与弹性
  • 化整为零,易于小团队开发

缺点

  • 分布式环境下的数据一致性【更复杂】
  • 测试的复杂性【服务间依赖测试】
  • 运行的复杂性

微服务与SOA对比

微服务SOA
能拆分的就拆分是整体的,服务能放在一起都放在一起
纵向业务划分是水平分多层
由单一组织负责按层级划分不同部门的组织负责
细粒度粗粒度
两句话可以解释明白几百字只相当于SOA的目录
独立的子公司类似于大公司里面划分了一些业务单元(BU)
组件小存在较复杂的组件
业务逻辑存在于每一个服务中业务逻辑横跨多个业务领域
使用轻量级的通讯方式,如HTTP企业服务产总线(ESB)充当了服务之间通讯的角色

云原生架构风格

【云原生】是基于分布部署和统一运管的分布式云,以容器、微服务、DevOps等技术为基础建立的一套云技术产品体系。

file

file

file

云原生架构设计原则

  • 服务化原则
  • 弹性原则
  • 可观测原则
  • 韧性原则
  • 自动化原则

MDA架构风格

file

MDA的3种核心模型

  • 平台独立模型(PIM):具有高抽象层次、独立于任何实现技术的模型。
  • 平台相关模型(PSM):为某种特定实现技术量身定做,让你用这种技术中可用的实现构造来描述系统的模型。PIM会被变换成一个或多个PSM。
  • 代码Code:用源代码对系统的描述(规约)。每个PSM都将被变换成代码。

ADL架构风格

ADL是这样一种形式化语言,它在底层语义模型的支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架。如:Aesop、MetaH、C2、Rapide、SADL、Unicon等。

ADL的三个基本元素

  • 构建:计算或数据存储单元、
  • 连接件:用于构件之间交互建模的体系结构构造块及其支配这些交互的规则。
  • 架构配置:描述体系结构的构件与连接件的连接图。

更多文章详见:www.aihailan.com/blog

发表评论