分布式基础——RPC通信

以下内容主要来自于《分布式系统原理与泛型》


进程间通信必须遵守协议。协议往往做是分层的。例如ISO 7层协议和Internet协议的4层协议。

 


 

常用的四种通信模型:

  • 远程过程调用(remote procedure call):应用于客户—服务器。
  • 远程方法调用(remote method invocation, RMI)
  • 面向消息的中间件(message - oriented middleware, MOM):高层消息队列。
  • 流(stream):多媒体,音频和视频。

 

分层协议

 

物理层协议

 

将若干位组成一个成为帧(frame)的单元,并价差每一帧是否被接收方正确接收。采用将所有自己相加,计算出校验和(checksum)

 

传输层协议

 

传输层将消息分为若干传输的足够小的块,每一块都分配一个序列号,然后将它们发送出去。在传输层报头中设计的内容包括那些包已发送,那些包已接受到、接收方所拥有的空间还能容纳多少包、那些包应该重发以及其他一些类似的主题。

 

Internet的传输控制协议(transmissioncontrol protocal,TCP).通用数据表协议(universal datagram protocal,UDP)

 

还有其他专门用途的协议。例如,为了支持实时数据传输,定制了实时传输协议(real-time transport protocl, RTP).

 

高层协议

 

常用主要有FTPHTTP协议。

但是有很多有用的协议不能算是传输协议,是中间协议

例如:软件的认证和授权。

 

通信分类

 

持久通信(persisitent Communication提交传输的信息一直由通信中间件存储。

顺时通信(transient communication)仅仅在输出传输过程中记录信息。

 

异步通信(asynchronous communication)发送方在提交传输的消息后立即往下进行。

同步通信(synchronous communication)发送方被阻塞,直到知道其请求传输已完成。

 

远程过程调用

 

RPC背后银行的思想是尽量使远程过程调用具有与本地调用相同的形式。RPC的调用是透明的。

RPC调用需要两种存根的支持:客户存根和服务器存根。

 

RPC的调用过程如下:

1,客户过程以正常的方式调用客户存根;

2,客户存根生成一个消息,然后调用本地操作系统。

3,客户端操作系统将消息发送给远程操作系统。

4,远程操作系统将消息交给服务器存根。

5,服务器存根将参数提取出来,然后调用服务器。

6,服务器执行要求的操作,操作完成后将结果返回给服务器存根。

7,服务器存根将结果打包成一个消息,然后调用本地操作系统。

8,服务器操作系统将含有结果的消息发送会客户端操作系统。

9,客户端操作系统将消息交给客户存根。

10,客户存根将结果从消息中提取出来,返回给调用它的客户过程。

 

 

参数传递

 

参数列集(parameter mashaling)把参数打包斤消息中的过程。

如果参数和结果都是标量(布尔,字符)那么相对简单。

 

这里需要处理字符集不同,数据的大端和小端。

 

传递引用参数通常会禁止传入引用,而通过使用复制-还原机制代替。如果能知道是输入参数还是输出参数,可以令性能提高一倍(服务器端就不用传回输入参数的值了)

 

RPC规定了消息的格式,并对整数、字符、布尔类型达成一直。我们可以使用接口定义语言IDL来描述接口。

 

异步RPC

 

异步RPC:在没有结果返回的时候,我们需要哦异步RPC,例如:账目转换,数据库添加数据,启动远程服务,执行批处理操作。

 

异步RPC的主要问题无法确保可靠性,客户无法确定它发出的请求是否将得到处理。

 

RPC一些注意内容

 

提供语义:

至多一次操作(at-most-once operation),这种情况下同一个调用的执行不能超过一次,即使系统崩溃时也是如此。(服务器崩溃,客户端不会提交相同的RPC内容)

幂等的(idempotent) 重复多次执行该过程,而不会造成任何不良后果。(服务器崩溃回复之后,客户端可以重复提交相同内容)。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SPDK(存储性能开发套件)官文档中文版。 第一章 简介 1 1.1.什么是SPDK? 1 1.2.入门 1 1.3. Vagrant开发环境 3 1.4.更新日志(略) 6 第二章 概念 6 2.1. 用户空间驱动程序** 6 2.2. 来自用户空间的DMA** 7 2.3. 消息传递和并发** 9 2.4. NAND Flash SSD内部 13 2.5. 将I / O提交到NVMe设备** 15 2.5.1 NVMe规范 15 2.5.2 SPDK NVMe驱动程序I / O路径 15 2.6. 使用Vhost-user进行虚拟化I / O. 16 2.6.1 介绍 16 2.6.2 QEMU 17 2.6.3 设备初始化 18 2.6.4 I / O路径 19 2.6.5 SPDK优化 20 2.7. SPDK目录结构概述 20 2.8. SPDK移植指南 22 第三章 用户指南 22 3.1. 系统配置用户指南 22 3.1.1 IOMMU配置 22 3.2. SPDK应用程序概述 23 3.2.1 配置SPDK应用程序 23 3.3. iSCSI Target 26 3.3.1. iSCSI Target入门指南 26 3.3.2. 通过配置文件配置iSCSI Target 27 3.3.3. 通过RPC法配置iSCSI Target 28 3.3.4. 配置iSCSI启动器 29 3.3.5. rpc配置示例*** 30 3.3.6. iSCSI 热插拔 32 3.4. NVMe over Fabrics Target 32 3.5. Vhost Target(略) 37 3.6 块设备用户指南 38 3.6.1 bdev介绍 38 3.6.2 通用RPC命令 38 3.6.3 Ceph RBD 39 3.6.4 压缩虚拟Bdev模块 40 3.6.5 加密虚拟Bdev模块 41 3.6.6 延迟vbdev模块 41 3.6.7 GPT(GUID分区表) 42 3.6.8 iSCSI bdev 43 3.6.9 Linux AIO bdev 43 3.6.10 OCF虚拟bdev 43 3.6.11 Malloc bdev 44 3.6.12 NULL bdev 44 3.6.13 NVMe bdev 44 3.6.14 逻辑卷Lvol 45 3.6.15 RAID 46 3.6.16 Passthru 46 3.6.17 Pmem 46 3.6.18 Virtio Block 47 3.6.19 Virtio SCSI 47 3.7 BlobFS(Blobstore文件系统) 48 3.7.1 RocksDB集成 48 3.7.2 FUSE插件 49 3.8 JSON-RPC法(略) 49 第四章 程序员指南 49 4.1. Blobstore程序员指南 49 4.1.1 介绍 50 4.1.2 运作理论 50 4.1.3 设计注意事项 52 4.1.4 例子 54 4.1.5配置 54 4.1.6 组件细节 54 4.2. 块设备层编程指南 56 4.3 编写自定义块设备模块 58 4.3.1 介绍 58 4.3.2 创建一个新模块 59 4.3.3创建虚拟Bdev 60 4.4 NVMe over Fabrics目标编程指南 61 4.4.1 介绍 61 4.4.2 原语结构体 61 4.4.3 基础函数 62 4.4.4访问控制 62 4.4.5发现子系统 62 4.4.6 传输 63 4.4.7选择线程模型 63 4.4.8 跨CPU核心扩展 63 4.4.9 零拷贝支持 63 4.4.10 RDMA 63 4.5 Flash传输层 64 4.5.1 术语 64 4.5.2 使用法 67 4.6 GDB宏用户指南 69 4.6.1 介绍 69 4.6.2 加载gdb宏 71 4.6.3 使用gdb数据目录 72 4.6.4 使用.gdbinit加载宏 72 4.6.5 为什么我们需要显式调用spdk_load_macros 72 4.6.6 以上可用的宏总结 73 4.6.7 添加新宏 73 4.7 SPDK “Reduce”块压缩算法 73 4.7.1 介绍 73 4.7.2 例子 74 4.8 通知库 78 第五章 基本信息 79 5.1 事件框架 79 5.1.1 事件框架设计注意事项 80 5.1.2 SPDK事件框架组件 80 5.1.3 应用框架 80 5.2 逻辑卷 81 5.2.1 术语 81 5.2.2 配置逻辑卷 84 5.3 矢量数据包处理(略) 86 第六章 杂项 86 6.1 介绍 86 6.2 NVMe的P2P API 86 6.3 确定设备支持 87 6.4 P2P问题 87 第七章 驱动程序 88 7.1 NVMe驱动程序*** 88 7.1.1 介绍 88 7.1.2 例子 88 7.1.3 公共接口 89 7.1.4 NVMe驱动程序设计 89 7.1.5 NVMe over Fabrics主机支持 91 7.1.6 NVMe多进程 91 7.1.7 NVMe Hotplug 92 7.2 I/OAT驱动程序 93 7.2.1 公共接口 93 7.2.2 关键功能 93 7.3 Virtio驱动程序 93 7.3.1 介绍 93 7.3.2 2MB大页面 93 第八章 工具 94 8.1 SPDK CLI 94 8.1.1 安装所需的依赖项 94 8.1.2 运行SPDK应用程序实例 94 8.1.3 运行SPDK CLI 94 8.1.4 可选 - 创建Python虚拟环境 94 8.2 nvme-CLI 95 8.2.1 nvme-cli with SPDK入门指南 95 8.2.2 使用场景 95 第九章 性能测试报告(略) 96 第十章NVMe-oF Target跟踪点*** 96 10.1 介绍 96 10.2 启用跟踪点 97 10.3 捕获事件的快照 97 10.4 捕获足够的跟踪事件 98 10.5 添加新的跟踪点 99
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值