独立构件风格

devtools/2024/10/23 0:00:11/

什么是独立构件风格?

独立构件风格是指在系统架构中,所有的构件(也就是系统的各个部分)都是相对独立的,它们之间不会直接进行通信,而是通过一些机制(比如消息传递或事件触发)来协调工作。这个设计的主要目的是降低系统各部分之间的耦合度,使得系统更加灵活和易于扩展。

通过让各个构件独立运作,系统可以更容易地应对变化、扩展功能,并且在出现问题时也能减少影响范围。独立构件架构主要有两种具体的实现方式:进程通信事件驱动系统风格

两种独立构件风格

1. 进程通信风格

进程通信风格中,各个构件通过独立的进程进行通信。简单来说,构件之间不直接对话,而是通过远程调用的方式进行交流。进程通信的典型方式包括远程过程调用(RPC)和REST API调用。

场景举例:
  • 远程调用接口(RPC):比如,当你使用一个购物应用在下单时,这个应用会通过RPC远程调用一个支付服务来完成支付。支付服务和购物应用是独立的构件,它们通过RPC进行通信,互不干扰。

  • REST API 调用:例如,你在天气应用中查看天气情况,这个应用会通过REST API调用远程的天气服务,获取最新的天气数据。

特点:
  • 目标明确:每次通信都有一个明确的目标。比如,你明确要调用支付服务,支付服务会返回你需要的结果。
  • 同步为主:通常情况下,应用会等到收到远程服务的响应才继续执行,这种方式叫做同步调用。也可以用异步的方式,即应用不必等结果返回就继续做其他事情。
2. 事件驱动系统风格

事件驱动系统则是另一种架构风格。它的特点是,系统的各个构件不会主动调用彼此,而是通过事件的触发来进行工作。构件只需要关心自己要响应的事件,等事件发生时自动启动,执行相应的功能。

场景举例:
  • 调试器:在程序开发时,开发者会设置调试断点。当程序运行到断点时,调试器会自动触发停下来,展示出变量的当前值。这种行为是基于事件的触发,而不是程序和调试器直接通信。

  • 消息队列:比如,电商平台的订单系统中,订单生成后会发送到消息队列,然后支付服务、库存服务等会自动监听这些消息并各自执行相应的处理。生产者(订单生成)和消费者(支付、库存服务)之间没有直接互动,而是由消息队列驱动。

特点:
  • 松耦合:事件驱动的方式让各个构件不需要互相了解或直接交互,只要它们关注相同的事件就能协作。这种方式大大降低了耦合性。
  • 异步为主:通常情况下,事件触发后,响应构件会在后台执行任务,不需要立即返回结果。

独立构件风格的好处

  1. 降低耦合:系统各部分独立运作,不会互相干扰,提升了维护性和扩展性。
  2. 灵活性:因为各个构件相对独立,系统可以根据需要动态添加或替换部分构件。
  3. 扩展性:新的功能可以通过增加新的构件来实现,不需要大规模修改现有系统。

举个通俗的例子

假设你在一家餐馆用餐。餐馆的工作方式可以看作是一个独立构件风格的系统:

  • 进程通信风格:你点菜后,服务员会将你的订单传递给厨房。这个过程类似于RPC或REST API调用,订单的处理具有明确的指向性,厨房接到订单后会立即开始准备。

  • 事件驱动风格:厨房做完菜后不会直接通知你,而是将菜放在传菜窗口。服务员定时查看传菜窗口,一旦看到菜被放上去(事件触发),就会自动将菜端给你。这个过程中,厨房和服务员之间没有直接互动,而是通过传菜窗口这个"事件"来驱动。

结论

独立构件架构通过使系统的各个部分相互独立并通过消息或事件进行协作,减少了系统的复杂性,提高了系统的灵活性。通过进程通信和事件驱动的不同实现方式,系统可以在保持低耦合的同时,更有效地处理远程通信和事件驱动的业务逻辑。


http://www.ppmy.cn/devtools/127992.html

相关文章

KASan部署、使用与原理分析

文章目录 前言1、概述2、使用方法3、测试用例3.1、检测加载的内核模块3.2、检测调用的内核模块3.3、通过系统调用检测3.4、检测编译到Linux内核中的内核模块 4、工作原理4.1、影子内存(Shadow Memory)4.2、内存状态(Memory States&#xff09…

cmake的add_subdirectory()命令

当 CMake 在主目录的 CMakeLists.txt 中执行到 add_subdirectory() 命令时,它会跳转到对应子目录中的 CMakeLists.txt,并按照子目录中的指令来构建子项目。这一过程在整个项目的配置阶段(即运行 cmake 命令时)完成,确保…

低粉爆款!超级简单且很赚钱的一个AI赛道,学玩直接赚(附保姆级教程和提示词)

不知道还有多少人记得这张图片? 当时这张照片可以说在 AI 绘画和 AI 摄影圈掀起轩然大波,据说定制一张类似得宠物守护图片得排队,且单价高达999元。 之所以这么贵,一个是创意牛,还一个是因为在当时 AI 绘画技术上&am…

【linux】线程 (三)

13. 常见锁概念 (一)了解死锁 死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程占有的,且不释放的资源,而处于的一种永久等待状态 (二)死锁四个必要条件 互斥条件…

简单谈谈 分布式基础理论 CAP、BASE、酸碱平衡

CAP 理论 在一个分布式系统中,最多只能同时满足 一致性(C)、可用性(A) 和分区容错(P)三项中的两项。 在CAP理论中,有且只可能有两种情况,分别是CP和AP 比如说在一个mysql…

深度学习-循环神经网络-LSTM对序列数据进行预测

项目简介: 使用LSTM模型, 对文本数据进行预测, 每次截取字符20, 对第二十一个字符进行预测, LSTM层: units100, activationrelu Dense层: units输入的文本中的字符种类, 比如我使用的文本有644个不同的字符, 那么units64 激活函数: 因为是多分类, 使用softmax 因为这是最…

FLINK SQL语法(1)

DDL Flink SQL DDL(Data Definition Language)是Flink SQL中用于定义和管理数据结构和数据库对象的语法。以下是对Flink SQL DDL的详细解析: 一、创建数据库(CREATE DATABASE) 语法:CREATE DATABASE [IF…

k8s-pod详解

Pod生命周期 我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期,它主要包含下面的过程 pod创建过程 运行初始化容器(init container)过程 运行主容器(main container) 容器启动后钩子(post st…