精华内容
下载资源
问答
  • 五种常见软件架构

    千次阅读 2021-01-10 09:42:53
    分层架构(layered architecture)是最常见软件架构,也是事实上的标准架构。如果你不知道要用什么架构,那就用它。 这种架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与...

    一、分层架构

    分层架构(layered architecture)是最常见的软件架构,也是事实上的标准架构。如果你不知道要用什么架构,那就用它。

    这种架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口通信。

    虽然没有明确约定,软件一定要分成多少层,但是四层的结构最常见。

    • 表现层(presentation):用户界面,负责视觉和用户互动
    • 业务层(business):实现业务逻辑
    • 持久层(persistence):提供数据,SQL 语句就放在这一层
    • 数据库(database) :保存数据

    有的软件在逻辑层和持久层之间,加了一个服务层(service),提供不同业务逻辑需要的一些通用接口。

    用户的请求将依次通过这四层的处理,不能跳过其中任何一层。

    优点

    • 结构简单,容易理解和开发
    • 不同技能的程序员可以分工,负责不同的层,天然适合大多数软件公司的组织架构
    • 每一层都可以独立测试,其他层的接口通过模拟解决

    缺点

    • 一旦环境变化,需要代码调整或增加功能时,通常比较麻烦和费时
    • 部署比较麻烦,即使只修改一个小地方,往往需要整个软件重新部署,不容易做持续发布
    • 软件升级时,可能需要整个服务暂停
    • 扩展性差。用户请求大量增加时,必须依次扩展每一层,由于每一层内部是耦合的,扩展会很困难

    二、事件驱动架构

    事件(event)是状态发生变化时,软件发出的通知。

    事件驱动架构(event-driven architecture)就是通过事件进行通信的软件架构。它分成四个部分。

     

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

    对于简单的项目,事件队列、分发器和事件通道,可以合为一体,整个软件就分成事件代理和事件处理器两部分。

     

    优点

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

    缺点

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

    三、微核架构

    微核架构(microkernel architecture)又称为"插件架构"(plug-in architecture),指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。

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

     

    优点

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

    缺点

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

    四、微服务架构

    微服务架构(microservices architecture)是服务导向架构(service-oriented architecture,缩写 SOA)的升级。

    每一个服务就是一个独立的部署单元(separately deployed unit)。这些单元都是分布式的,互相解耦,通过远程通信协议(比如REST、SOAP)联系。

    微服务架构分成三种实现模式。

    • RESTful API 模式:服务通过 API 提供,云服务就属于这一类
    • RESTful 应用模式:服务通过传统的网络协议或者应用协议提供,背后通常是一个多功能的应用程序,常见于企业内部
    • 集中消息模式:采用消息代理(message broker),可以实现消息队列、负载均衡、统一日志和异常处理,缺点是会出现单点失败,消息代理可能要做成集群

    优点

    • 扩展性好,各个服务之间低耦合
    • 容易部署,软件从单一可部署单元,被拆成了多个服务,每个服务都是可部署单元
    • 容易开发,每个组件都可以进行持续集成式的开发,可以做到实时部署,不间断地升级
    • 易于测试,可以单独测试每一个服务

    缺点

    • 由于强调互相独立和低耦合,服务可能会拆分得很细。这导致系统依赖大量的微服务,变得很凌乱和笨重,性能也会不佳。
    • 一旦服务之间需要通信(即一个服务要用到另一个服务),整个架构就会变得复杂。典型的例子就是一些通用的 Utility 类,一种解决方案是把它们拷贝到每一个服务中去,用冗余换取架构的简单性。
    • 分布式的本质使得这种架构很难实现原子性操作,交易回滚会比较困难。

    五、云架构

    云结构(cloud architecture)主要解决扩展性和并发的问题,是最容易扩展的架构。

    它的高扩展性,主要原因是没使用中央数据库,而是把数据都复制到内存中,变成可复制的内存数据单元。然后,业务处理能力封装成一个个处理单元(prcessing unit)。访问量增加,就新建处理单元;访问量减少,就关闭处理单元。由于没有中央数据库,所以扩展性的最大瓶颈消失了。由于每个处理单元的数据都在内存里,最好要进行数据持久化。

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

    • 处理单元:实现业务逻辑
    • 虚拟中间件:负责通信、保持sessions、数据复制、分布式处理、处理单元的部署。

     

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

    • 消息中间件(Messaging Grid):管理用户请求和session,当一个请求进来以后,决定分配给哪一个处理单元。
    • 数据中间件(Data Grid):将数据复制到每一个处理单元,即数据同步。保证某个处理单元都得到同样的数据。
    • 处理中间件(Processing Grid):可选,如果一个请求涉及不同类型的处理单元,该中间件负责协调处理单元
    • 部署中间件(Deployment Manager):负责处理单元的启动和关闭,监控负载和响应时间,当负载增加,就新启动处理单元,负载减少,就关闭处理单元。

    优点

    • 高负载,高扩展性
    • 动态部署

    缺点

    • 实现复杂,成本较高
    • 主要适合网站类应用,不合适大量数据吞吐的大型数据库应用
    • 较难测试

    http://www.ruanyifeng.com/blog/2016/09/software-architecture.html

    对javaer来说,分层架构的实例很多;事件驱动架构最经典的就是Netty,还有Spring mvc;插件架构最经典的就是eclipse,还有Shiro;微服务架构可以了解一下Spring boot和Spring cloud,国内的dubbo也很流行;云架构估计只有大公司才有。

    https://www.cnblogs.com/doit8791/p/9343826.html

    展开全文
  • 有没有想过要设计多大的企业规模系统?在主要的软件开发开始之前,我们必须选择一个合适的体系结构,它将为我们提供所需的功能和质量属性。因此,在将它们应用到我们的设计之前,我们应该了解不同的体系...

    有没有想过要设计多大的企业规模系统?

    在主要的软件开发开始之前,我们必须选择一个合适的体系结构,它将为我们提供所需的功能和质量属性。因此,在将它们应用到我们的设计之前,我们应该了解不同的体系结构。

    什么是架构模式?

    根据维基百科中的定义:

    架构模式是一个通用的、可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题。架构模式与软件设计模式类似,但具有更广泛的范围。

    在本文中,将简要地解释以下10种常见的体系架构模式,以及它们的用法、优缺点。

    1. 分层模式

    2. 客户端-服务器模式

    3. 主从设备模式

    4. 管道-过滤器模式

    5. 代理模式

    6. 点对点模式

    7. 事件总线模式

    8. 模型-视图-控制器模式

    9. 黑板模式

    10. 解释器模式

    一. 分层模式

    这种模式也称为多层体系架构模式。它可以用来构造可以分解为子任务组的程序,每个子任务都处于一个特定的抽象级别。每个层都为下一个提供更高层次服务。

    一般信息系统中最常见的是如下所列的4层。

    • 表示层(也称为UI层)

    • 应用层(也称为服务层)

    • 业务逻辑层(也称为领域层)

    • 数据访问层(也称为持久化层)

    使用场景:

    • 一般的桌面应用程序

    • 电子商务Web应用程序

    二. 客户端-服务器模式

    这种模式由两部分组成:一个服务器和多个客户端。服务器组件将为多个客户端组件提供服务。客户端从服务器请求服务,服务器为这些客户端提供相关服务。此外,服务器持续侦听客户机请求。

    使用场景:

    • 电子邮件,文件共享和银行等在线应用程序

    三. 主从设备模式

    这种模式由两方组成;主设备和从设备。主设备组件在相同的从设备组件中分配工作,并计算最终结果,这些结果是由从设备返回的结果。

    使用场景:

    • 在数据库复制中,主数据库被认为是权威的来源,并且要与之同步

    • 在计算机系统中与总线连接的外围设备(主和从驱动器)

    四. 管道-过滤器模式

    此模式可用于构造生成和处理数据流的系统。每个处理步骤都封装在一个过滤器组件内。要处理的数据是通过管道传递的。这些管道可以用于缓冲或用于同步。

    使用场景:

    • 编译器。连续的过滤器执行词法分析、解析、语义分析和代码生成

    • 生物信息学的工作流

    五. 代理模式

    此模式用于构造具有解耦组件的分布式系统。这些组件可以通过远程服务调用彼此交互。代理组件负责组件之间的通信协调。

    服务器将其功能(服务和特征)发布给代理。客户端从代理请求服务,然后代理将客户端重定向到其注册中心的适当服务。

    使用场景:

    • 消息代理软件,如Apache ActiveMQ,Apache Kafka,RabbitMQ和JBoss Messaging

    六. 点对点模式

    在这种模式中,单个组件被称为对等点。对等点可以作为客户端,从其他对等点请求服务,作为服务器,为其他对等点提供服务。对等点可以充当客户端或服务器或两者的角色,并且可以随时间动态地更改其角色。

    使用场景:

    • 像Gnutella和G2这样的文件共享网络

    • 多媒体协议,如P2PTV和PDTP

    • 像Spotify这样的专有多媒体应用程序

    七. 事件总线模式

    这种模式主要是处理事件,包括4个主要组件:事件源、事件监听器、通道和事件总线。消息源将消息发布到事件总线上的特定通道上。侦听器订阅特定的通道。侦听器会被通知消息,这些消息被发布到它们之前订阅的一个通道上。

    使用场景:

    • 安卓开发

    • 通知服务

    八. 模型-视图-控制器模式

    这种模式,也称为MVC模式,把一个交互式应用程序划分为3个部分,

    • 模型:包含核心功能和数据

    • 视图:将信息显示给用户(可以定义多个视图)

    • 控制器:处理用户输入的信息

    这样做是为了将信息的内部表示与信息的呈现方式分离开来,并接受用户的请求。它分离了组件,并允许有效的代码重用。

    使用场景:

    • 在主要编程语言中互联网应用程序的体系架构

    • 像Django和Rails这样的Web框架

    九. 黑板模式

    这种模式对于没有确定解决方案策略的问题是有用的。黑板模式由3个主要组成部分组成。

    • 黑板——包含来自解决方案空间的对象的结构化全局内存

    • 知识源——专门的模块和它们自己的表示

    • 控制组件——选择、配置和执行模块

    所有的组件都可以访问黑板。组件可以生成添加到黑板上的新数据对象。组件在黑板上查找特定类型的数据,并通过与现有知识源的模式匹配来查找这些数据。

    使用场景:

    • 语音识别

    • 车辆识别和跟踪

    • 蛋白质结构识别

    • 声纳信号的解释

    十. 解释器模式

    这个模式用于设计一个解释用专用语言编写的程序的组件。它主要指定如何评估程序的行数,即以特定的语言编写的句子或表达式。其基本思想是为每种语言的符号都有一个分类。

    使用场景:

    • 数据库查询语言,比如SQL

    • 用于描述通信协议的语言


    体系架构模式的比较

    下面给出的表格总结了每种体系架构模式的优缺点。

    名称优点缺点
    分层模式一个较低的层可以被不同的层所使用。层使标准化更容易,因为我们可以清楚地定义级别。可以在层内进行更改,而不会影响其他层。不是普遍适用的。在某些情况下,某些层可能会被跳过。
    客户端-服务器模式很好地建立一组服务,用户可以请求他们的服务。请求通常在服务器上的单独线程中处理。由于不同的客户端具有不同的表示,进程间通信会导致额外开销。
    主从设备模式准确性——将服务的执行委托给不同的从设备,具有不同的实现。从设备是孤立的:没有共享的状态。主-从通信中的延迟可能是一个问题,例如在实时系统中。这种模式只能应用于可以分解的问题。
    管道-过滤器模式展示并发处理。当输入和输出由流组成时,过滤器在接收数据时开始计算。轻松添加过滤器,系统可以轻松扩展。过滤器可重复使用。可以通过重新组合一组给定的过滤器来构建不同的管道。效率受到最慢的过滤过程的限制。从一个过滤器移动到另一个过滤器时的数据转换开销。
    代理模式允许动态更改、添加、删除和重新定位对象,这使开发人员的发布变得透明。要求对服务描述进行标准化。
    点对点模式支持分散式计算。对任何给定节点的故障处理具有强大的健壮性。在资源和计算能力方面具有很高的可扩展性。服务质量没有保证,因为节点是自愿合作的。安全是很难得到保证的。性能取决于节点的数量。
    事件总线模式新的发布者、订阅者和连接可以很容易地添加。对高度分布式的应用程序有效。可伸缩性可能是一个问题,因为所有消息都是通过同一事件总线进行的。
    模型-视图-控制器模式可以轻松地拥有同一个模型的多个视图,这些视图可以在运行时连接和断开。增加复杂性。可能导致许多不必要的用户操作更新。
    黑板模式很容易添加新的应用程序。扩展数据空间的结构很简单。修改数据空间的结构非常困难,因为所有应用程序都受到了影响。可能需要同步和访问控制。
    解释器模式高度动态的行为是可行的。对终端用户编程性提供好处。提高灵活性,因为替换一个解释程序很容易。由于解释语言通常比编译后的语言慢,因此性能可能是一个问题。

    原文作者:Vijini Mallawaarachchi

    原文地址:10 Common Software Architectural Patterns in a nutshell

    - END -


    作者:架构精进之路,专注软件架构研究,技术学习与个人成长,关注并私信我回复“01”,送你一份程序员成长进阶大礼包,欢迎勾搭。


    往期热文推荐:


    「技术架构精进」专注架构研究,技术分享

    Thanks for reading!

    展开全文
  • 上一篇推文:8 年开发,连登陆接口都写这么烂...你是否想知道企业大规模系统是如何设计的?在软件开发开始之前,我们必须选择一个合适的架构,能提供所需的功能和质量特性。因此,在将架构应用到我...

    上一篇推文:8 年开发,连登陆接口都写这么烂...

    你是否想知道企业大规模系统是如何设计的?在软件开发开始之前,我们必须选择一个合适的架构,能提供所需的功能和质量特性。因此,在将架构应用到我们的设计之前,我们应该了解各种不同架构的特点。

    58f05039dc4b283ae5d95c7b57109a45.png

    什么是架构模式?

    根据维基百科:
    架构模式是在软件架构上针对特定上下文件解决常见问题的通用、可复用的解决方案。架构模式与软件设计模式相似,但范围更广。
    在本文中,我将简要解释以下10种常见的体架构模式及其用法和优缺点。
    1、分层模式
    2、客户服务器模式(CS)
    3、主从模式
    4、管道过滤器模式
    5、代理模式
    6、P2P模式
    7、事件总线模式
    8、MVC模式
    9、黑板模式
    10、解释器模式

    1、分层模式

    此模式可用于构造可分解为子任务组的程序,每个子任务组处于特定的抽象级别。每一层都为下一层提供服务。
    信息系统中常见的四层模式如下:

    • 表示层(也称为UI层)

    • 应用层(也称服务层)

    • 业务逻辑层(也称领域层)

    • 数据访问层(也称持久化层)

    用途

    • 通用桌面应用

    • 电子商务应用

      94583656cbb691782f2c7b5ad56eeda4.png

    2、客户端服务器模式

    这个模式由两部分组成;一个服务器和多个客户端。服务器组件将为多个客户端组件提供服务。客户端向服务器请求服务,服务器向这些客户端提供相关服务。此外,服务器继续侦听客户机请求。

    用途

    在线应用程序,如电子邮件,文档共享和银行应用。

    5249726fb7c41e30d4079b22d1ca276b.png

    image

    3、主从模式

    这个模式由两部分组成;master和slaves。master组件将工作分配给相同的slave组件,并根据slave组件返回的结果计算最终结果。

    用途

    • 在数据库复制中,将主数据库视为中心负责写数据,从数据库与主数据库同步。

    • 连接到计算机系统总线上的外设(主驱动器和从驱动器)。

      d1b733c04054b9ee64d251f75b774151.png

    4、管道过滤器模式

    此模式可用于创建流数据处理系统。每个处理步骤都包含在一个过滤器组件中。要处理的数据通过管道传递。这些管道可用于缓冲或同步目的。

    用途

    • 编译器。连续的过滤器分别执行:词法分析、解析、语义分析和代码生成。

    • 信息处理工作流

      e8ceef734f68b14c6ce66c4ea323cca4.png

    5、代理模式

    此模式结合解耦组件构造分布式系统。这些组件可以通过远程服务调用,相互交互。代理组件负责协调组件之间的通信。
    服务器将其功能(服务和特征)发布到代理。客户端向代理请求服务,然后代理根据注册中心将客户端请求重定向到合适的服务。

    搜索公众号GitHub猿后台回复“前后端系统”,获取一份惊喜礼包。

    用途

    消息代理软件,如Apache ActiveMQ、Apache Kafka、RabbitMQ、JBoss Messaging。

    8548acedc75fea452ffa7cef1a342fe1.png

    6、P2P模式

    在此模式中,单个组件称为对等组件peer。对等组件既可以作为客户端向其他对等组建请求服务,也可以作为服务器向其他对等组件提供服务。对等组建可以充当客户端或服务器,也可以同时充当两者,它可以随时间动态地更改其角色。

    用途

    • 文件共享网络比如Gnutella和G2

    • 基于加密货币的产品,如比特币和区块链

      711c83fe56ae1c46a6670285ba0de2f9.png

    7、事件总线模式

    该模式主要处理事件,有4个主要组件;事件源、事件监听器、通道和事件总线。事件源将消息发布到事件总线上的特定通道。侦听器订阅特定的通道。当消息发布到它们订阅过的通道时,侦听器会得到通知。

    用途

    • 安卓开发

    • 通知服务

      c0125724bf9e98550cb057ba391d5c07.png
      image

    8、MVC模式(model-view-controller)

    这种模式,将交互式应用程序分为3个部分:
    1、模型-包含核心功能和数据
    2、将信息显示给用户(可以定义多个视图)
    3、处理来自用户的输入
    这样做是为了将信息的内部表示与信息呈现给用户和从用户接受信息的方式分离开来。它解耦了组件,并允许高效的代码重用。

    用途

    大部分编程语言都使用的web开发架构

    Web框架,如Django和Rails。

    3b98895f4e8fdc6de987b5bb2bb68d22.png

    9、黑板模式

    这种模式在没有确定性解决策略的问题方面很有用。黑板模式由3个主要部分组成。

    • 黑板-结构化的全局内存包含解决方案对象

    • 知识源-具有自己表示形式的专用模块

    • 控制组件-选择、配置和执行模块。
      所有的组件都可以访问黑板。组件可以生成添加到黑板上的新数据对象。组件在黑板上寻找特定类型的数据,并通过与现有的知识源进行模式匹配来找到这些数据。

    用途

    • 语音识别

    • 车辆识别与跟踪

    • 蛋白质结构识别

    • 声纳信号解析

    • ba9fd9dd71ede5b65a602d4e4b17c291.png

    10、解释器模式

    此模式用于设计组件,该组件用于解释专用语言编写的程序。它主要规定了如何对程序行求值,这些程序被称为用特定语言编写的句子或表达式。其基本思想是为语言的每个符号都建立一个类。

    用途

    • 数据库查询语言,如SQL。

    • 用于描述通信协议的语言。

    b4b439c843653a4520ed17077f09f336.png

    逆锋起笔是一个专注于程序员圈子的技术平台,你可以收获最新技术动态最新内测资格BAT等大厂的经验精品学习资料职业路线副业思维,微信搜索逆锋起笔关注!

    来源:Go语言由浅入深
    链接:jianshu.com/p/18944235727a

    版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!

    往期惊喜:

    软件开发管理的 11 条真理

    6 年软件开发,我的那些变与不变

    2021年 10 大流行软件测试工具

    程序员必知的 7 种软件架构模式

    Go 语言将成为恶意软件开发者的首选

    50fd1d78e61381fcdeeff4aa3d37b20e.png

    展开全文
  • 常见的五种软件架构

    千次阅读 2020-12-30 10:49:27
    一、软件架构是个什么概念,架构的定义: 1.软件架构是一个系统的草图。 2.软件架构描述的对象是直接构成系统的抽象组件。 3.各个组件之间的连接则明确和相对细致地描述组件之间的通讯。 4.在实现阶段,这些抽象组件...

    在这里插入图片描述

    一、软件架构是个什么概念,架构的定义:

    1.软件架构是一个系统的草图。
    2.软件架构描述的对象是直接构成系统的抽象组件。
    3.各个组件之间的连接则明确和相对细致地描述组件之间的通讯。
    4.在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。
    5.在面向对象领域中,组件之间的连接通常用接口来实现。

    二、架构师有细分,基本上可以分为三类:

    系统架构师:服务器负载,可靠性,伸缩,扩展,数据库切分,缓存应用等。
    应用架构师:理解业务,梳理模型,设计模式,接口,数据交互等。
    业务架构师:也可以叫业务领域专家、行业专家、产品咨询师、资深顾问通常我们说的架构师是1和2的结合。

    三、常见的五种软件架构

    软件架构(software architecture)就是软件的基本结构。

    合适的架构是软件成功的最重要因素之一。大型软件公司通常有专门的架构师职位(architect),只有资深程序员才可以担任。

    1、分层架构

    分层架构(layered architecture)是最常见的软件架构,也是事实上的标准架构。如果你不知道要用什么架构,那就用它。

    这种架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口通信。

    虽然没有明确约定,软件一定要分成多少层,但是四层的结构最常见。
    在这里插入图片描述

        表现层(presentation):用户界面,负责视觉和用户互动
        业务层(business):实现业务逻辑
        持久层(persistence):提供数据,SQL 语句就放在这一层
        数据库(database) :保存数据
    

    有的软件在逻辑层和持久层之间,加了一个服务层(service),提供不同业务逻辑需要的一些通用接口。

    用户的请求将依次通过这四层的处理,不能跳过其中任何一层。
    在这里插入图片描述

    优点

        结构简单,容易理解和开发
        不同技能的程序员可以分工,负责不同的层,天然适合大多数软件公司的组织架构
        每一层都可以独立测试,其他层的接口通过模拟解决
    

    缺点

        一旦环境变化,需要代码调整或增加功能时,通常比较麻烦和费时
        部署比较麻烦,即使只修改一个小地方,往往需要整个软件重新部署,不容易做持续发布
        软件升级时,可能需要整个服务暂停
        扩展性差。用户请求大量增加时,必须依次扩展每一层,由于每一层内部是耦合的,扩展会很困难
    

    二、事件驱动架构

    事件(event)是状态发生变化时,软件发出的通知。

    事件驱动架构(event-driven architecture)就是通过事件进行通信的软件架构。它分成四个部分。
    在这里插入图片描述

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

    对于简单的项目,事件队列、分发器和事件通道,可以合为一体,整个软件就分成事件代理和事件处理器两部分。

    优点

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

    缺点

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

    三、微核架构

    微核架构(microkernel architecture)又称为"插件架构"(plug-in architecture),指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。

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

    优点

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

    缺点

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

    四、微服务架构

    微服务架构(microservices architecture)是服务导向架构(service-oriented architecture,缩写 SOA)的升级。

    每一个服务就是一个独立的部署单元(separately deployed unit)。这些单元都是分布式的,互相解耦,通过远程通信协议(比如REST、SOAP)联系。
    在这里插入图片描述

    微服务架构分成三种实现模式。

        RESTful API 模式:服务通过 API 提供,云服务就属于这一类
        RESTful 应用模式:服务通过传统的网络协议或者应用协议提供,背后通常是一个多功能的应用程序,常见于企业内部
        集中消息模式:采用消息代理(message broker),可以实现消息队列、负载均衡、统一日志和异常处理,缺点是会出现单点失败,消息代理可能要做成集群
    

    优点

        扩展性好,各个服务之间低耦合
        容易部署,软件从单一可部署单元,被拆成了多个服务,每个服务都是可部署单元
        容易开发,每个组件都可以进行持续集成式的开发,可以做到实时部署,不间断地升级
        易于测试,可以单独测试每一个服务
    

    缺点

        由于强调互相独立和低耦合,服务可能会拆分得很细。这导致系统依赖大量的微服务,变得很凌乱和笨重,性能也会不佳。
        一旦服务之间需要通信(即一个服务要用到另一个服务),整个架构就会变得复杂。典型的例子就是一些通用的 Utility 类,一种解决方案是把它们拷贝到每一个服务中去,用冗余换取架构的简单性。
        分布式的本质使得这种架构很难实现原子性操作,交易回滚会比较困难。
    

    五、云架构

    云结构(cloud architecture)主要解决扩展性和并发的问题,是最容易扩展的架构。

    它的高扩展性,主要原因是没使用中央数据库,而是把数据都复制到内存中,变成可复制的内存数据单元。然后,业务处理能力封装成一个个处理单元(prcessing unit)。访问量增加,就新建处理单元;访问量减少,就关闭处理单元。由于没有中央数据库,所以扩展性的最大瓶颈消失了。由于每个处理单元的数据都在内存里,最好要进行数据持久化。

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

        处理单元:实现业务逻辑
        虚拟中间件:负责通信、保持sessions、数据复制、分布式处理、处理单元的部署。
    

    在这里插入图片描述

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

        消息中间件(Messaging Grid):管理用户请求和session,当一个请求进来以后,决定分配给哪一个处理单元。
        数据中间件(Data Grid):将数据复制到每一个处理单元,即数据同步。保证某个处理单元都得到同样的数据。
        处理中间件(Processing Grid):可选,如果一个请求涉及不同类型的处理单元,该中间件负责协调处理单元
        部署中间件(Deployment Manager):负责处理单元的启动和关闭,监控负载和响应时间,当负载增加,就新启动处理单元,负载减少,就关闭处理单元。
    

    优点

        高负载,高扩展性
        动态部署
    

    缺点

        实现复杂,成本较高
        主要适合网站类应用,不合适大量数据吞吐的大型数据库应用
        较难测试
    
    展开全文
  • 引子 在看 Scalable Frontend 1 — Architecture Fundamentals 的...在主要软件开发开始之前,我们必须选择一个合适的架构,它将为我们提供所需的功能和质量特性。因此,我们应该理解不同的架构,在将它们应用到我们
  • - 前言 -如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存、晋升空间。这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人...
  • 更多内容关注微信公众号:fullstack888常见的几种系统架构设计,接下来讲后面三个:1、单库单应用架构:最简单的,可能大家都见过2、内容分发架构:目前用的比较多3、读写分离架构:对于...
  • 什么是架构模式 根据维基百科, 架构模式是在给定上下文中解决软件架构常见问题的通用、可重用的解决方案。架构模式类似于软件设计模式,但范围更广。 在本文中,我会简单介绍下列10种常见的架构模式,及其用途、...
  • 软件架构是具有一定形式的结构化元素,即构件的集合,包括处理构件,连接构件和数据构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把架构的不同部分组合连接起来。 特点: 1、软件架构风格是...
  • 四种常见软件架构概述 良许Linux今天 来源:https://www.jianshu.com/p/e7b992a82dc0 前言 如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存、晋升...
  • 点击下方“民工哥技术之路”,选择“设为星标”回复“1024”获取独家整理的学习资料!想知道如何设计大型企业级的系统吗?在开始主要的代码开发之前,我们必须选择一种合适的体系架构,它将为我们提...
  • 常见软件架构模式

    2021-09-18 09:29:31
    什么是架构模式:架构模式是在给定上下文中解决软件架构常见问题的通用、可重用的解决方案。架构模式类似于软件设计模式,但范围更广。 下面简单介绍下列10种常见的架构模式,及其用途、优势和劣势。 分成模式: ...
  • 常用7种软件架构模式

    2020-12-23 09:35:57
    架构模式是对给定上下文的软件架构常见问题的一种通用的可复用的解决方案。 一种模式就是特定上下文的问题的一种解决方案。 大体上,主要有下面这7种架构模式: 分层架构; 多层架构; 管道 - 过滤器架构; 客户端 - ...
  • 如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存、晋升空间。这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面。 单体架构 单体架构...
  • 软件架构》总览

    2021-03-10 04:16:17
    软件架构和软件设计是一个话题的两个不同方面,它们都是关于如何构造软件来完成任务的,通常软件架构是指软件系统中较大的结构,而软件设计指较小的结构。因为系统架构影响着软件设计,所以很难准确定义软件架构和...
  • 软件架构师考试重点

    2021-10-08 17:36:12
    软件生命周期 可行性研究与计划 需求分析 概要设计 详细设计 实现 集成测试 确认测试 ...细化(抽象软件逻辑模型,设计软件架构,分析设计) 构建(完成系统构建,实施和测试) 交付(重构、修改、测试和
  • 01两种软件架构

    2021-01-06 19:47:14
    C/S和B/S是软件发展过程中出现的两种软件架构方式。 1.2 C/S架构(Client/Server 客户端/服务器) 特点:必须在客户端安装特定软件 优点:图形效果显示较好(如:3D游戏) 缺点:服务器的软件和功能进行升级,...
  • 转自:几种常见软件架构模式总结什么是系统架构(Architecture)设计不仅仅指的是外观和感觉,它还包括运作方式。—— 史蒂夫·乔布斯系统架构(System Architecture)、软件架构(Soft Architectuhttps://...
  • 软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这个世界的基础,并用来沟通的...
  • 软件架构课程大纲

    2021-09-15 14:54:24
    软件架构是软件业的一个重要研究领域,正受到越来越多的关注,其地位也日益明显地体现出来.而架构设计师——也就成为软件系统的最高设计者。此课程就是为有志成为卓越架构师的人准备的培训课程。作为架构设计师,需要...
  • 五种常见架构风格

    2021-09-21 10:20:49
    Garlan和Shaw将软件架构风格分为五大类,数据流风格、调用/返回风格、独立构件风格、虚拟机风格和仓库风格。其中: (1)数据流风格包括批处理序列架构风格和管道/过滤器架构风格; (2)调用/返回风格包括主程序/...
  • 软件架构设计说明书该怎么写?

    千次阅读 2021-03-30 00:42:02
    点击上方蓝字,关注我们背景架构设计不是架构师的专属工作,对非技术人员甚至是开发人员来说,从实实在在的需求到高神莫测的架构设计仿佛是一个神秘的过程,只有具有架构师头衔的人才能掌握各中玄妙,这...
  • 架构1. 什么是架构?关于架构这个概念很难给出一个明确的定义,也没有一个标准的定义。硬是要给一个概述,我认为架构就是对系统中的实体以及实体之间的关系所进行的抽象描述。架构始于建筑,是因为人...
  • 原文链接 https://blog.csdn.net/on_1y/article/details/60358117 架构风格与基于网络的软件架构设计 如今许多服务都采用了 RESTful API, 而 REST 这一架构风格,最早即来源于 Roy Thomas Fieldin
  • 操作系统-软件架构设计

    千次阅读 2021-12-08 22:38:01
    实现层面的网络I/O模型 说到网络I/O模型,大家往往会混淆阻塞和非阻塞、同步和异步这两对概念,最常见的概念混淆有三个: 认为非阻塞I/O(Non-Blocking IO)和异步I/O(asynchronous IO)是同一个概念。 认为Linux...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 206,979
精华内容 82,791
关键字:

常见的软件架构