点击上方“分布式实验室”关注公众号

回复“1”抽取纸质技术书


 1 

分层模式(Layered Pattern (n-tier))

分层架构模式是最常见的模式之一。分层模式背后的理念是,具有相同功能的组件将被组织成水平层。因此,每一层在应用程序中都扮演着特定的角色。

在这种模式中,我们对应用程序可以拥有的层数没有限制。在这方面,我们还提倡关注点分离的概念。分层模式风格抽象了整个软件的视图;同时提供足够的细节,以了解各个层的角色和职责以及它们之间的关系。分层模式的典型实现如下:

  • UI展示层(UI/Presentation Layer):渲染并运行用户界面,向服务器应用程序发送请求。

  • 应用层(Application Layer):包含表示层、应用程序层、域对象层和持久化层。

  • 域对象层/业务层(Domain/Business Layer):该层包含所有业务逻辑、实体、事件和其他包含业务逻辑的对象类型。

  • 数据库层(Database Layer):这是数据层,用于持久化数据,应用服务器将使用这些数据。

例子:桌面应用程序、电子商务、Web应用程序等。

参考例子:https://github.com/bxcodec/go-clean-arch


 2 

客户端-服务器模式(Client-Server Pattern)

这是最简单的架构模式,由一台服务器和多个客户端组成。这种模式是一种分布式架构,在资源/服务的提供者(称为服务器)和服务请求者(称为客户端)之间划分任务/工作负载。

在客户端-服务器模式中,当客户端向服务器发送数据请求时,服务器接受请求的进程,并向客户机发送所需的数据。客户不共享他们的任何资源。

例子:Email、文档共享、银行等


 3 

事件总线模式(Event-Bus Pattern (Event-Driven Architecture))

该模式是一种分布式异步体系架构模式,用于创建高度可扩展的响应式应用程序。适用于从小型到复杂的各级应用程序技术栈。此模式的主要思想是异步传递和处理事件。

这个模式包含四个组件:

  • 事件源(Event Source)

  • 事件监听器(Event Listener)

  • 通道(Channel)

  • 事件总线(Event Bus)

源将消息发布到事件总线上的特定通道。监听器订阅特定的频道,监听器可以获取发布到其订阅的频道的消息。

例子:电子商务、手机应用程序、通知服务等


 4 

代理人模式(Broker Pattern)

此模式可用于构造具有通过远程服务调用进行交互的解耦组件的分布式系统。代理组件负责协调组件之间的通信;例如转发请求,以及传输结果和异常。

服务器将其能力(服务和特性)发布给代理(Broker)。客户端向代理请求服务,然后代理将客户端的请求重定向到合适的服务。

例子:消息Broker程序,如Apache ActiveMQ、Apache Kafka、RabbitMQ、JBOSS Messaging等


 5 

微服务模式(Microservices Pattern)

在这种模式中,服务通过使用HTTP/REST等同步协议或AMQP(高级消息队列协议)等异步协议进行通信。服务可以独立开发和部署,每个服务都有自己的数据库。服务之间的数据一致性是通过使用Saga模式(一系列本地事务)来维护的。

例子:可以在许多用例上实现,尤其是广泛的数据管道处理上


 6 

点对点模式(Peer-to-Peer Pattern)

在通用客户端-服务器体系架构中,多个客户端与中央服务器通信。但P2P模式由分散的对等网络组成。

在这种模式中,节点的行为类似于客户端和服务器。对等点既可以作为客户端向其他对等点请求服务,也可以作为服务器向其他对等点提供服务。

P2P网络在节点之间分配工作负载,所有节点贡献并消耗网络中的资源,而不需要集中的服务器。对等方可能会随着时间动态地改变其角色。

例子:文件分享网络、多媒体协议PDTP、P2PTV、比特币、区块链等


 7 

黑板模式(Blackboard Pattern)

这种模式对于不知道确定性解决方案策略的问题很有用。

所有部件都可以接触到黑板。组件可能会产生新的数据对象,这些对象将被添加到黑板上。组件在黑板上寻找特定类型的数据,并通过与现有知识源的模式匹配找到这些数据。

这个模式包含三个组件:

  • 黑板(blackboard):含解决方案空间中的对象的结构化全局内存

  • 知识源(knowledge source):具有自己表示形式的专用模块

  • 控制组件(control component):选择、配置和执行模块。

例子:速度识别、蛋白质结构识别、声纳信号解释、机器学习程序等


 8 

组件模式(Component-based Pattern)

基于组件的软件工程(Component-based software engineering,简称CBSE)或基于组件的开发(Component-Based Development,简称CBD)是针对系统的广泛功能,进行关注点分离的软件工程方式。此方式是以复用为基础的作法,定义、实现许多松耦合的独立组件(Component),再将组件组合成为系统。此作法的目的是希望在软件本身的短期益处以及开发软件组织的长期益处之间获取平衡。

一旦组件进行了划分,可以将组件分布式的开发部署,就会演化成面向服务或者微服务的架构。

例子:常见大型项目中或者单个服务中


 9 

管道模式(Pipes和filters)

管道(pipeline)由一系列处理元素(进程、线程、协同程序、函数等)组成,每个元素的输出都是下一个元素的输入;这个名字类似于一个物理管道。通常在连续元素之间提供一定量的缓冲。

在这些管道中流动的信息通常是记录流、字节流或比特流,管道中的元素可以称为过滤器(filter);这也称为管道和过滤器设计模式。将元素连接到管道中类似于函数合成。

管道模式可以将数据的处理解耦,并且可以动态的增加或者删除特定的处理流程。每个处理单元可以结合下面插件模式,实现定制化。

例子:多任务操作系统、数据处理程序等


 10 

插件模式

在计算技术中,插件(或插件、外接程序、外接程序、外接程序或外接程序)是一种软件组件,用于向现有计算机程序添加特定功能。当程序支持插件时,它会启用自定义功能。

插件模式可以方便对程序进行扩展,以及动态实现功能的开启和禁用等功能,方便进行定制化。

例子:IDE程序如Eclipse,IDEA Intellj、网络应用程序入netty等

本文源自公众号专家极客圈,分布式实验室已获完整授权。

推荐阅读:《高并发是一种架构思维模式》


点击下方卡片关注分布式实验室,和我们一起

关注分布式最佳实践

 点击上方卡片关注分布式实验室,掌握前沿分布式技术

新的一年,想一起学习K8s、考CKA证书吗?来,这里有最好的学习方案,线下3天封闭式培训,15人小班课,考不过免费复训。Kubernetes实战班上海站4月8日开班,扫描下方二维码了解详情。

10种常用的软件架构模式相关推荐

  1. 10种常见的软件架构模式-快速记忆

    10种常见的软件架构模式-快速记忆 这里通过数字宫殿的方法快速记忆10种常见的设计模式,通过记忆名字+理解的情况下熟悉常见的软件架构模式 文章目录 10种常见的软件架构模式-快速记忆 前言 一.快速记 ...

  2. 10 个常用的软件架构模式

    你是否曾经思考过如何设计大型的企业级系统?在决定启动软件开发之前,首要的是选择恰当的架构来指引系统的功能及质量属性设计.因此在将软件架构应用于设计之前,必需要了解常用的架构模式. 什么是架构模式? W ...

  3. 10种常见的软件架构模式

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

  4. 5种主要的软件架构模式

    点击上方"Java之间",选择"置顶或者星标" 你关注的就是我关心的! 译者:王延飞 译文链接:https://dzone.com/articles/5-maj ...

  5. **10种常用的网络营销方法**

    **10种常用的网络营销方法** 网络营销产生于20世纪90年代,发展至今已演变出越来越多的营销方法,在国内随着互联网影响的进一步扩大,人们对网络营销认知的进一步加深,网络营销方法手段也是各种推陈出新 ...

  6. 计算机网络对等模式,计算机网络有两种常用的工作模式,它们是对等模式和客户/服务器模式。QQ聊天属于________模式。...

    计算机网络有两种常用的工作模式,它们是对等模式和客户/服务器模式.QQ聊天属于________模式. 更多相关问题 Maria, Enclosed is the schedule for this y ...

  7. 10种常用的网络营销方法

    网络营销产生于20世纪90年代,发展至今已演变出越来越多的营销方法,在国内随着互联网影响的进一步扩大,人们对网络营销认知的进一步加深,网络营销方法手段也是各种推陈出新,下面就介绍如今网络营销最常用的1 ...

  8. c语言常用滤波算法,10种常用滤波算法C实现.c

    /* 10种简单的数字滤波C语言源程序算法 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1.限副滤波 */ /*  A值可根据实际情况调整 val ...

  9. MySQL的10种常用数据类型

    MySQL的数据类型 常用的数据类型有: 整型(xxxint) 位类型(bit) 浮点型(float和double.real) 定点数(decimal,numeric) 日期时间类型(date,tim ...

最新文章

  1. linux下用js生成xml,js2xml:将javascript字符串转换为xml
  2. 使用matlab做可重复性实验结果——rng
  3. noip2016前的话[漫谈]
  4. c++.net 托管类封装非托管类
  5. linux user 用户管理
  6. C语言树形打印二叉树
  7. 微服务调用传string值_springCloud微服务项目 构建公共的feign调用
  8. Django项目知识点(五)
  9. 魔术命令python_Python前10个魔术命令可以帮助您提高生产率
  10. Scala的异常操作
  11. es6 TypedArray视图
  12. OPPO关联公司被授权“脑电波采集方法”相关专利
  13. 【图像去噪】基于matlab GUI中值+小波+维纳+滤波器图像去噪【含Matlab源码 616期】
  14. pgAdmin III 导出excel数据
  15. 操作系统-io设备基本概念和分类
  16. 5.ViewPage2使用及坑点解决
  17. 关于redis (error) CLUSTERDOWN Hash slot not served
  18. 2019我依旧满腔热血,追寻爱与梦想
  19. “我 33岁,阿里程序员,税后年薪170万,不配征婚?”
  20. 小程序uni-app介绍

热门文章

  1. 跪求下方支付宝生活号收款码代码或者方法
  2. JS中的任务队列(详解)
  3. 【入门算法】思维导图
  4. VC6.0 在WIN10专业版下如何完美运行。(附西红柿助手)
  5. SQL2008数据类型分类及含义
  6. 计算机Logical_test公式,excel中if函数的logical_test是公式,怎么写if公式?
  7. ks(洛伦兹曲线)指标理解
  8. 正则匹配数字,大小写字母和一些自定义标点符号
  9. Linux给每个数据后边加逗号,Linux awk如何将文件某列按照逗号分隔-逗号分隔值文件...
  10. 硬件电路开发中晶体三极管常用知识