软件架构的风格与分类

阮一峰的学习笔记《软件架构入门》,记载了5种最常用的软件架构:
1、分层架构
众所周知

2、事件驱动架构
通过事件进行通信的软件架构
这里写图片描述

事件队列(event queue):接收事件的入口
分发器(event mediator):将不同的事件分发到不同的业务逻辑单元
事件通道(event channel):分发器与处理器之间的联系渠道
事件处理器(event processor):实现业务逻辑,处理完成后会发出事件,触发下一步操作

优点
分布式的异步架构,事件处理器之间高度解耦,软件的扩展性好
适用性广,各种类型的项目都可以用
性能较好,因为事件的异步本质,软件不易产生堵塞
事件处理器可以独立地加载和卸载,容易部署

缺点
涉及异步编程(要考虑远程通信、失去响应等情况),开发相对复杂
难以支持原子性操作,因为事件通过会涉及多个处理器,很难回滚
分布式和异步特性导致这个架构较难测试

3、微核架构
又称为插件架构。指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。

内核(core)通常只包含系统运行的最小功能。插件则是互相独立的,插件之间的通信,应该减少到最低,避免出现互相依赖的问题。
这里写图片描述

优点
良好的功能延伸性(extensibility),需要什么功能,开发一个插件即可
功能之间是隔离的,插件可以独立的加载和卸载,使得它比较容易部署,
可定制性高,适应不同的开发需要
可以渐进式地开发,逐步增加功能

缺点
扩展性(scalability)差,内核通常是一个独立单元,不容易做成分布式
开发难度相对较高,因为涉及到插件与内核的通信,以及内部的插件登记机制

4、微服务架构

5、云架构
不甚了了

这个模式主要分成两部分:处理单元(processing unit)和虚拟中间件(virtualized middleware)。

处理单元:
实现业务逻辑

虚拟中间件:
负责通信、保持sessions、数据复制、分布式处理、处理单元的部署。
这里写图片描述

虚拟中间件又包含四个组件:

消息中间件(Messaging Grid):管理用户请求和session,当一个请求进来以后,决定分配给哪一个处理单元。

数据中间件(Data Grid):将数据复制到每一个处理单元,即数据同步。保证某个处理单元都得到同样的数据。

处理中间件(Processing Grid):可选,如果一个请求涉及不同类型的处理单元,该中间件负责协调处理单元

部署中间件(Deployment Manager):负责处理单元的启动和关闭,监控负载和响应时间,当负载增加,就新启动处理单元,负载减少,就关闭处理单元。

但前不久我读架构师考试教材,里面谈到软件的架构风格,分为5大类:

1、数据流风格
顺序执行。包括批处理序列和管道/过滤器。

2、调用/返回风格
系统采用了调用与返回机制,实质是一种分而治之的策略,主要思想为将复杂的大系统分解为若干子系统,降低复杂度,增加可修改性。
包括
1)主程序/子程序
2)面向对象风格
对象通过函数和方法进行交互。
3)层次结构风格
上层调用下层。
CS、BS、MVC、MVP都属于层次结构。

3、独立构件风格
强调系统中的每个构件都是相对独立的个体,它们之间不直接通信,以降低耦合度,提升灵活性。包括:
1)进程通信
通过消息传递来连接构件
2)事件子系统
基于事件的隐式调用风格。系统不直接调用构件,构件的过程注册到事件,当事件被触发,则注册于其中的所有构件都被执行。观察者模式。

我认为主要事件系统的优点在于调用和被调用没有直接关联,解耦。

4、虚拟机风格
人为构建一个运行环境,系统运行于其中,可以解析与运行自定义的语言,增加架构的灵活性。包括
1)解释器
2)以规则为中心

5、仓库风格
一个中央数据库,独立的构件围绕其上执行。
1)数据库
2)超文本系统
3)黑板。黑板相当于共享数据。知识源通过黑板交互。

那么教材里说的软件架构风格和阮一峰提到的5种常用架构是个什么关系呢?

按照我的理解,软件架构风格是软件的种类;而架构则是软件的结构类型。5种常用架构,可以试着归类到相应的风格里去:

1、分层结构 – 调用/返回风格

2、事件驱动架构 – 独立构件风格

3、微核架构 – 独立构件风格

4、微服务架构 – 独立构件风格

5、云架构 – 独立构件风格

这种归类估计有错,先记下来。

猜你喜欢

转载自blog.csdn.net/leftfist/article/details/80112165