分布式系统详解--基础知识(通信)

2023-11-20

                       分布式系统详解--基础知识(通信)

         上一篇文章我们写到了 分布式系统详解--基础知识(线程) ,简单了解了一下线程的基本概念和线程和分布式的那斩不断理还乱的关系。今天再讲解一下它的另外一个必备知识--通信!进程之间进行通信是分布式的核心,失去了通信,也就无所谓子系统之间的相互联系。本篇文章主要介绍的几个基础知识,网络的基本概念知识、I/O通信模型、RPC和面向消息通信。嗯,温故而知新的时候到了~~

         

一。网络的基础知识

1.1 来个最基本的表格--OSI七层参考模型(我也借用一下网络上这张比较流行的图片,不明白?没事下面还有详细解释)

            

 

                                                                               表1-1 OSI各层次关系表

       层次             数据格式            功能                   典型设备

(七)应用层

(Application)

数据 用户接口:应用层是用户与网络,以及应用程序与网络间的直接接口,使得用户能够与网络进行交互式联系。
实现各种服务:该层具有的各种应用程序可以完成和实现用户请求的各种服务。
终端设备:(PC、手机、平板)等。
(六)表示层(Presentation) 数据(Date)

数据格式处理:协商和建立数据交换的格式,解决各应用程序之间在数据格式表示上的差异。

数据的编码:处理字符集和数字的转换。

压缩和解压缩:为了减少数据的传输量,这一层还负责数据的压缩与恢复。

数据的加密和解密:可以提高网络的安全性。

终端设备:(PC、手机、平板)等。
(五)会话层(Session) 数据(Date)

会话管理:组织和协调两个会话进程之间的通信,并对数据交换进行管理。

寻址:使用远程地址建立会话连接。

出错控制:从逻辑上讲会话层主要负责数据交换的建立、保持和终止。

终端设备:(PC、手机、平板)等。
(四)传输层(Transport) 数据组织成数据段

传输连接管理:提供建立、维护和拆除传输连接的功能。传输层在网络层 的基础上为高层提供“面向连接”和“面向无连接”服务。

处理传输差错:通过这一层传输的数据将由目标设备确认,如果在指定的时间内未收到确认信息,数据将被重发

终端设备:(PC、手机、平板)等。
(三)网络层(Network)

分割和重新组合数据包(Packet

基于网络层地址(IP地址)进行网络系统间的路径选择。

也就是说:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。

路由器
(二)数据链路层(Data Link) bit信息封住那个为数据帧(Frame) 同个各种控制协议,将有差错的物理信道转化为无差错的、能可靠传输数据帧的数据连接 网桥、交换机
(一)物理层(Physical) 传输bit流 建立、维护和取消物理连接 网卡、光纤、中继器

慢慢看就明白了,提前明白的童鞋们~可以稍作回顾......哈哈。

1.2 TCP/IP网络模型--四层

                                              

其实跟上面的差不多,不过这里还是简单介绍一下他们各自的简介~

网络接口层:又称“链路层”。作用:A.数据封装/解封装成帧(frame)。B.控制帧传输。C.流量控制。

网络层:又称“互联网层”。作用:IP地址分类、子网划分、IP路由。处理分组在网络中的活动。

传输层:作用:两台主机上的应用程序提供端到端的通信。

应用层:负责处理特定的应用程序细节。

二、I/O通信模型

同步、异步、阻塞、非阻塞的定义。可以说一大堆了。简单介绍个例子。

小明喜欢喝豆浆,也喜欢喝牛奶。于是,他就买了一个豆浆机,还养了两头奶牛~~

同步阻塞:小明早上想喝豆浆,于是他去先去豆浆机那里磨豆浆,一直看着豆浆磨好之后,他才去做别的事情。

同步非阻塞:小明早上想喝豆浆,于是他去先去豆浆机那里磨豆浆,豆浆机开动后,隔上一段时间回来一趟看看磨好了没。

异步非阻塞:小明早上想喝豆浆,还想喝牛奶,他买了个豆浆机还买了个自动挤奶器,于是他只负责将豆子放在豆浆机,让牛到自动挤奶器旁边,等到豆浆机停下了,挤奶器停下了,小明就知道它的早餐好了,小明很满足~~

三、进入Java NIO

3.1 Java NIO的定义:

什么是NIO呢?来看看他的全拼(java non-blocking IO(实际上是 new io))提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。

NIO的特点:

A、既可以从通道中读取数据,又可以写数据到通到。流的读写通常是单项的。

B、通道可以异步读写

C、通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

3.2 Java NIO和IO的对比
 

IO NIO
面向流 面向缓冲
阻塞IO 非阻塞IO
选择器

 

NIO有三个核心部分组成:

(1)Channel

FileChannel 从文件中读写数据。

DatagramChannel 能通过UDP读写网络中的数据。

SocketChannel 能通过TCP读写网络中的数据。

ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。

RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel inChannel = aFile.getChannel();

(2)Buffer

ByteBuffer buf = ByteBuffer.allocate(48);
  1. 写入数据到Buffer
  2. 调用flip()方法
  3. 从Buffer中读取数据
  4. 调用clear()方法或者compact()方法

(3)Selector

Selector selector = Selector.open();
channel.configureBlocking(false);
SelectionKey key = channel.register(selector, SelectionKey.OP_READ);
while(true) {
  int readyChannels = selector.select();
  if(readyChannels == 0) continue;
  Set selectedKeys = selector.selectedKeys();
  Iterator keyIterator = selectedKeys.iterator();
  while(keyIterator.hasNext()) {
  SelectionKey key = keyIterator.next();
  .........
  keyIterator.remove();
 }
}

在这里我们看Selector,如果要使用他,我们需要进行注册Channel,调用其select()方法。

四、RPC(Remote Procedure Call Protocol)--远程过程调用协议

相信有一些童鞋已经对于RPC的已经有了一些初步了解,在这里还是简单介绍一下。

RPC定义:两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法(进程),由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。而RPC就是客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就想调用本地对象一样。

还是找个中文的图比较好接受~~

                            远程调用流程图

                                   

我们分析一下这十个步骤:

1,客户函数以正常的方式调用客户句柄。

2,客户句柄生成一个消息,调用本地的操作系统。

3,客户端将本地的消息推送到远程的操作系统。

4,远程的操作系统将消息交给了客户句柄。

5,客户句柄将参数提取出来,调用服务器。

6-10步重复上面的操作回到了客户函数。

那么RPC是做了什么呢?封装图上的2~8步。

                                                 

      所以看完这篇文章我们也就应该明白了,想要进行分布式搭建,那么就势必有着服务器之间的通信问题需要的着解决。通信问题又是非常重要的,所以简单介绍了一下网络的基础知识,我们从客户端传输的信息是如何进行传输的,在这里就利用到了I/O技术和NIO技术。进行一套通信又是如此的繁杂,在服务器之间的联系上需要经过十步操作才能到达发送端,那么有一些不需要我们进行必须操作,那么RPC就来了,他成功的帮助了我们解决掉了主机与主机间间通讯的问题,不得不说现在也有一些成熟的框架,比如说Dubbo,它的底层也是基于netty.....

okok..今天又涨姿势

关于Dubbo的文章之后会有详细的讲解,敬请期待~~~

欢迎订阅关注公众号(JAVA和人工智能)

                                                           获取更多免费书籍、资源、视频资料

 

                                    

文章回顾链接:

 1,分布式系统详解--基础知识(概论

 2,分布式系统详解--基础知识(线程)

 3,分布式系统详解--基础知识(通信)

 4,分布式系统详解--基础知识(CAP)

 5,分布式系统详解--基础知识(安全)

 6,分布式系统详解--基础知识(并发)

 7,分布式系统详解--架构简介(微服务)

 8,分布式系统详解--Linux(权限)

 9,分布式系统详解--框架(Hadoop-单机版搭建)

10,分布式系统详解--架构(Hadoop-克隆服务器)

11,分布式系统详解--框架(Hadoop-集群搭建)

12,分布式系统详解--框架(Hadoop-Ssh免密登陆配置)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式系统详解--基础知识(通信) 的相关文章

随机推荐

  • html src 参数,HTTP参数解析

    本文概述 在本节中 我们将讨论各种HTTP参数及其语法 例如 日期和时间格式 字符集等 这些参数用于在编写客户端或服务器的HTTP程序时构造请求和响应消息 HTTP的各种参数如下 HTTP版本 为了指示协议的版本 HTTP使用 编号方案 协
  • 办公网络上网行为管理规划

    办公网络上网行为管理规划是确保办公网络资源的合理利用和保障网络安全的重要措施 下面是办公网络上网行为管理规划的一般性步骤和原则 确立政策和准则 制定明确的上网行为管理政策和准则 明确员工在办公网络上的合规要求和行为规范 包括规定员工上网内容
  • 项目设计:基于YOLO目标检测算法的安全帽/口罩/汽车/行人/交通标志...检测

    本文将详细介绍YOLO目标检测算法 该算法支持各种目标检测 包括 安全帽 汽车 造价 交通标志 等 其他毕业设计题目推荐参考 毕业设计 电子 通信 计算机 物联网专业毕业设计选题参考 嵌入式linux 单片机STM32 web 图像 htt
  • 数据库难点知识

    索引 当表中有大量记录时 若要对表进行查询 第一种搜索信息方式是全表搜索 是将所有记录一一取出 和查询条件进行一一对比 然后返回满足条件的记录 这样做会消耗大量数据库系统时间 并造成大量磁盘I O操作 第二种就是在表中建立索引 然后在索引中
  • matlab通用操作界面窗口包括哪些,matlab作业题

    第一章 MATLAB环境 1 MATLAB通用操作界面窗口包括哪些 命令窗口 历史命令窗口 当前目录窗口 工作空间窗口各有哪些功能 答 MATLAB通用操作界面窗口包括 命令窗口 历史命令窗口 当前目录浏览器窗口 工作空间窗口 变量编辑器窗
  • 前端的工程化、模块化和组件化

    什么是工程化 工程化是一种思想而不是某种特定的技术 当然我们在实现项目工程化的过程中 我们也会去使用一些技术 前端工程化是使用软件工程的技术和方法来对前端的开发流程 技术 工具等进行规范化 标准化 其主要目的为了提高效率和降低成本 即提高开
  • 使用Class.forName 自动完成注册驱动,简化代码 但是 “//” 是使用最多的

    方式1 public void connect05 throws IOException ClassNotFoundException SQLException 通过properties对象获取文件信息 Properties propert
  • Python爬虫突破封禁的6种常见方法

    在互联网上进行自动数据采集 抓取 这件事和互联网存在的时间差不多一样长 今天大众好像更倾向于用 网络数据采集 有时会把网络数据采集程序称为网络机器人 bots 最常用的方法是写一个自动化程序向网络服务器请求数据 通常是用 HTML 表单或其
  • select2 获取选中的值

    获取选中的名 var cardTypeW cardType option checked text 获取选中的值 写法1 var cardTypeW cardType option checked val 写法2 var cardTypeW
  • js逆向-某旗小说

    声明 本文仅供学习参考 请勿用于他途 违者后果自负 前言 笔者一直是一个小说控 喜欢看小说很多年了 自从学会了python后 就经常会去不同的小说网站抓取小说保存到本地阅读 最近发现一本很好看的小说 准备抓下来看 却发现有请求参数和返回的接
  • webpack的构建流程

    一 运行流程 webpack 的运行流程是一个串行的过程 它的工作流程就是将各个插件串联起来 在运行过程中会广播事件 插件只需要监听它所关心的事件 就能加入到这条webpack机制中 去改变webpack的运作 使得整个系统扩展性良好 从启
  • opencv生成棋盘格

    头文件 include
  • 前端将List列表转化为树型结构(reduce函数)

    主要用到了reduce 函数 for循环可以做到的事情reduce 都可以做到 甚至操作起来更加简单方便和高雅 reduce 为数组中的每一个元素依次执行回调函数 不包括数组中被删除或从未被赋值的元素 reduce语法 array redu
  • 使用我们的actionbar实现我们的tab导航功能(详解)

    第一步的话就是创建我们对应的fragment 这里的话我们创建了三个对应的fragment 第二步的话就是创建我们的mytablistener类 package com example handle Fragments import and
  • 超简单:很火的3D立体动态相册,送给心爱的那个人

    1 首先 我们一共需要三个文件 目录关系如下所示 先建index html文件吧 电脑上先创建一个 txt文件 在里面加入代码后保存 重命名为index html 记得把原来的 txt后缀覆盖 html我用的谷歌浏览器 index html
  • pg_receivewal实践

    测试从pg receivewal的日志中恢复从库为主库 主从配置async模式 配置pg receivewal接收日志pg receivewal D dbaas pg data pg receivewal data v h 10 9 10
  • 动态模型系列笔记(一)——隐马尔可夫模型(HMM)

    隐马尔可夫模型 背景介绍 提纲 隐马尔可夫模型 HMM 符号表示 两个假设 三个问题 Evaluation Learning Decoding 小结 附录 背景介绍 隐马尔可夫模型 HMM 是一种概率图模型 我们知道 机器学习模型可以从频率
  • 自创简易加密算法

    前几日和同事聊天 说到经常忘记密码 但记在一些地方 又不放心 我们就想 要是实现一个加密算法 每次记录加密结果 需要时再解密 那问题不就迎刃而解了嘛 后来根据需求 设计了一个基于异或的对称加密算法 算法非常简单 1 先定义一个由一系列不规则
  • LLVM IR(一)——如何使用LLVM编译执行代码

    可以转载 请注明出处 文章目录 1 1 LLVM IR的三种结构 1 2将C文件转为LLVM IR汇编码 1 3将LLVM IR汇编码转为bitcode 1 4执行LLVM bitcode 1 5链接LLVM bitcode 1 6自己写一
  • 分布式系统详解--基础知识(通信)

    分布式系统详解 基础知识 通信 上一篇文章我们写到了 分布式系统详解 基础知识 线程 简单了解了一下线程的基本概念和线程和分布式的那斩不断理还乱的关系 今天再讲解一下它的另外一个必备知识 通信 进程之间进行通信是分布式的核心 失去了通信 也