您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

架构师最常使用的5种架构模式及其适用场景分析

时间:2020-07-20 09:32:19  来源:  作者:

好莱坞电影中有多少情节?一些电影评论家说只有五个。您可以采用几种架构来实现应用程序?目前大多数程序都使用下面提到的五种架构之一。

在本文中,我将五种软件架构模式的优缺点以及适合场景提炼出来作为快速参考。你可以在单个系统中使用多个架构模式,它们的组合既是计算机科学,也是一门艺术。

一、分层架构

这种方法可能是最常见的方法,因为它通常围绕数据库构建,并且业务中的许多应用程序自然会倾向于将信息存储在RDBMS的表中。许多比较大的软件框架(例如JAVA EE,Drupal和Express)都是在这种架构下实现的,因此使用它们构建的许多应用程序自然都来自分层体系结构。

架构师最常使用的5种架构模式及其适用场景分析

 

Model-View-Controller(MVC)分层结构是大多数流行的Web框架提供的标准软件开发方法,显然是分层体系结构。数据持久层上方是服务层,它通常包含业务逻辑和有关数据库中数据类型的信息。视图层位于顶层,通常是cssJavaScript和带有动态嵌入式代码的html。在中间有一个控制层,该控制层具有用于转换在视图和模型之间移动的数据的各种规则和方法。

分层架构的优点:每个层可以只集中于自己的功能实现。这使得应用程序:

  • 容易维护
  • 容易单元测试
  • 易于分配单独的“角色”
  • 易于更新和扩展

适当的分层体系结构将开发层面进行隔离,这些层不受其他层的更改的影响,从而使重构更加容易。划分任务并定义单独的层是架构师面临的挑战。当需求很好地适应了模式时,这些层将易于解耦或分层开发。

适合:

  • 需要快速构建的新应用程序
  • 传统IT部门和流程的企业或业务应用程序
  • 具有尚不了解其他架构的经验不足的开发人员的团队
  • 需要严格的可维护性和可测试性标准的应用

二、事件驱动架构

事件驱动的体系架构根据数据生成一个“事件”,事件由“消息中间件”或“事件分发管理的中央单元”统一接收,并将事件分配特定类型的代码处理。

使用JavaScript编程网页涉及编写对诸如鼠标单击或击键之类的事件做出反应的小模块。浏览器本身会协调所有输入,并确保只有正确的代码才能得到正确的事件。浏览器中常见许多不同类型的事件,但是模块仅与相关的事件进行交互。这与分层体系结构非常不同,在分层体系结构中,所有数据通常都将穿过所有层。总体而言,事件驱动的体系结构:

  • 容易适应复杂,混乱的业务环境
  • 当出现新的事件类型时,很容易扩展

注意事项:

  • 如果模块之间可以相互影响,则[测试可能会很复杂
  • 当模块发生故障时,中央单元(或消息中间件)必须有一个事件备份计划。
  • 消息传递开销可能会降低处理速度,消息中间件必须缓冲以突发形式到达的消息时。
  • 当事件有非常不同的需求时,为事件开发数据结构可能会很复杂。
  • 维护基于事务的一致性机制很困难,因为接收事件的模块是解耦和独立的。

适合:

  • 具有异步数据流的异步系统
  • 各个数据块仅与多模块中的少数模块交互的应用程序
  • 用户界面

三、微内核-多插件架构

许多的应用程序都具有一组核心代码,这些代码在不同的模块下反复使用。例如,开发工具Eclipse将打开文件,批注,编辑文件并启动后台处理器。用于显示文件和对其进行编辑的代码是微内核的一部分。其他的插件扩展了Eclipse,从而扩展了其功能。

具体到解决方案就是将一些基本的核心的任务代码推入微内核。然后,不同的业务部门可以根据不同类型的声明编写插件。

注意事项:

  • 确定哪些代码是微内核中的内容通常是一门艺术。它应该保留经常被使用的代码。
  • 一旦许多插件依赖微内核,修改微内核可能非常困难,甚至不可能。唯一的解决方案就是修改插件。
  • 为内核函数选择正确的粒度很难事先完成,也几乎不可能在后期进行更改。

适合:

  • 工具类软件
  • 在核心代码与边缘代码之间有清晰区分的应用程序
  • 具有一组固定的核心函数和一组动态规则的应用程序

四、微服务架构

小宝宝既可爱又有趣,但是一旦变大,就很难操纵并且难以维护。微服务架构旨在帮助开发人员避免让自己的宝宝长大,笨拙,僵硬,烦人。它的目标不是创建一个大型程序,而是创建多个不同的小型程序。避免修改一个小bug,就需要重新部署整个大型应用的情况出现。

这种方法类似于事件驱动和微内核方法,但是主要用于解耦不同模块及任务。在许多情况下,不同的任务可能需要不同的处理量,并且用途可能会有所不同。所以微服务的特点是便于修改、便于扩展。使用负载均衡及服务发现的机制,在用户使用高峰期部署更多的微服务,保证服务的高可用;在用户低频服务时段缩减微服务,从而节省服务器资源。

注意事项:

  • 并非所有应用程序都可以拆分为相对独立的微服务单元。
  • 当任务分散在不同的微服务之间时,通信成本会更大。单个请求的响应时长会增加。

适合:

  • 快速发展新业务团队
  • 大型Web应用程序

五、高速缓存架构

许多网站都是围绕数据库构建的,只要数据库能够满足负载,它们就可以正常运行。但是当使用量达到顶峰,并且数据库无法跟上用户请求的速度时,整个网站就会瘫痪。将数据存储在内存中可以使许多工作更快,从而大幅度提高用户并发访问的支撑能力。

注意事项:

  • 对于内存数据库,事务的支持更加困难。
  • 开发专业的高速缓存数据的程序,对程序员的技术水平往往要求更高一些(至少比只会写增删改查的程序员要高)

适合:

  • 高频点击数据流和用户日志之类的大量数据处理
  • 低价值数据,有时可能会丢失而不会造成重大后果(比如用户访问量数据)
  • 读多写少的数据。比如新闻数据,写完之后几乎不改,但是有很多的人看。


Tags:架构模式   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在领域驱动架构中,通常会将查询和命令操作分开,我们称之为CQRS(命令查询职责分离Command Query Responsibility Segregation)。这张图是来自Martin Fowler大师的文章CQRS( http...【详细内容】
2021-07-30  Tags: 架构模式  点击:(133)  评论:(0)  加入收藏
作者 | Natan Silnitsky译者 | 平川策划 | 万佳在过去一年里,我一直是数据流团队的一员,负责 Wix 事件驱动的消息传递基础设施(基于 Kafka)。有超过 1400 个微服务使用这个基础...【详细内容】
2021-07-12  Tags: 架构模式  点击:(189)  评论:(0)  加入收藏
架构模式是软件架构中在给定环境下常遇到问题的通用的、可重用的解决方案。类似于软件设计模式但覆盖范围更广,致力于软件工程中不同问题,如计算机硬件性能限制、高可用性、业...【详细内容】
2020-12-28  Tags: 架构模式  点击:(147)  评论:(0)  加入收藏
架构模式是对给定上下文的软件架构中常见问题的一种通用的可复用的解决方案。一种模式就是特定上下文的问题的一种解决方案。然而,很多开发者至今还对各种软件架构模式之间的...【详细内容】
2020-10-30  Tags: 架构模式  点击:(96)  评论:(0)  加入收藏
好莱坞电影中有多少情节?一些电影评论家说只有五个。您可以采用几种架构来实现应用程序?目前大多数程序都使用下面提到的五种架构之一。在本文中,我将五种软件架构模式的优缺点...【详细内容】
2020-07-20  Tags: 架构模式  点击:(66)  评论:(0)  加入收藏
有没有想过企业规模的系统是如何设计的?在主要的软件开发开始之前,我们必须选择一个合适的架构,为我们提供所需的功能和质量属性。因此,在将它们应用于我们的设计之前,我们应该了...【详细内容】
2020-05-11  Tags: 架构模式  点击:(211)  评论:(0)  加入收藏
最常见的架构模式,将系统在横向维度上切分成几个部分,每个部分单一职责。网站一般分为三个层次:应用层、服务层和数据层,其具体结构如下图所示:...【详细内容】
2019-09-10  Tags: 架构模式  点击:(176)  评论:(0)  加入收藏
在做架构设计的时候,一般会采用一些架构模式,便于设计和以后需求变更时修改代码。如果设计模式选择得不正确那么很容易造成架构的混乱,代码也会变成怪物。分层模式分层模式分层...【详细内容】
2019-05-02  Tags: 架构模式  点击:(309)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条