zoukankan      html  css  js  c++  java
  • 常见软件架构风格

    软件架构决策派定义中列举了一系列架构设计阶段需要完成的决策,其中包括“确定架构风格”,那么什么是架构风格?都有哪些常见的架构风格呢?

    定义

    架构风格定义了一组可以使用的元素类型(比如模块、组件、连接器等),还定义了一组如何使用这些类型的约束,比如系统的实时拓扑结构、模块之间的依赖及组件之间的可视性等。

    其实架构风格就和设计模式类似,都是定义了组件及组件之间的关系,不过抽象层次不同而已,因此他们的作用也很类似。

    作用

    • 一致性和可理解性:遵循同一个风格得到的结果是一个好主意被彻底的贯彻实施了,而不是一堆随意的、不同的好主意都被实现了。
    • 沟通
    • 设计重用
    • 确保质量属性

    常见架构风格列表

    《恰如其分的软件架构》一书中给了一个常见架构风格列表。

    • 分层风格:分层架构是最常见的架构,例如常见的对外接口层、业务逻辑层、数据存取层的三层架构,需要注意的是,分层架构是逻辑架构视图的风格。分层架构的元素是层,关系是使用关系,约束是一个层仅仅使用它的下一层,带来的好处是可修改性、可重用性和可移植性的提升。
    • 管道-过滤器风格:在此风格中,数据从管道流向过滤器,过滤器对数据进行处理,这是运行架构视图的风格。管道-过滤器架构风格的元素包括管道、过滤器、读端口和写端口,过滤器从读端口读取数据,进行处理,然后写入到写端口;管道将写端口和读端口连接起来,相当于将两个过滤器连接起来。约束有两个:(1)过滤器独立,过滤器之间无交互。(2)过滤器增量的读、处理和写。典型例子是Linux操作系统的管道+各种可执行命令。带来的好处是可重用性(过滤器可被重用),可修改性和再配置型(可使用管道将多个过滤器连接起来形成灵活的功能)。
    • 以模型为中心的风格:所有组件仅与一个中心模型(也叫数据存储或数据仓库)交互,也被叫做仓库风格、共享数据风格或以数据为中心的风格,这是运行架构视图风格。元素包括一个模型、一个或多个视图、控制器。好处包括:(1)可修改性,这来自于信息生产者和消费者之间的解耦;(2)可扩展性:模型固定后,可方便的添加视图和控制器。典型示例是现代的集成开发环境,中心模型代表了被编辑程序的状态,包括源代码和已被解析的表现形式,这个模型呈现给许多视图和控制器,视图和控制器组件之间是相互独立的,但全部依赖于中心模型组件。
    • 分发-订阅风格:又称基于事件的风格,分发事件和订阅事件的组件是独立的,运行架构视图风格。元素包括分发端口、订阅端口和一个事件总线。通过解耦事件的生产者和消费者,得到了更好的可维护性和可扩展性,不足是可能带来性能损害,因为引入了额外的事件总线来做交互层。
    • 客户端-服务器风格:运行架构视图风格,这也是一个十分常见的架构风格。元素包括客户端组件和服务器组件,通常还有一个请求-响应连接器和一些端口。约束是客户端可以主动发起通信,而服务器端不能。好处是可维护性的提升,因为主要的业务流程实现都在服务器端。 客户端-服务器风格的一个变体是N-层风格(N-Tier),例如将服务器组件的业务逻辑处理和数据处理拆分成“应用层”和“数据层”,这是当前的一个常见风格。
    • 对等风格:也叫点对点风格(Peer-to-Peer),节点之间的通信对等,不能存在分层关系,每个节点都有能力既做客户端也做服务器端,运行架构视图风格。典型示例是BitTorrent网络,带来的好处是可用性、弹性的提升。
    • Map-Reduce风格:元素包括Master Worker、Map Worker、Reduce Worker、Local FileSystem、Gobal FileSystem。大的数据集被拆分成小的数据集splits,然后存储在一个Glbal FileSystem中,每个Map Workder读取一个或多个split金慈宁宫处理,中间结果被写入Local FileSystem,Reduce Workder从多个Local FileSystem中读取中间结果并进行合并,然后写入Gobal FileSystem。Master Worker负责实例化其他Worder、分配split给Map Worder,并监控和处理Workers的健康。约束:各Map Worder相互独立,各Reduce Worder独立。好处:可伸缩性、可用性的提升。



     

  • 相关阅读:
    How to convert VirtualBox vdi to KVM qcow2
    (OK)(OK) adb -s emulator-5554 shell
    (OK)(OK) using adb with a NAT'ed VM
    (OK) How to access a NAT guest from host with VirtualBox
    (OK) Creating manually one VMs from an existing VDI file in CLI (VBoxManage) in Fedora 23
    (OK)(OK) Creating VMs from an existing VDI file in CLI (VBoxManage) in Fedora 23
    (OK) Creating_VMs_from_an_existing_VDI_file.txt
    (OK) Creating VMs from an existing VDI file —— in OS X
    (OK) install_IBM_SERVER.txt
    (OK) install chrome & busybox in android-x86_64 —— uninstall chrome
  • 原文地址:https://www.cnblogs.com/lidabnu/p/4321768.html
Copyright © 2011-2022 走看看