RPC——RPC协议介绍及原理详解

article/2025/9/19 6:00:00

common wx:CodingTechWork

介绍RPC学习总结思维导图

RPC框架

概念

  1. RPC(Remote Procedure Call Protocol) 远程过程调用协议。
  2. RPC是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。
  3. RPC主要作用就是不同的服务间方法调用就像本地调用一样便捷。

常用RPC技术或框架

  1. 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。
  2. 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
  3. 通信框架:MINA 和 Netty

主流的gRPC、Thrift、Dubbo

  1. gRPC:gRPC是Google开源软件,gRPC是基于HTTP2.0协议,而HTTP2.0是基于二进制的HTTP协议升级版本,底层使用Netty框架支持。
  2. Thrift:Thrift是Facebook开源项目,其是一个跨语言的服务开发框架。用户只需在进行二开即可,对底层的RPC通讯透明。
  3. Dubbo:Dubbo是阿里开源组件协议和序列化框架都可以插拔,依托Spring框架开发,远程接口是基于Java接口,适用于微服务架构。

为什么要有RPC?

  1. 服务化:微服务化,跨平台的服务之间远程调用;
  2. 分布式系统架构:分布式服务跨机器进行远程调用;
  3. 服务可重用:开发一个公共能力服务,供多个服务远程调用。
  4. 系统间交互调用:两台服务器A、B,服务器A上的应用a需要调用服务器B上的应用b提供的方法,而应用a和应用b不在一个内存空间,不能直接调用,此时,需要通过网络传输来表达需要调用的语义及传输调用的数据。

使用场景

  1. 大型网站:内部涉及多个子系统,服务、接口较多。
  2. 注册发现机制:如Nacos、Dubbo等,一般都有注册中心,服务有多个实例,调用方调用的哪个实例无感知。
  3. 安全性`:不暴露资源。
  4. 服务化治理:微服务架构、分布式架构。

架构

架构图

在这里插入图片描述

一次RPC调用流程

在这里插入图片描述

  1. 客户端(Client)通过本地调用的方式调用服务(以接口方式调用);
  2. 客户端存根(Client Stub)接收到调用请求后负责将方法、入参等信息进行组装序列化成能够进行网络传输的消息体(将消息体对象序列化为二进制流);
  3. 客户端存根(Client Stub)找到远程的服务地址,并且将消息通过网络发送给服务端(通过sockets发送消息);
  4. 服务端存根(Server Stub)收到消息后进行反序列化操作,即解码(将二进制流反序列化为消息对象);
  5. 服务端存根(Server Stub)通过解码结果调用本地的服务进行相关处理;
  6. 服务端(Server)本地服务业务处理;
  7. 服务端(Server)将处理结果返回给服务端存根;
  8. 服务端存根(Server Stub)序列化处理结果(将结果消息对象序列化为二进制流);
  9. 服务端存根(Server Stub)将序列化结果通过网络发送至客户端(通过sockets发送消息);
  10. 客户端存根(Server Stub)接收到消息,进行反序列化解码(将结果二进制流反序列化为消息对象);
  11. 客户端得到最终的结果。

核心功能

重要组成

  1. 客户端:Client,服务调用方。
  2. 客户端存根:Client Stub,存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端。
  3. 服务端存根:Server Stub,接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理。
  4. 服务端:Server,服务的真正提供者。
  5. newtwork service:底层传输,tcp或http

功能实现

  功能实现主要分为服务寻址、序列化和反序列化、网络传输功能。

服务寻址功能

Call ID映射
  1. 本地:在本地方法调用中,函数体是直接通过函数指针来指定的,但是在远程调用中,由于两个进程的地址空间完全不一样,函数指针不起作用。
  2. 远程:RPC中所有函数或方法都有自己的一个ID,在所有进程中都唯一。客户端在做远程过程调用时,必须附上这个ID,即客户端会查一下表,找出相应的Call ID,然后传给服务端,服务端也会查表,来确定客户端需要调用的函数,然后执行相应函数的代码。
  3. Call ID映射表一般是一个哈希表。
技术示例

需要通过服务注册中心去查询对方服务有哪些实例。

  1. Nacos整合OpenFeign实现RPC调用。
  2. Spring Cloud集成Dubbo实现RPC调用。

序列化和反序列化功能

概述
  1. 序列化:将消息对象转换为二进制流。
  2. 反序列化:将二进制流转换为消息对象。
必要性
  1. 远程调用涉及到数据的传输,在本地调用中,只需要将数据压入栈中,然后让函数去栈中读取即可。
  2. 但远程的数据传输,由于客户端和服务端不在同一个服务器上,涉及不同的进程,不能通过内存传递参数,此时就需要将客户端先将请求参数转成字节流(编码),传递给服务端,服务端再将字节流转为自己可读取格式(解码),这就是序列化和反序列化的过程。反之,服务端返回值也逆向经历序列化和反序列化到客户端。
序列化的优势
  1. 将消息对象转为二进制字节流,便于网络传输。
  2. 可跨平台、跨语言。如Python编写的客户端请求序列化参数传输到Java编写的服务端进行反序列化。

网络传输功能

作用
  1. 客户端将Call ID和序列化后的参数字节流传输给服务端。
  2. 服务端将序列化后的调用结果回传给客户端。
协议

  主要有TCP、UDP、HTTP协议。

基于TCP协议
  1. 客户端和服务端建立Socket连接。
  2. 客户端通过Socket将需要调用的接口名称、方法名称及参数序列化后传递给服务端。
  3. 服务端反序列化后再利用反射调用对应的方法,将结果返回给客户端。
基于HTTP协议
  1. 客户端向服务端发送请求,如GET、POST、PUT、DELETE等请求。
  2. 服务端根据不同的请求参数和请求URL进行方法调用,返回JSON或者XML数据结果。
TCP和HTTP对比
  1. 基于TCP协议实现的RPC调用,由于是底层协议栈,更佳灵活的对协议字段进行定制,可减少网络开销,提高性能,实现更大的吞吐量和并发数。但,底层复杂,实现代价高。
  2. 基于HTTP协议实现的RPC调用,已封装实现序列化,但HTTP属于应用层协议,HTTP传输所占用的字节数比TCP更高,传输效率对比TCP较低。

RPC与Restful API对比

侧重不同

  1. RPC侧重于操作
  2. Restful侧重于资源

传输效率

  1. RPC效率更高,可自定义TCP协议,控制请求报文体积。
  2. Restful效率更低,基于HTTP协议。

复杂度

  1. RPC实现复杂,需关注服务寻址、序列化和反序列化及网络传输,调用流程繁琐。
  2. Restful实现简单,无需关注序列化和反序列化、网络传输,调用流程便捷。

使用场景

  1. RPC适用于公司内部服务调用,如部门之间不同平台的服务调用,性能消耗低,传输效率高,实现复杂一些。
  2. HTTP主要用于外部异构环境,浏览器接口调用、第三方接口调用等。

http://chatgpt.dhexx.cn/article/dyulZkHD.shtml

相关文章

RPC协议简述

RPC是指远程过程调用,也就是说两台服务器,一个应用部署在其中一台服务器上,想要调用另外一台服务器上应用提供的函数(方法),由于不在一个内存空间,不能直接调用,需要通过网络来表达调…

一文带你搞懂HTTP和RPC协议的异同

1 什么是RPC协议 1.1 简介 这是老生常谈的协议了,RPC即远程过程调用(Remote Procedure Call), RPC协议是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 1.2 原理及模型 RPC协议广泛的…

关于RPC协议的通俗理解

根据网上搜索的一些资料摘抄汇总的,如果有误,欢迎斧正。 作者:肖继潮 链接:http://www.zhihu.com/question/25536695/answer/31046384 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 早期单机时代&…

NLP之中文命名实体识别

在MUC-6中首次使用了命名实体(named entity)这一术语,由于当时关注的焦点是信息抽取(information extraction)问题,即从报章等非结构化文本中抽取关于公司活动和国防相关活动的结构化信息,而人名…

命名实体识别(biLSTM+crf)

本文是翻译的github这个项目的博客https://guillaumegenthial.github.io/sequence-tagging-with-tensorflow.html。 为什么要用biLSTM?为了使特征提取自动化。当使用CRF工具来进行命名实体识别时,需要自定义模板(或者使用默认的模板)。 任…

命名实体识别(NER)算法

文章目录 标注方案问题建模评价指标常用的NER方法深度学习方法(in survey)输入的分布式表示上下文编码解码器**先说MLPsoftmax和CRF**softmax 延伸至多标签解码 **RNN**Pointer Networks 实践Bert SoftmaxBert CRF 参考 之前做了NER的相关工作&#xf…

命名实体识别(NER):BiLSTM-CRF原理介绍+Pytorch_Tutorial代码解析

本文较全面的介绍了命名实体识别(NER),包括NER定义、BiLSTM-CRF模型、Pytorch代码实现,未来将继续完善本文,以求涵盖NER众多方面。 文章目录 命名实体识别任务(NER)定义BiLSTM-CRF模型模型输入L…

命名实体识别代码阅读

中文命名实体识别 BERT中文任务实战 18分钟快速实战_哔哩哔哩_bilibili 注意注释 from transformers import AutoTokenizer import time # 时间start time.time() #加载分词器 tokenizer AutoTokenizer.from_pretrained(hfl/rbt6) #中文bertprint(tokenizer)#分词测试&am…

命名实体识别详解

1.命名实体识别定义 例如: 2.常用开源的中英文NER工具 这些工具的缺点是:只提供通用型的实体类别如 人名,地方,组织,时间等,对于特定领域,可能很难提取出你需要的实体。 2.1 代码实践 代码来…

命名实体识别(NER – Named-entity recognition) 总结

1. 什么是命名实体识别? 命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。简单的讲&#xf…

命名实体识别学习笔记

1 命名实体识别概述 1.1 定义 命名实体识别(Name Entity Recognition,NER),也称作“专名识别”,是指识别文本中具有特定意义的实体,包括人名、地名、机构名、专有名词等。 1.2 形式化定义 给定标识符集…

命名实体识别的难点与现状

https://baijiahao.baidu.com/s?id1566811969925699&wfrspider&forpc 命名实体识别(Named Entities Recognition, NER)是自然语言处理(Natural Language Processing, NLP)的一个基础任务,其目的是识别语料中人名、地名、组织机构名等命名实体&…

命名实体识别研究综述

命名实体识别研究进展综述 1 引 言 命名实体识别(Named Entity Recognition,NER)的主要任务是识别出文本中的人名、地名等专有名称和有意义的时间、日期等数量短语并加以归类[ 1]。命名实体识别技术是信息抽取、信息检索、机器翻译、问答系统等多种自然语言处理技术必不可少的…

命名实体识别(基于规则-无监督学习-机器学习-深度学习)

文章目录 1 简介2 NER标注语料库3 NER工具库4 序列标注标签方案5 四类NER方法(规则-无监督学习-机器学习-深度学习)5.1 基于规则的NER5.2 基于无监督学习方法5.2 基于机器学习(含特征的有监督学习)5.3 基于深度学习方法1、输入层2…

【论文笔记】命名实体识别论文

其实实体识别这块看了挺久了的,今天就来好好聊一聊它。实体识别(Name Entity Recognition)是属于NLP任务中的序列标注问题:给定一个输入句子,要求为句子中的每一个token做实体标注(如人名、组织/机构、地名、日期等等)…

一文了解命名实体识别

导读:从1991年开始,命名实体识别逐渐开始走进人们的视野,在各评测会议的推动下,命名实体识别技术得到了极大地发展,从最初的基于规则和字典的方法,到现在热门的注意力机制、图神经网络等方法,命…

命名实体识别(NER)知识汇总

介绍 命名实体识别(Named Entity Recognition,NER)是NLP领域中一项基础的信息抽取任务,NER 是关系抽取、知识图谱、问答系统等其他诸多NLP任务的基础。NER从给定的非结构化文本中识别命名实体,并对实体分类&#xff0c…

基于深度学习的命名实体识别与关系抽取

基于深度学习的命名实体识别与关系抽取 作者:王嘉宁 QQ:851019059 Email:lygwjn126.com 个人网站:http://www.wjn1996.cn 【备注:此博文初次编辑为2018年11月23日,最新编辑为2019年10月24日】 夏栀的博…

NLP案例——命名实体识别(Named Entity Recongition)

NLP案例——命名实体识别(Named Entity Recongition) 命名实体识别是NLP里的一项很基础的任务,就是指从文本中识别出命名性指称项,为关系抽取等任务做铺垫。狭义上,是识别出人命、地名和组织机构名这三类命名实体&…

【命名实体识别(NER)】(1):命名实体识别综述

什么是命名实体识别? 命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是自然语言处理中的一项基础任务,应用范围非常广泛。命名实体一般指的是文本中具有特定意义或者指代…