深入理解 RPC 交互流程

HDFS读写流程介绍,HDFS读数据和写数据的原理是什么? Client(客户端)对HDFS中的数据进行读写操作,分别是Client从HDFS中查找数据,即为Read(读)数据;Client从HDFS中存储数据,即为Write(写)数据。下面我们对HDFS的读写流程进行详细的介绍。假设有一个文件1.txt文件,大小为300M,这样就划分出3个数据块,如图1所示。   图1 文件划分情况   下面,我们借助图1所示的文件,分别讲解HDFS文件读数据和写数据的原理。   1.HDFS写数据原理   在我们把文件上传到HDFS系统中,HDFS究竟是如何存储.. 阅读详情

文节我们讲解 RPC 的消息交互流程,目的是搞清楚一个简单的 RPC 方法调用背后究竟发生了怎样复杂曲折的故事,以看透 RPC 的本质。

640?wx_fmt=png

上图是信息系统交互模型宏观示意图,RPC 的消息交互则会深入到底层。

RPC 是两个子系统之间进行的直接消息交互,它使用操作系统提供的套接字来作为消息的载体,以特定的消息格式来定义消息内容和边界。

RPC 的客户端通过文件描述符的读写 API (read & write) 来访问操作系统内核中的网络模块为当前套接字分配的发送 (send buffer) 和接收 (recv buffer) 缓存。

640?wx_fmt=png

如上图所示,左边的客户端进程写 RPC 指令消息到内核的发送缓存中,内核将发送缓存中的数据传送到物理硬件 NIC,也就是网络接口芯片 (Network Interface Circuit)。NIC 负责将翻译出来的模拟信号通过网络硬件传递到服务器硬件的 NIC。服务器的 NIC 再将模拟信号转成字节数据存放到内核为套接字分配的接收缓存中,最终服务器进程从接收缓存中读取数据即为源客户端进程传递过来的 RPC 指令消息。

消息从用户进程流向物理硬件,又从物理硬件流向用户进程,中间还经过了一系列的路由网关节点。

上图呈现的只是 RPC 一次消息交互的上半场,下半场是一个逆向的过程,从服务器进程向客户端进程返回响应数据。完整的一次 RPC 过程如下图所示:

640?wx_fmt=png

下面用 Python 代码来描述上述过程。

  • Server 端死循环监听本地 8080 端口,等待客户端的连接。

  • 客户端启动时连接本地 8080 端口,紧接着发送词一个字符串 hello,然后等待服务器响应。

  • 服务器接收到客户端连接后立即收取客户端发送过来的字符串,也就是 hello,打印出来。然后立即给对方回复一个字符串 world。

  • 客户端接收到服务器发送过来的 world,马上打印出来。

  • 关闭连接,结束。

# coding: utf-8
# server

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("localhost", 8080))
sock.listen(1)  # 监听客户端连接
while True:
    conn, addr = sock.accept()  # 接收一个客户端连接
    print conn.recv(1024)  # 从接收缓冲读消息 recv buffer
    conn.sendall("world")  # 将响应发送到发送缓冲 send buffer
    conn.close() # 关闭连接

# coding: utf-8
# client

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("localhost", 8080))  # 连接服务器
sock.sendall("hello")  # 将消息输出到发送缓冲 send buffer
print sock.recv(1024)  # 从接收缓冲 recv buffer 中读响应
sock.close() # 关闭套接字

如果从上面代码上观察,我们其实很难看出上图所示的复杂过程。浮现在多数人脑海中往往是下面的这幅简约模型图。相比之下它要简单很多,这也正是操作系统设计的魅力所在,让你时时刻刻都在使用它却感受不到它的存在。

640?wx_fmt=png

小结

通过本节内容,读者们对 RPC 的交互流程应该有了大致了解,但是还并不知道 RPC 之间到底交互了什么。就好比你能看到远方有几个人在说话,但是不知道他们在说啥。

640?wx_fmt=jpeg

下一节我们将放大细节,仔细观察 RPC 客户端服务器之间窃窃私语了什么,它们究竟是在用什么外星语言交流。

练习题

一个很有趣的小测试实验 , 请读者编写代码实现以下情景:

客户端疯狂发送请求,但是服务器不读不处理,会发生什么

640?wx_fmt=jpeg

扫一扫关注公众号「码洞」

想要更多精彩内容,请点击「阅读原文」

手写一个简化版的Dubbo框架 在学习了Dubbo之后, 我发现自己好像了解了Dubbo的实现原理, 又好像不是很了解, 毕竟我只是背诵了下概念, 没有深入的去看源码. 这里我就来手写一个简化版的Dubbo框架, 通过动手实践来深入理解Dubbo的实现原理. Dubbo的实现原理 RPC调用的过程 我们先来看下RPC调用的过程. 服务容器负责启动,加载,运行服务提供者。 服务提供者在启动时,向注册中心注册自己提供的服务。 服... 阅读详情

相关推荐

深入理解RPC的设计与实现

RPC(Remote Procedure Call)远程过程调用,是一种通过网络从远程计算机程序上请求服务的技术。RPC的提出是为了简化分布式系统之间的通信复杂性,让开发者在编写代码时能像调用本地方法一样调用远程方法。序列化是将对象状态转换为可存储或传输的格式的过程,在RPC中主要是将对象转换为字节流以便于通过网络传输。反序列化则是序列化的逆过程,将字节流转换回对象的过程。序列化对于RPC框架来说至关重要,因为它直接影响到远程调用的性能和安全性。

weixin_33239721的博客 1129

RPC协议交互流程

它允许一个计算机程序(通常是客户端)调用另一个计算机上的过程(通常是服务器端)并获取结果,就像调用本地过程一样,而无需了解底层网络通信的细节。通常涉及跨越网络传输数据,因此需要将数据序列化(将数据转换为字节流)以进行传输,并在接收端反序列化(将字节流还原为数据对象)在 RPC 中,参数和结果通常需要序列化(将数据转换为字节流)以进行传输,然后在接收端反序列化(将字节流还原为数据对象)客户端将序列化后的请求参数发送到远程服务器。服务端代理将数据进行反序列化,解析目标服务、目标方法及调用参数,调用相关请求。

Wanggj的博客 734

Logisim实战:手把手教你设计硬布线版MIPS CPU(多周期/8指令/附电路图)

本文是一份详细的Logisim实战指南,手把手教你设计一个采用硬布线控制的多周期MIPS CPU。文章深入剖析了硬布线控制与微程序控制的核心理念差异,并逐步讲解了从定义执行状态、构建状态跳转逻辑到生成控制信号、集成测试的完整流程,最终实现一个支持8条指令、可运行简单程序的处理器模型。

g9h0i1的博客 592

RPC:RPC的通信流程

为什么要学习RPC RPC 最大的特点就是可以让我们像调用本地一样发起远程调用。只要涉及到网络通信,我们就可能用到RPC,RPC是解决分布式系统通信的一大利器: 分布式系统中的网络通信一般都会采用四层的TCP协议或者七层的HTTP协议,前者占大多数,这主要得益于TCP协议的稳定性和高效性。 网络通信说起来简单,但是实际上是一个非常复杂的过程,这个过程包括:对端节点的查找、网络连接的建立、传输数据的编码解码以及网络连接的管理等,每一项都很复杂 你可以想象一下,在搭建一个复杂的分布式系统过程中,如果开发人员在

OceanStar的博客 2865

STM32F4XX软件模拟I2C实现MPU6050姿态数据采集

本文详细介绍了在STM32F4XX平台上通过软件模拟I2C驱动MPU6050传感器实现姿态数据采集的完整方案。内容涵盖软件I2C的GPIO配置、核心通信函数实现、MPU6050寄存器配置详解以及数据读取处理流程,为硬件资源受限的嵌入式应用提供了灵活的解决方案,并分享了调试技巧与常见问题处理方法。

butter的博客 678

Zemax操作33--5倍激光扩束器

5倍扩束

lzy750750的博客 2931

图解RPC【交互形式】【框架对比】

RESTful、 WebService、 HTTP、 基于DB做数据交换、基于MQ做数据交换,以及。: Remote Procedure Call ,即远程过程调用。对响应要求较高,客户端一直等待服务端返回。Server : Provider、服务提供者。Client : Consumer、服务消费者。可以像调用本地方法那样调用远程方法。系统A,B异步处理数据,数据允许积压。,从跨进程到跨物理机已经有几。Stub :存根、服务描述。

豆恭梓的博客 299

SEED-VII 实战指南:如何利用多模态脑电图数据提升情感识别精度

本文提供了SEED-VII多模态脑电图数据集的实战指南,详细介绍了如何利用该数据集提升情感识别精度。内容涵盖数据获取、预处理、特征提取,以及构建多模态融合神经网络模型的关键步骤,并强调了被试者独立评估的重要性,为情感计算研究者提供了从数据到模型的全流程解决方案。

weixin_29196891的博客 317

RPC 协议学习

记录标识协议RPC的学习过程与要点

记录工作的点滴收获 361

基于深度学习的UWB门禁检测

针对基于UWB技术智能门禁管理系统,由于测距误差或非视距原因导致门禁产生不合理动作的现象。分析如何采用基于深度学习的方法,通过对TWR测距数据、TWR监听数据、到达角度差(PDOA)、信道脉冲响应(CIR)等数据维度进行深度学习,利用 TensorFlow建立相应的推导模型,对卡片姿态进行更加精准可靠的检测,从而更好完成闸机开合控制。

tenth_quadrant的博客 2026

UE5 GAS实战:从零构建一个MOBA英雄技能系统

本文详细介绍了如何利用UE5的Gameplay Ability System(GAS)构建MOBA英雄技能系统,涵盖核心组件如Ability System Component和GameplayEffect的使用,以及技能冷却、资源管理和连招系统等高级功能的实现。通过实战案例和代码示例,帮助开发者快速掌握GAS在MOBA游戏开发中的应用。

weixin_29012765的博客 526

深度了解flink rpc机制(三)-组件以及交互

Flink集群内部通信框架的最低层依赖Akka/Pekko,定义了不同类型的消息,并且设计了通用的RPC通信组件,使用了动态代理进行接口管理,利于扩展维护。

qq_40689430的博客 1245

RV1126笔记二十七:MetaRTC6移植

MetaRTC6移植

6038

rpc系列-简介2

承接rpc系列-rpc01:https://blog.youkuaiyun.com/qq_19968255/article/details/82894381 示例 1.结构 2.代码 客户端: rpc-client /** * 框架的RPC 客户端(用于发送 RPC 请求) */ public class RpcClient extends SimpleChannelInboundH...

独立开发,substack顶级编辑 1606

大模型工作流Dify面试题及参考答案

设计一个基于 Dify 的智能摘要与重点提取 Agent,需结合Prompt 工程、模型能力配置和工作流优化,确保对长文本的高效解析和关键信息提炼。1. 明确任务需求与输入输出输入:长文本内容(如文章、报告、会议记录)或文本 URL输出摘要:简洁概括原文核心内容,控制在原文长度的 10%-20%重点列表:分点列出关键数据、结论、行动项等可选:关键词提取、情感倾向分析示例场景输入:一篇 5000 字的行业报告。

大模型大数据攻城狮的专栏 2510

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Netty学习(八)----实现RPC-demo (能通就行版)

一: 交互流程 说明: client stub 接收到方法调用后 对参数、方法签名封装成易网络传输的消息体 client stub 将消息进行编码,并发送至服务端 server stub 接收消息并进行解码 server stub 根据解码结果调用本地的服务 server本地服务应答server stub servier stub 将执行结果进行封装编码至消费方 消费方进行解码,告知clie...

Lcy 282

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

回顾从hdfs数据读过程看RPC

Client端 org.apache.hadoop.hdfs; DistributedFileSystem 客户端与namenode端协议使用ClientProtocol public FSDataInputStream open(Path f, final int bufferSize) throws IOException { statistics.inc

数据技术控 2359

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

hadoop大数据--深入讲解hdfs源码

hdfs 读数据的流程 1、跟namenode通信查询元数据,找到文件块所在的datanode服务器。 2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流。 3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)。 4、客户端以packet为单位接收,现在本地缓存,然后写入目标文件。 hdfs 写数据的流程 1、根nameno...

学亮编程手记 561

《面试八股文》之Dubbo17卷

虽然金三银四过了,但是金九银十马上就要到了,还不快快准备起来?今天就开启《》系列的第一版-1.Dubbo是什么?RPC又是什么?2. Dubbo能做什么?3.能说下Dubbo的总体的调用过程吗?4.说说Dubbo 支持哪些协议,每种协议的应用场景和优缺点5.Dubbo中都用到哪些设计模式?6.如果Dubbo中provider提供的服务由多个版本怎么办?7.服务暴露的流程是怎么样的?8.服务引用的流程是怎么样的?9.Dubbo的注册中心有哪些?10.聊聊Dubbo SPI机制?......

weixin_70730532的博客 159

GRPC 自学 之路

GRPC 远程调用学习,自己实验运行grpc +python 实例。grpc 函数理解使用,拦截器学习等;

weixin_43159653的博客 1025

5个Dubbo面试题,含金量超高

我们根据两个数据包的自述,来总结一下netty3和netty4的线程模型。1、netty3写过程2、Netty4的读写过程说明:这里没有netty3的读过程,netty3读过程和netty4相同,pipeline是由IO线程执行。总结:netty3与netty4线程模型的区别在于写过程,netty3中pipeline由业务线程执行,而netty4无论读写,pipeline统一由IO线程执行。...

m0_67322837的博客 156

深入理解RPC之手写RPC框架

目录一. RPC是什么二.RPC流程三. RPC协议四. 手写RPC框架功能快捷键 一. RPC是什么 RPC全称remote procedure call,翻译过来就是远程过程调用。在分布式系统中,一个模块像调用本地方法一样调用远程方法的过程,就叫RPC。 我们耳熟能详的webservice、restful接口调用都是RPC,只是消息的组织方式和消息协议不同。 二.RPC流程 RPC的流程大致如上图所示: 客户端调用client stub(client stub位于本地,就和调用本地方法一样),传递参

g2591324079的博客 2914

33.服务之间的调用之RPC、Restful深入理解

RPC、REST API深入理解一:RPCRPC 即远程过程调用(Remote Procedure Call Protocol,简称RPC),像调用本地服务(方法)一样调用服务器的服务(方法)。通常的实现有 XML-RPC , JSON-RPC , 通信方式基本相同, 所不同的只是传输数据的格式.RPC是分布式架构的核心,按响应方式分如下两种:同步调用:客户端调用服务方方法,等待直到服务方返回结果...

郑学炜的技术博客 5万+
上一篇: 深入理解RPC——RPC在企业服务中的核心价值
下一篇: 我为Redis找到了一个新家——VMWare
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值