【软件开发】架构设计Structure-上篇
Start:关注本公众号后,可直接联系后台获取排版美化的详细文档!
Hints:本篇文章所编纂的资料均来自网络,特此感谢参与奉献的有关人员。
架构设计本质:
系统的架构设计,是改善耦合的最好方式。架构设计的本质,就是:划分耦合的单位——也就是划分模块。系统应该划分成什么样的模块,代表了设计者对于系统应对的需求的基本理解。一旦能清晰的划分出模块了,其代码耦合就有了最基本的范围。而模块本身也是提示程序员理解系统的基本单位。
架构设计概念
功能模块:纵向划分模块
实现层次:横向切分层次
架构特征要求:
系统的非功能性特征,如可扩展性、可靠性、强壮性、灵活性、性能等。
1.可靠性(Reliable)。软件系统对于用户的商业经营和管理来说极为重要,因此软件系统必须非常可靠。
2.安全性(Secure)。软件系统所承担的交易的商业价值极高,系统的安全性非常重要。
3.可扩展性(SCAlable)。软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。只有这样,才能适应用户的市场扩展得可能性。
4.可定制化(CuSTomizable)。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。
5.可扩展性(Extensible)。在新技术出现的时候,一个软件系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展。
6.可维护性(MAIntainable)。软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映到现有系统中去。一个易于维护系统可以有效地降低技术支持的花费。
7.客户体验(Customer Experience)。软件系统必须易于使用。
8.市场时机(Time to Market)。软件用户要面临同业竞争,软件提供商也要面临同业竞争。以最快的速度争夺市场先机非常重要。
常见架构模式:
1分层模式 (Layered pattern)
2客户端/服务器模式 (Client-server pattern)
3主/从模式 (Master-slave pattern)
4管道/过滤器模式 (Pipe-filter pattern)
5代理模式 (Broker pattern)
6对等模式 (Peer-to-peer pattern)
7事件总线模式 (Event-bus pattern)
8模型/视图/控制器 (MVC) 模式 (Model-view-controller pattern)
9黑板模式 (Blackboard pattern)
10解析器模式 (Interpreter pattern)
1分层模式 (Layered pattern)
分层模式简介
分层模式用于对结构化设计的软件进行层次拆解,每个层次为独立的抽象,为其上层抽象提供服务。
系统通常被拆分为以下四个层次:
表示层(也称为 UI 层)
应用层(也称为服务层)
业务逻辑层(也称为领域层)
数据访问层(也称为持久化层)
分层建立方法:
以业务逻辑特征建模 ——使用分层模式,往往需要我们在大脑里对问题领域进行层次抽象,这种抽象最可信赖的原则,就是按照业务逻辑去做。比如现实业务中有一个角色,我们就建立一个角色的模块;如果我们有一个场景,就以此为名建立一个这样的模块。以业务逻辑建立的模块,本身也会让系统更容易被理解,因为在代码里能找到和现实中一一对应的概念。
分层模式优点:
1)重复代码减少了,功能开发更快了——一顶层开发只需要学习下层类库,就可以开始开发;近似功能模块被统一,修BUG覆盖面更好。
2)性能提升代码能更好的覆盖了——集中了通用实现代码,也集中了优化部分
3)可以并行开发,资深人员负责底层,一般人员负责上层
使用场景
通用桌面应用程序
电子商务 Web 应用
2 客户端/服务器模式 (Client-server pattern)
客户端/服务器模式由两个部分构成:一个服务器与多个客户端。服务器组件同时为多个客户端组件提供服务。客户端向服务器发启服务请求,服务器将相应服务信息回应给客户端。此外,服务器持续监听来自客户端的请求。
使用场景
电子邮件、文件共享及银行业务等在线应用
3. 主/从模式 (Master-slave pattern)
主/从模式由两个部分构成:主设备与从设备。主服务组件将作业分发给多个从设备组件,并根据这些从设备反馈的结果,计算生成最终结果。
使用场景
数据库复制,主数据库被认定为权威数据源,各从数据库与主数据保持同步
在计算机系统中通过总线互连的各设备(包括主设备与从设备)
4. 管道/过滤器模式 (Pipe-filter pattern)
管道/过滤器模式用于构造用于生成及处理数据流的系统。每个处理过程都封装在过滤器(filter)组件之中,要处理的数据通过 管道(pips) 进行投递。管道同时用于作为 过滤器(filter) 间的缓冲及同步。
使用场景
编译器,一系列的过滤器用于词法分析、语法分析、语义分析及代码生成
生物信息学的工作流
5. 代理模式(Broker pattern)
代理模式用于在结构化系统中对组件解耦。系统内各组件间采用远过程调用(remote service invocations)的方式交互。代理(Broker)组件充当组件间通讯的协调角色。
提供服务的组件将其能力(服务以及特性)发布给代理,客户端均向代理请求服务,由代理将请求重定向到先前已发布过对应服务的组件进行处理。
使用场景
消息中间件软件:Apache ActiveMQ,Apache Kafka,RabbitMQ 与 JBoss 等等
6. 对等模式 (Peer-to-peer pattern)
对等模式中的组件称之为对等体(peer),对等体既作为向其他对等体请求服务的客户端,同时也做为响应其他对等体请求的服务端。对等体可以在运行过程中动态地改变其角色,即,既可以单独做为客户端或服务端运行,又可同时作为客户端与服务端运行。
使用场景
网络文件共享:Gnutella 与 G2)
流媒体协议:P2PTV 与 PDTP.
流媒体应用: Spotify.
7. 事件总线模式(Event-bus pattern)
事件总线模式应用于事件处理,主要由四个组件构成:事件源(event source),事件侦听者(event listener),通道(Channel)以及总线(event bus)。事件源将消息发布到总线的特定通道,侦听者订阅相应的通道,事件源所发布的消息经通道通告给订阅通道的侦听者。
使用场景
Android 开发
通告(Notification)服务
8. 模型/视图/控制器 (MVC) 模式(Model-view-controller pattern)
模型/视图/控制器模式(简称 MVC 模式)将交互式应用程序拆分为三个部分:
模型(model) – 包含核心功能及数据
视图(view) – 呈现信息给用户(通过有多个视图)
控制器(controller) – 处理用户的输入操作
MVC 模式通过将内部信息表示、用户信息呈现以及用户操作接收分开的方式解耦组件,实现高效代码重用。
使用场景
主流开发语言所构建的互联网网页应用架构
Django 与 Rails 等网页应用开发框架
9. 黑板模式(Blackboard pattern)
黑板模式适用于 无预知确定解决策略 的问题,主要由三个组件构成:
黑板(blackboard) – 用于存储解空间对象的结构化全局内存
知识(knowledge)源 – 能自表意的专用模块
控制(control)组件 – 选择、配置与执行的模块
所有的组件均能访问黑板,组件可将新生成的数据对象写入黑板,也可以通过模式匹配从黑板中获取知识源所生成的特定数据。
使用场景
语音识别
车辆识别和追踪
蛋白质的结构鉴定
声纳信号解析
10. 解析器模式(Interpreter pattern)
解析器模式用于设计语言的解析程序,主要用于指定评估程序代码行,即解析出特定语言的语句与表达式,其核心思想是为语言的每个符号定义相应的类。
使用场景
SQL 等数据库查询语言
通讯协议描述语言
常见软件架构
1分层架构
分层架构(layered architecture)是最常见的软件架构,也是事实上的标准架构。如果你不知道要用什么架构,那就用它。这种架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口通信。虽然没有明确约定,软件一定要分成多少层,但是四层的结构最常见。
表现层(presentation):用户界面,负责视觉和用户互动
业务层(business):实现业务逻辑
持久层(persistence):提供数据,SQL 语句就放在这一层
数据库(database) :保存数据
2事件驱动架构
事件(event)是状态发生变化时,软件发出的通知。
事件驱动架构(event-driven architecture)就是通过事件进行通信的软件架构。它分成四个部分。
事件队列(event queue):接收事件的入口
分发器(event mediator):将不同的事件分发到不同的业务逻辑单元
事件通道(event channel):分发器与处理器之间的联系渠道
事件处理器(event processor):实现业务逻辑,处理完成后会发出事件,触发下一步操作
对于简单的项目,事件队列、分发器和事件通道,可以合为一体,整个软件就分成事件代理和事件处理器两部分。
3微核架构
微核架构(microkernel architecture)又称为"插件架构"(plug-in architecture),指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。
内核(core)通常只包含系统运行的最小功能。插件则是互相独立的,插件之间的通信,应该减少到最低,避免出现互相依赖的问题。
4微服务架构
微服务架构(microservices architecture)是服务导向架构(service-oriented architecture,缩写 SOA)的升级。
每一个服务就是一个独立的部署单元(separately deployed unit)。这些单元都是分布式的,互相解耦,通过远程通信协议(比如REST、SOAP)联系。
微服务架构分成三种实现模式。
-RESTful API 模式:服务通过 API 提供,云服务就属于这一类
-RESTful 应用模式:服务通过传统的网络协议或者应用协议提供,背后通常是一个多功能的应用程序,常见于企业内部
-集中消息模式:采用消息代理(message broker),可以实现消息队列、负载均衡、统一日志和异常处理,缺点是-会出现单点失败,消息代理可能要做成集群
5云架构
云结构(cloud architecture)主要解决扩展性和并发的问题,是最容易扩展的架构。
它的高扩展性,主要原因是没使用中央数据库,而是把数据都复制到内存中,变成可复制的内存数据单元。然后,业务处理能力封装成一个个处理单元(prcessing unit)。访问量增加,就新建处理单元;访问量减少,就关闭处理单元。由于没有中央数据库,所以扩展性的最大瓶颈消失了。由于每个处理单元的数据都在内存里,最好要进行数据持久化。
这个模式主要分成两部分:处理单元(processing unit)和虚拟中间件(virtualized middleware)。
处理单元:实现业务逻辑
虚拟中间件:负责通信、保持sessions、数据复制、分布式处理、处理单元的部署。
虚拟中间件又包含四个组件。
消息中间件(Messaging Grid):管理用户请求和session,当一个请求进来以后,决定分配给哪一个处理单元。
数据中间件(Data Grid):将数据复制到每一个处理单元,即数据同步。保证某个处理单元都得到同样的数据。
处理中间件(Processing Grid):可选,如果一个请求涉及不同类型的处理单元,该中间件负责协调处理单元
部署中间件(Deployment Manager):负责处理单元的启动和关闭,监控负载和响应时间,当负载增加,就新启动处理单元,负载减少,就关闭处理单元。
四大软件结构
1单体架构
单体架构比较初级,典型的三级架构,前端(Web/手机端)+中间业务逻辑层+数据库层。这是一种典型的Java Spring mvc或者Python Drango框架的应用。其架构图如下所示:
单体架构的应用比较容易部署、测试, 在项目的初期,单体应用可以很好地运行。然而,随着需求的不断增加, 越来越多的人加入开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。
2分布式应用
中级架构,分布式应用,中间层分布式+数据库分布式,是单体架构的并发扩展,将一个大的系统划分为多个业务模块,业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。
数据库也大量采用分布式数据库,如redis、ES、solor等。通过LVS/Nginx代理应用,将用户请求均衡的负载到不同的服务器上。其架构图如下所示:
该架构相对于单体架构来说,这种架构提供了负载均衡的能力,大大提高了系统负载能力,解决了网站高并发的需求。
3微服务架构
微服务架构,主要是中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。当应用的故障不会影响到其他应用,单应用的负载也不会影响到其他应用,其代表框架有Spring cloud、Dubbo等。
其架构图如下所示:
4 Serverless架构
当我们还在容器的浪潮中前行时,已经有一些革命先驱悄然布局另外一个云计算战场:Serverless架构。
参考资料:
软件体系架构阅读笔记(九) - 算法网 (itpcb.com)
https://itpcb.com/a/701414
软件架构概览-架构-火龙果软件工程 (uml.org.cn)
http://www.uml.org.cn/zjjs/zjjs-bk.asp
常用软件架构模式_软件架构模式的处理过程_经典软件架构模式_常用16味药膳药材_新闻头条 (xinwentoutiao.net)
https://www.xinwentoutiao.net/jishu/20200502/1276760.html
MVC、MVP、MVVM的区别和联系(精讲版) (biancheng.net)
http://c.biancheng.net/view/7743.html#:~:text=MVC%E3%80%81MVP%E3%80%81MVVM%20%E4%B8%89%E8%80%85%E7%9A%84%E4%B8%BB%E8%A6%81%E5%8C%BA%E5%88%AB%E5%B0%B1%E5%9C%A8%E4%BA%8E%E9%99%A4%20View%20%E5%B1%82%E5%92%8C%20Model%20%E5%B1%82%E4%B9%8B%E5%A4%96%E7%9A%84%E7%AC%AC%E4%B8%89%E5%B1%82%EF%BC%8C%E8%BF%99%E4%B8%80%E5%B1%82%E7%9A%84%E4%B8%8D%E5%90%8C%E4%BD%BF%E5%BE%97,MV%20%E7%B3%BB%E5%88%97%E6%A1%86%E6%9E%B6%E5%8C%BA%E5%88%86%E5%BC%80%E6%9D%A5%E3%80%82%20%E5%85%B6%E5%AE%9E%E5%BE%88%E9%9A%BE%E8%AF%B4%E5%87%BA%20MVC%E3%80%81MVP%E3%80%81MVVM%20%E5%93%AA%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%A5%BD%EF%BC%8C%E4%BB%8E%E8%A1%A8%E9%9D%A2%E4%B8%8A%E7%9C%8B%EF%BC%8C%E6%98%BE%E7%84%B6%E6%98%AF%20MVVM%20%E6%9C%80%E5%A5%BD%EF%BC%8C%E4%BD%BF%E7%94%A8%E8%B5%B7%E6%9D%A5%E6%9B%B4%E6%96%B9%E4%BE%BF%EF%BC%8C%E4%BB%A3%E7%A0%81%E7%9B%B8%E5%AF%B9%E4%B9%9F%E8%BE%83%E5%B0%91%E3%80%82
Android安卓架构MVC、MVP、MVVM之间的区别和联系(图解+案例+源码)_快乐李同学的博客-CSDN博客_android mvc mvp mvvm区别
https://blog.csdn.net/wq6ylg08/article/details/105023009
模式浅谈_风一样的少年-CSDN博客_mvc mvp mvvm
https://blog.csdn.net/qq_42127861/article/details/105876263
MVC、MVP、MVVM特点及三者的区别_Ancecis的博客-CSDN博客
https://blog.csdn.net/Ancecis/article/details/104204326
MVC,MVP 和 MVVM 的图示 - 阮一峰的网络日志 (ruanyifeng.com)
https://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html
MVC、MVP、MVVM模式的概念与区别 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/377518336
MVC、MVP、MVVM模式的概念与区别 - 简书 (jianshu.com)
https://www.jianshu.com/p/ff6de219f988
简单介绍 10 个常见的软件架构 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/41395345#:~:text=%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D%2010%20%E4%B8%AA%E5%B8%B8%E8%A7%81%E7%9A%84%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%201%20%E5%88%86%E5%B1%82%E6%A8%A1%E5%BC%8F%20%28Layered%20pattern%29%202,%E6%A8%A1%E5%BC%8F%EF%BC%88Model-vi%20...%209%20%E9%BB%91%E6%9D%BF%E6%A8%A1%E5%BC%8F%EF%BC%88Blackboard%20pattern%EF%BC%89%2010%20%E8%A7%A3%E6%9E%90%E5%99%A8%E6%A8%A1%E5%BC%8F%EF%BC%88Interpreter%20pattern%EF%BC%89
五种常见软件架构 - 时间朋友 - 博客园 (cnblogs.com)
https://www.cnblogs.com/doit8791/p/9343826.html
浅析常用软件架构的三种架构模型 - 云+社区 - 腾讯云 (tencent.com)
https://cloud.tencent.com/developer/article/1116141
十大常用软件架构模式简介 - 简书 (jianshu.com)
https://www.jianshu.com/p/128ec31551b7
四大常用的软件架构,来看看你们公司用哪种?
-程序人生-Web开发者网 (webkfz.com)
http://webkfz.com/cxrs/eass.html
最常用的4 大软件架构 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/343457113
软件架构入门 - 阮一峰的网络日志 (ruanyifeng.com)
https://www.ruanyifeng.com/blog/2016/09/software-architecture.html
软件架构设计-软件架构风格、分层架构 - 惊觉 (leheavengame.com)
http://leheavengame.com/article/60dbbb53049f556e1a231ffe
《软件架构设计》学习笔记 (uml.org.cn)
http://uml.org.cn/zjjs/201307151.asp
逻辑架构和物理架构在架构设计中的应用 (uml.org.cn)
http://www.uml.org.cn/zjjs/200906045.asp
软件架构设计 (uml.org.cn)
http://www.uml.org.cn/zjjs/201107193.asp
《软件架构》总览 | 并发编程网 – ifeve.com
http://ifeve.com/%E3%80%8A%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%E3%80%8B%E6%80%BB%E8%A7%88/
公众号二维码
End:如果有兴趣了解金融量化交易和其他数据分析的实用技术,欢迎关注本公众号