《分布式技术原理与算法解析》总结四:分布式通信技术

分布式的本质就是多进程协作,共同完成任务,彼此之间肯定需要通信

1 远程调用

不同机器中运行的进程之间的相互通信,常用的是RPC,这个大家应该都懂,不说了~

大家可以看看dubbo,内部就是RPC+注册中心实现的

2 发布订阅

RPC进程之间是直接交互的,当进程比较多时,会导致进程维护通信的复杂度非常高,且一个进程通信接口改变,与其通信的进程都会受到影响;
随着业务和分布式计算规模的逐渐增大和复杂化,出现了专门的异步通信模式,也就是消息发布订阅模式和消息队列模式,首先讲解发布订阅

原理:生产者消费者

在这里插入图片描述
看图就很清晰了,发布和订阅可以是一对一、一对多,核心就在于消息中心

场景:kafka,需要消费者提前向消息中心订阅消息,比较适合消费者为长驻进程或服务的场景。

发布订阅模式很类似观察者模式,其区别在于:
观察者模式采用直接通信,观察者和被观察者通信时延会低一些,但它们的依赖关系比较强,不管是被观察者还是观察者逻辑或接口有更改,另外一个均会受影响;
发布者和订阅者模式采用间接通信,引入了消息中心,相对比较厚重,且通信时延相对会高一点,但实现了订阅者与发布者的解耦

3 消息队列

发布订阅模式是发布者产生数据到消息中心,订阅者订阅自己感兴趣的消息,消息中心根据订阅者的订阅情况,
将相关消息或数据发送给对应的订阅者,可以理解为“推”

也可以用“拉”,将消息或数据放到一个队列里,谁需要谁就去队列里面取,这种模式就是消息队列模式

场景:RocketMQ,这种模式对消费者没有特别需求,因此比较适合消费者为临时用户的场景,比较灵活

消息中心对比:消息队列模式中采用了具有先进先出特征的队列结构进行存储,而订阅发布采用了 map 或数组等方式存储

发布了238 篇原创文章 · 获赞 268 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41594698/article/details/105249385