请选择 进入手机版 | 继续访问电脑版

[分布式系统] 分布式系统的通信机制

计算机科学 计算机科学 1877 人阅读 | 0 人回复

分布式系统,是依托于网络的系统,各个组成部分之间通过网络进行联通。

那么各个系统之间如何通信呢?

网络

image.png

个人理解,以上三者是分布式系统通信的基础,想要通信必须依赖于网络。

在此网络的基础之上,又有Socket编程,网络IO又分为BIO、NIO、AIO,进而依靠各种编程语言、系统API调用等,又依托于各种各样的协议,最终实现了分布式系统的通信。

image.png

网络通信框架

通过上面的模型,可以进行系统间网络通信,但是随着各种中间件以及各种分布式业务系统的出现,上面的网络通信,还是比较麻烦,所以出现了一些网络通信中间件,最出名的应该就是Netty了,还有Mina等。

网络通信框架,进一步释放了生产力,使得应用程序开发者以及中间件开发者,可以不必费心的关注底层的网络通信,借助于网络通信框架,可以更加快速高效的进行系统开发。

比如Netty官网简介:

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议的服务器和客户端。

比如Dubbo 底层网络通信,使用到了Netty,还有很多中间件kafka、RocketMQ、ES等等都用到了Netty,借助于Netty可以更加简单的实现高性能的网络通信。

除了Netty还有Mina(https://mina.apache.org/)、Grizzly(https://javaee.github.io/grizzly/)等

所以在不少时候,基于网络的通信演变成了基于Netty、MINA等通信中间件的通信。

毕竟有这么香的脚手架,为什么不用呢?

设计场景

在分布式通信这一场景下,就是 分布式+网络通讯的应用。

主要有下面几种场景形式

image.png

RPC 的全称是 Remote Procedure Call 是一种进程间通信方式。

消息是借助于消息队列实现系统间的通信。

通用协议如HTTP,WebService等,应用层协议,实现系统间的通信。

另外还可以自定义协议,依托于底层的网络实现系统间的通信。

RPC

继续之前,务必阅读关于RPC的介绍

https://www.crazybytex.com/thread-232-1-1.html

依托于RPC理论,出现了很多的中间件,比如阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等

借助于RPC,让业务应用开发更加快捷方便,不仅仅不需要关注底层网络通信,连调用过程中一些需要处理的问题也不需要关注,只需要了解RPC框架如何配置、使用即可。

消息

通过消息队列机制,可以实现系统间的异步、解耦,双方仅仅需要针对消息进行编码即可,发送消息与接收处理消息。

消息队列有相关的协议,协议又有一些相关的实现,这些实现就可以被业务系统作为中间件使用。

协议

笼统的说,所有的通信,都是某些协议、规范、约定,借助于网络最终实现的数据交换。

此处的协议细化特指出了RPC和消息之外的那些协议,比如web service范畴下的,SOAP、REST,这些都是一些比较通用的形式。

另外还有一些自定义的协议,比如很多中间件自身内部的节点间通讯,就是自己实现的。

因为中间件本身就不同于业务系统,属于被业务系统依赖的模块,如果他自身又引入各种RPC或者MQ,势必依赖模块变得越来越多,变得复杂难以维护。原则就是能不用就不用,比如kakfa 3.0之后,不再需要zk了。

概述

再次强调:

笼统的说,所有的通信,都是某些协议、规范、约定,借助于网络最终实现的数据交换。

RPC也是一种协议,MQ也是有对应的协议,下图只是进行了细分

image.png

common_log.png 转载务必注明出处:程序员潇然,疯狂的字节X,https://crazybytex.com/thread-231-1-1.html

关注下面的标签,发现更多相似文章

文章被以下专栏收录:

    黄小斜学Java

    疯狂的字节X

  • 目前专注于分享Java领域干货,公众号同步更新。原创以及收集整理,把最好的留下。
    包括但不限于JVM、计算机科学、算法、数据库、分布式、Spring全家桶、微服务、高并发、Docker容器、ELK、大数据等相关知识,一起进步,一起成长。
热门推荐
[若依]微服务springcloud版新建增添加一个
[md]若依框架是一个比较出名的后台管理系统,有多个不同版本。
[CXX1300] CMake '3.18.1' was not
[md][CXX1300] CMake '3.18.1' was not found in SDK, PATH, or
java 解析modbus 协议 Modbus4j应用 使用mo
[md]本文记录使用java开发modbus协议程序,与串口进行连接,使用