软件架构中的组件通信方式,核心可以按照两个维度来划分:通信的"方向与时机"(同步还是异步) ,以及通信发生的"物理边界"(进程内、同一主机、还是跨主机)
同步通信 :在架构中常指请求-响应模式,如使用HTTP RESTful API、gRPC等。它的优点是简单直观,适合需要即时结果的场景,但缺点是调用方会被阻塞,且服务间形成强依赖。
异步通信 (Asynchronous) :主要通过消息队列 (如RabbitMQ、Kafka)或事件流实现。它让生产者和消费者在时间和空间上解耦,能有效应对流量高峰(削峰填谷)和部分服务故障。
进程内通信 :如果是函数调用 方式**,** 直接读写内存即可。当所有组件运行在同一个操作系统进程时,使用这种方式。优势是速度极快(纳秒级),缺点是组件间耦合紧密,一个组件的崩溃可能导致整个进程崩溃。如果是多线程方式,python同一进程内的不同线程之间可以使用queue.Queue或collections.deque这种共享内存的方式进行通信**。** 当然**,**同一进程内的不同线程之间共享进程的全局变量。
同一主机内的不同进程间通信。 使用python的multiprocessing.Queue进行进程间的通信,也可以使用网络Socket进行通信。但是,在同一台主机上**,multiprocessing.Queue** 通常比网络 Socket 速度快得多。传输小对象(大小< 1MB)时,使用**multiprocessing.Queue,** 同一主机内进程间通信的"快捷通道"。但是在传输大对象(大小 > 1MB)时**,multiprocessing.Queue** 速度优势可能会急剧下降,这时建议使用更优的方案是共享内存 (multiprocessing.shared_memory)。
跨主机通信。 可以使用网络Socket进行通信**。**