深度思考:架构师必须掌握的五大类架构设计风格

简介: 数据流风格注重数据在组件间的流动,适合处理大量数据。调用返回风格则强调函数或方法的调用与返回,过程清晰明了。独立构件风格让每个构件独立运作,通过接口交互,提升灵活性和可重用性。虚拟机风格则模拟完整系统,实现资源的高效利用。

深度思考:架构师必须掌握的五大类架构设计风格! - 程序员古德

本文摘要

数据流风格注重数据在组件间的流动,适合处理大量数据。调用返回风格则强调函数或方法的调用与返回,过程清晰明了。独立构件风格让每个构件独立运作,通过接口交互,提升灵活性和可重用性。虚拟机风格则模拟完整系统,实现资源的高效利用。

架构设计五大类风格

深度思考:架构师必须掌握的五大类架构设计风格! - 程序员古德

常见的软件架构风格有五大类,如下:

  1. 数据流风格:这种风格主要关注数据在系统中的流动方式,包括批处理序列和管道/过滤器等模式。在这种风格中,数据通过一系列的处理元素进行传递和处理,每个处理元素都对数据进行特定的操作,然后将结果传递给下一个处理元素。
  2. 调用/返回风格:这种风格主要基于函数调用和返回机制,包括主程序/子程序、面向对象风格等。在这种风格中,程序被划分为一系列的函数或对象,每个函数或对象负责完成特定的功能,并通过调用和返回机制进行交互。
  3. 独立构件风格:这种风格强调软件系统中的构件独立性和可重用性,包括进程通讯和事件系统等模式。在这种风格中,构件之间通过明确定义的接口进行通信,每个构件都可以独立地开发和部署,提高了系统的灵活性和可扩展性。
  4. 虚拟机风格:这种风格基于虚拟机技术,包括解释器和基于规则的系统等模式。在这种风格中,软件系统被设计为在虚拟机上运行,虚拟机负责解释和执行软件的指令。这种风格允许软件在不同的硬件和操作系统上运行,提高了软件的可移植性。
  5. 仓库风格:这种风格以数据为中心,强调数据的共享和访问控制,包括数据库系统和黑板系统等模式。在这种风格中,数据被存储在中央仓库中,并通过明确的访问控制机制进行访问和操作。这种风格适用于需要大量数据存储和访问的系统,如数据库管理系统和专家系统等。

数据流风格

数据流风格,顾名思义,就是数据在系统中像流水一样流动。

假如一个工厂里的生产线,原材料(数据)从一端进入,经过多个工序(处理单元)的加工,最后从另一端产出成品(处理结果),在这个过程中,数据是按照一定的顺序和路径流动的,每个处理单元都对数据进行特定的操作,然后传递给下一个处理单元。

数据流风格有哪些特点?

  1. 模块化,系统被划分为多个独立的处理单元,每个单元负责特定的任务,这样可以使系统更易于理解和维护。
  2. 可扩展性,由于系统是由独立的处理单元组成的,所以很容易添加新的处理单元来增加功能,实现系统的扩展。
  3. 可重用性,处理单元的独立性使得它们可以在不同的系统中重复使用,提高了软件开发的效率。

数据流风格有哪些应用场景?

数据流风格特别适用于需要处理和传递大量数据的场景。

比如信号处理、实时监控、大数据分析等,在这些场景中,数据需要按照一定的流程进行处理和分析,而数据流风格正好提供了这样的结构。

与其他架构风格的比较

数据流风格适用于需要处理和传递大量数据的场景。

与其他架构风格相比,数据流风格更注重数据的流动和处理过程。例如,与“调用/返回风格”相比,数据流风格不是通过函数调用和返回来实现数据交互,而是通过数据流动和处理单元之间的连接来实现,这使得数据流风格在处理大量数据时更加高效和灵活。

与一些强调构件独立性和可重用性的架构风格(如独立构件风格)相比,数据流风格更注重数据在构件之间的流动和传递

数据流风格会用到哪些技术?

在架构设计风格中,“数据流风格”主要关注于数据在系统中的流动和处理过程,可能会使用到以下技术:

  1. 消息队列技术,消息队列是实现数据流风格的核心技术之一,它允许不同组件或系统之间通过发送和接收消息来进行通信和数据交换,常见的消息队列技术包括RabbitMQKafkaActiveMQ等,它们提供了可靠的消息传递、队列管理、消息持久化等功能。
  2. 流处理框架,流处理框架用于处理连续不断的数据流,它们提供了实时数据处理的能力,支持数据的过滤、转换、聚合等操作,常见的流处理框架有Apache FlinkSpark Streaming等,这些框架可以处理来自不同来源的实时数据流,并提供低延迟、高吞吐量的处理能力。
  3. 分布式存储系统,在数据流风格中,数据的存储和访问也是重要的环节,分布式存储系统如Hadoop Distributed File System(HDFS)Google Cloud Storage等提供了大规模数据的存储和管理能力,支持数据的分布式存储和高效访问。
  4. 数据序列化与反序列化技术,数据在流动过程中需要进行序列化和反序列化操作,以确保数据在不同组件或系统之间的正确传输和解析,常见的数据序列化格式包括JSON、XMLProtocol Buffers等,它们提供了数据结构的标准化表示和转换功能。
  5. 数据过滤和清洗技术,在数据流风格中,数据的质量至关重要,数据过滤和清洗技术用于去除重复数据、处理异常值、纠正错误等,以确保数据的准确性和一致性,这些技术可以通过自定义规则、使用数据清洗工具或引入机器学习算法来实现。

调用/返回风格概念

调用/返回风格是一种“你问我答”的交互方式。在计算机软件中,这就像是一个函数或方法被另一个函数或方法“叫去帮忙”,等忙完了再“回来告诉结果”。

在这个过程中,调用的函数或方法会等待被调用的函数或方法完成任务并返回结果,然后才能继续执行自己的后续任务。

调用/返回风格有哪些特点?

  1. 结构化,这种风格强调将复杂的任务分解为更小、更简单的子任务,每个子任务都由一个函数或方法来完成,有助于我们更好地组织和管理代码。
  2. 明确性,每个函数或方法都有明确的输入和输出,以及明确的功能描述,使得代码更易于理解和维护。
  3. 同步性,调用方需要等待被调用方完成任务并返回结果后才能继续执行,保证了任务执行的顺序性和一致性。

调用/返回风格有哪些应用场景?

调用/返回风格非常适用于需要明确步骤和顺序的任务执行场景。比如,在计算器应用中,我们可能需要先调用一个函数来计算加法,然后再调用另一个函数来计算乘法,最后得到最终结果。

在这个过程中,每个函数都完成了一个特定的任务,并返回了结果给调用它的函数。

与其他架构风格的比较

与其他架构风格相比,调用/返回风格更加注重任务的结构化和明确性。例如,与数据流风格相比,调用/返回风格更强调任务之间的调用和返回关系,而不是数据在任务之间的流动。

此外,与一些更灵活的架构风格(如事件驱动风格)相比,调用/返回风格可能显得有些刻板,不太适应需要高度灵活性和并发性的应用场景。但是,在需要明确步骤和顺序的任务执行场景中,调用/返回风格仍然是一种非常有效和实用的架构风格。

调用/返回风格会用到哪些技术?

“调用/返回风格”是一种传统的控制流程结构,广泛应用于过程式编程和面向对象编程中。

这种风格主要通过函数或方法的调用来执行任务,并在完成后返回结果到调用方,其中,可能会使用到以下技术:

  1. 函数/方法调用,这是“调用/返回风格”最核心的技术。在编程语言中,函数或方法是一段封装了特定功能的代码块,可以被其他代码调用执行,调用时传递参数,执行完成后返回结果。
  2. 回调函数和闭包,在某些情况下,调用方可能需要在被调用方完成某些操作后执行特定的回调函数,闭包是一种实现回调函数的技术,它允许函数引用外部作用域的变量。
  3. 远程过程调用(RPC),当函数调用跨越不同的系统或进程时,需要使用RPC技术,RPC允许一个系统的程序像调用本地函数一样调用另一个系统上的函数,并获取返回结果。

独立构件风格概念

独立构件风格,就像搭积木一样,每个积木(构件)都是独立的,它们之间不直接相连,而是通过某种方式(比如消息传递)来协同工作,在软件架构中,每个构件都是一个小型的软件系统,它们可以独立开发、测试、部署和升级,互不影响。

独立构件风格有哪些特点?

  1. 独立性,每个构件都是独立的个体,它们之间不直接通信,而是通过某种中间件或消息传递机制来进行交互,这样设计可以降低系统的复杂性,提高开发并行度和可维护性。
  2. 松耦合,由于构件之间不直接依赖,所以一个构件的修改不会直接影响到其他构件,这使得系统更加灵活,易于适应变化。
  3. 可重用性,独立构件通常具有良好的封装性,可以被多个系统或应用重复使用,从而提高开发效率。

独立构件风格有哪些应用场景?

独立构件风格特别适用于需要高度灵活性和可扩展性的系统。例如,在微服务架构中,每个服务都是一个独立的构件,它们通过API或消息队列进行通信。

这种架构风格使得每个服务都可以采用不同的技术栈和实现方式,从而充分发挥了团队的技术优势。

此外,在分布式系统中,独立构件风格也有助于实现系统的容错性和负载均衡。

与其他架构风格的比较

与其他架构风格相比,独立构件风格更加注重构件的独立性和松耦合。

例如,与数据流风格相比,独立构件风格中的构件不直接处理数据流,而是通过消息传递来协同工作,这使得独立构件风格更加适用于并发和分布式环境。

与调用/返回风格相比,独立构件风格中的构件之间不直接进行函数调用和返回,而是通过中间件或消息队列进行异步通信,这使得系统更加灵活和可扩展。

总结来说,独立构件风格是一种注重构件独立性和松耦合的软件架构风格,它特别适用于需要高度灵活性和可扩展性的系统,与其他架构风格相比,独立构件风格具有独特的优势和适用场景。

另外,独立构件风格主要包含两种子风格:进程通信和事件驱动系统。

1、进程通信风格中,构件是独立的过程,通过消息传递进行通信。

2、事件驱动系统风格则强调构件通过触发或广播事件来进行交互。

这两种子风格都体现了独立构件风格的核心思想:构件的独立性和松耦合。

独立构件风格会用到哪些技术?

“独立构件风格”主要强调系统中的每个构件都是相对独立的个体,它们之间不直接通信,而是通过某种连接件进行交互,其中,可能会使用到以下技术:

  1. 进程间通信(IPC),由于独立构件风格要求构件之间不直接通信,因此需要使用进程间通信机制来实现构件之间的交互。常见的IPC技术包括管道、消息队列、共享内存、信号量、套接字等。这些技术允许不同进程(即构件)之间发送和接收数据,实现信息的交换和共享。
  2. 远程方法调用(RPC)和RESTful API,当构件分布在不同的系统或网络中时,可以使用RPCRESTful API来实现远程调用。RPC允许一个构件像调用本地方法一样调用远程构件上的方法,而RESTful API则提供了一种基于HTTP协议的资源访问方式。这些技术可以使不同构件之间可以跨越物理边界进行通信和协作。
  3. 事件驱动架构和消息中间件,独立构件风格中的构件可以通过事件进行交互。事件驱动架构允许构件在特定事件发生时触发相应的处理逻辑,而消息中间件则提供了事件发布、订阅和传输的功能。常见的消息中间件包括RabbitMQKafkaActiveMQ等,它们支持可靠的消息传递、队列管理、消息过滤和转换等功能。
  4. 容器化技术和微服务架构,容器化技术如DockerKubernetes为独立构件提供了轻量级的运行环境,使得每个构件可以独立地部署、升级和扩展。而微服务架构则是一种将系统划分为一系列小型、独立的服务的架构风格,每个服务都可以看作是一个独立的构件,通过API进行通信和协作。

虚拟机风格概念

虚拟机风格,顾名思义,就是在计算机中模拟出一个或多个虚拟的计算机环境,这些虚拟环境可以像真实的计算机一样运行操作系统、应用程序等。

在软件架构中,虚拟机风格通常指的是通过软件模拟硬件功能,为上层应用程序提供一个与真实硬件环境隔离、但又功能完备的虚拟运行环境。

虚拟机风格有哪些特点?

  1. 隔离性,每个虚拟机都有自己独立的运行环境,互不干扰,这样可以保护系统免受恶意软件的攻击,同时也方便进行软件测试和开发。
  2. 兼容性,虚拟机可以模拟不同的硬件和操作系统环境,使得在同一台物理机上运行多个不同环境的应用程序成为可能。
  3. 可移植性,虚拟机及其上的应用程序可以轻松地从一台物理机迁移到另一台物理机,无需担心硬件和操作系统的差异。
  4. 资源控制,虚拟机风格允许对虚拟机的资源进行精细控制,如CPU、内存、磁盘空间等。这可以提高系统性能,提高资源利用率。

虚拟机风格有哪些应用场景?

  1. 云计算,云计算平台通过虚拟机技术为用户提供弹性的计算资源,用户可以根据需求创建、扩展或销毁虚拟机,实现按需付费。
  2. 多环境测试,开发人员可以在同一台物理机上创建多个虚拟机,分别安装不同的操作系统和应用程序进行测试。
  3. 系统迁移,当需要将一个系统从旧硬件迁移到新硬件时,可以使用虚拟机技术将整个系统(包括操作系统和应用程序)打包成一个虚拟机镜像,然后直接在新硬件上运行该镜像。
  4. 隔离风险,对于可能存在安全风险的应用程序或操作,可以将其运行在虚拟机中,以防止其对主系统造成损害。

与其他架构风格的比较

与其他架构风格相比,虚拟机风格更注重提供一个与真实硬件环境隔离的虚拟运行环境。例如,与数据流风格相比,虚拟机风格不仅关注数据的流动和处理过程,还关注为数据处理提供一个安全、可靠的环境。

与调用/返回风格相比,虚拟机风格中的函数调用和返回可能发生在虚拟环境中,而不是直接在物理硬件上执行。

与独立构件风格相比,虚拟机风格中的构件(即虚拟机)具有更高的独立性和隔离性,每个虚拟机都可以看作是一个独立的系统,可以运行不同的操作系统和应用程序。

总结来说,虚拟机风格是一种注重提供隔离、兼容、可移植和资源控制的软件架构风格。它广泛用在云计算、多环境测试、系统迁移和隔离风险等场景中。

虚拟机风格会用到哪些技术?

“虚拟机风格”主要是通过模拟完整的计算机系统(包括硬件)来运行程序,在这种风格中,核心组成部分是虚拟机监控器,它管理和调度物理资源,并为在其上运行的虚拟机提供虚拟视图,它可能会使用到以下技术:

  1. 虚拟化技术,这是实现虚拟机风格的核心技术,它可以将物理硬件资源(如CPU、内存、磁盘、网络适配器等)抽象为虚拟资源,为虚拟机提供运行所需的硬件环境,根据虚拟化的对象不同,可以分为全虚拟化、半虚拟化、操作系统级虚拟化等。
  2. 虚拟机管理程序(VMM/Hypervisor),这是一种特殊的软件或硬件,它运行在计算机的物理硬件之上,可以创建、管理和调度虚拟机。常见的虚拟机管理程序有VMware ESXiMicrosoft Hyper-VCitrix XenServerKVM(Kernel-based Virtual Machine)等。
  3. 虚拟机镜像文件,这是一种文件格式,用于存储虚拟机的虚拟硬盘。它包含了虚拟机操作系统、应用程序、配置信息和用户数据等,虚拟机镜像文件可以方便地进行备份、迁移和复制等操作。
  4. 资源调度算法,在虚拟机风格中,为了提高资源的利用率和满足服务质量要求,需要使用有效的资源调度算法,如负载均衡算法、资源预留算法、节能调度算法等。
  5. 隔离性技术,为了保证虚拟机之间的独立性,防止相互干扰,需要使用隔离性技术。例如,通过虚拟网络技术隔离虚拟机的网络流量,通过虚拟存储技术隔离虚拟机的存储访问等。

另外,虚拟机风格与其他的架构设计风格(如独立构件风格、事件驱动架构风格等)并不是互斥的,它们可以根据需要进行结合,以实现更复杂、更灵活的系统设计。

例如,可以在虚拟机风格中引入独立构件风格的插件机制,以提高虚拟机的可扩展性和可维护性;也可以将虚拟机风格与事件驱动架构风格结合,实现基于事件的虚拟机调度和管理等。

仓库风格概念

仓库风格可以想象成一个大型的数据存储中心,就像仓库一样,在这个风格中,有一个中心的数据结构(就像仓库里的货架),而其他的软件组件或系统(就像仓库的工作人员)会访问这个中心数据结构,进行数据的存储、检索和更新等操作。

仓库风格有哪些特点?

  1. 中心化数据存储,所有的数据都集中存储在一个中心数据结构中,方便统一管理和维护。
  2. 独立组件,除了中心数据结构外,其他的软件组件或系统是相对独立的,它们通过访问中心数据结构来进行数据的交互。
  3. 数据共享,多个组件可以共享和访问同一份数据,提高了数据的利用率和一致性。
  4. 可扩展性,由于数据是集中存储的,所以添加新的组件或系统相对容易,只需要确保它们能够正确地访问中心数据结构即可。

仓库风格有哪些应用场景?

仓库风格特别适用于需要集中存储和共享大量数据的场景。例如,在电商系统中,商品信息、用户信息、订单信息等都需要集中存储和管理,以便多个子系统(如购物车、结算系统、物流系统等)能够共享和访问这些数据。

此外,在金融行业、通信行业和医疗行业等也有广泛的应用,如风险管理、市场精准营销、大数据助力药物研究等。

与其他架构风格的比较

与其他架构风格相比,仓库风格更注重数据的集中存储和共享。

例如,与独立构件风格相比,仓库风格中的组件不是完全独立的,它们需要通过访问中心数据结构来进行数据的交互。

与数据流风格相比,仓库风格更注重数据的静态存储和共享,而不是数据的流动和处理过程。

此外,仓库风格也可以看作是一种特殊的调用/返回风格,其中的调用和返回操作都是围绕中心数据结构进行的。

总结来说,仓库风格是一种注重数据的集中存储和共享的软件架构风格,适用于需要集中管理和共享大量数据的场景。

仓库风格风格会用到哪些技术?

“仓库风格”主要关注于数据的集中存储和访问,其中,可能会使用到以下技术:

  1. 数据库技术,这是仓库风格中最核心的技术之一,关系型数据库(如MySQLOracleSQL Server等)提供了强大的数据存储、查询和管理功能,此外,非关系型数据库(如MongoDBCassandraRedis等)也在特定场景下被广泛应用,它们提供了更灵活的数据模型和更高的扩展性。
  2. 数据仓库技术,数据仓库是一个大型、集中式的存储系统,用于存储和管理来自多个源的大量数据,它提供了数据清洗、整合、查询和报表生成等功能,支持决策支持系统(DSS)和在线分析处理(OLAP)等应用。
  3. 分布式缓存技术,为了提高数据访问的速度和性能,仓库风格可能会使用分布式缓存技术(如Redis、Memcached等),这些技术可以将热点数据缓存在本地或远程缓存中,减少了对数据库的访问次数,提高了系统的响应速度。
  4. 数据接口和API技术,为了使得不同的系统和应用能够访问数据仓库中的数据,需要提供统一的数据接口和API,RESTful APIGraphQL等技术提供了灵活的数据访问方式,支持跨平台、跨语言的数据交互。
  5. 数据安全和隐私保护技术,在仓库风格中,数据的集中存储和管理也带来了数据安全和隐私保护的问题,因此,需要使用数据加密、访问控制、审计日志等技术来保护数据的安全性和隐私性。

关注我,每天学习互联网编程技术 - 程序员古德

END!
END!
END!

往期回顾

精品文章

深度思考:总结SOA、WSDL、SOAP、REST、UDDI之间的关系

Spring揭秘:@import注解应用场景及实现原理!

Java并发基础:原子类之AtomicMarkableReference全面解析!

Java并发基础:concurrent Flow API全面解析

Java并发基础:CopyOnWriteArraySet全面解析

精彩视频

相关文章
|
1月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
23 0
|
3月前
|
设计模式 Java 应用服务中间件
Tomcat 架构原理解析到架构设计借鉴
Tomcat 架构原理解析到架构设计借鉴
106 0
|
4月前
|
Dubbo Java 应用服务中间件
阿里巴巴资深架构师深度解析微服务架构设计之SpringCloud+Dubbo
软件架构是一个包含各种组织的系统组织,这些组件包括Web服务器,应用服务器,数据库,存储,通讯层),它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点。
|
4月前
|
缓存 架构师 安全
架构篇:什么才是真正的架构设计?
特别特别厉害的一篇文章,今天无意中看到的,转载至CSDN的大佬hguisu的:blog.csdn.net/hguisu/article/details/78258430,谈到了作者对于架构的理解,我看完是真的受益匪浅。
|
25天前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
|
1月前
|
程序员 Python
类的设计奥秘:从代码到架构的科普全解
类的设计奥秘:从代码到架构的科普全解
13 2
|
1月前
|
设计模式 架构师 前端开发
架构师进阶篇-什么是架构师
架构师进阶篇-什么是架构师
56 0
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
Transformer类架构的发展带动多模态融合
【1月更文挑战第21天】Transformer类架构的发展带动多模态融合
47 1
Transformer类架构的发展带动多模态融合
|
3月前
|
人工智能 运维 架构师
数美科技首席架构师陈建:基于云上弹性的高可用实时风控架构实践
2023年10月31日-11月2日,2023云栖大会在中国杭州·云栖小镇举行,北京数美时代科技有限公司首席架构师陈建在【CloudOps云上运维专场】发表了题为《基于云上弹性的高可用实时风控架构实践》的主题演讲,从在线实时风控架构及高可用解决方案等方向做了分享。
|
4月前
|
Dubbo 应用服务中间件 Docker
阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud
什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发、部署、扩展。服务于服务之间通过注入RESTful api或其他方式调用。