分布式系统(三)通信

447 阅读4分钟

通信

通信简述

通信是分布式系统中最重要的概念之一。分布式系统中多个设备的交互必须依赖于通信。

为什么分布式系统需要通信

分布式的定义就是一组设备的组合工作,而不同的设备之间如果需要交互,那么一定需要进行通信。无论是通过网线还是电话线或者WIFI。

分布式系统下通信的几种方式
  • 点对点;单个设备与单个设备之间的通信使用点对点通信。常用于设备交互心跳探测等。
  • 多播;单个设备需要通知消息给其他所有设备,那么使用广播。常用于分布式系统中设备的管理(新设备增加或删除旧设备时的快速通知)和复制过程(更新数据广播给其他副本设备)。
通信实现
  • RPC;点对点
  • MQ;点对点、组播或广播。
  • 网关;点对点
  • GossIP;点对点,传染。
  • FIFO;点对点。

RPC

RPC是一个点对点的远程过程调用协议,用于实现设备之间的普通交互通信。

如C/S中的通信;微服务风格中的服务之间通信;SOA中的RPC通信;Zookeeper中的RPC通信。

特点

稳定、点对点、容错

应用场景

任何类型的分布式系统中。

优缺点

优点:可以实现服务发现、负载均衡、可读性等。

缺点:不适合一些开放的接口交互,适配和安全性等问题,参考《架构-需求-可扩展性》。

MQ

MQ是一个支持多种通信方式的协议,用于实现设备之间更加灵活的通信。

如WEB系统中MQ的异步通信;MQ的发布订阅模式。

特点

灵活、点对点、多播

应用场景

多用于分布式信息系统中,如WEB系统、企业信息系统等。

优缺点

优点:灵活,支持点对点和主题订阅等多种方式。

缺点:需要额外的维护MQ组件。

网关

MQ是一个点对点通信的技术,用于实现设备之间功能更加多样化的通信。

如WEB系统中网关的服务治理、安全处理、流控、熔断等;

特点

点对点,功能多样

应用场景

多用于分布式信息系统中,如WEB系统、企业信息系统等,且大多用于提供标准的接口时。

优缺点

优点:灵活,支持点对点和主题订阅等多种方式。

缺点:需要额外的维护MQ组件。

GossIP

GossIP是一个点对点的通信协议,用于设备之间的快速通信,可以实现指数级的通信

很多人理解GossIP协议是一个共识算法,包括周志明的《凤凰架构-Gossip 协议》,但实际上这种表述是错误的。

共识算法是多个设备对于一种状态达成共识,而GossIP仅仅是传播这种状态。两者是配合关系,共识算法是一个时设备状态共识的算法,而协议只是通信目的,为了实现更快的状态传播,从协议和算法两个完全不同的含义上就可以看出来。

如果说GossIP是一个共识协议,那任意的广播协议也都算共识协议了,所以这种表达是错误的。

具体GossIP协议可参考Gossip protocol for Wikipedia

特点

快速、多播

应用场景

GossIP由于其指数级的通信速度,通常用于广播通信方式中,多用于分布式存储系统中

  • 集群中节点管理;加入和删除时告知其他节点,从而管理集群中的节点,比如获取集群可用节点时,由于GossIP快速通信,那么就可以很快的知道当前集群中的可用节点。在分布式存储系统中,只有其他节点知道了新节点的加入和删除,才能实现集群数据的一致性,所有设备必须感知到新节点的加入和旧节点的剔除。
  • 元数据更新;系统中设备元数据发生变化后,通知其他设备。比如某个设备存储的分片键从0-100变为了0-200;
基本原理
  1. A发起:A告诉B,A告诉C,A告诉D。
  2. B收到后:B告诉A,B告诉D,B告诉E。
  3. C收到后:C告诉A,C告诉F,C告诉H。
  4. 。。。。。。

最终实现所有设备都收到消息。

优缺点

优点:通信速度快

缺点:设备过多时会造成数据风暴,A->B,B->C,C->xxx 后续多轮后,可能是 G->B,R->B,B重复收到了多次消息,导致集群中一次通信数据循环了多次。

案例

大多数的分布式存储系统使用了GossIP,并且使用其管理节点元数据的复制。需要注意的是,元数据使用其复制,但数据本身通常不使用GossIP。

  • Redis使用GossIP实现元数据的复制与节点管理。
  • Cassandra的元数据交互是依赖于GossIP。