RPC条记整理

程序员 2024-9-4 02:50:19 51 0 来自 中国
什么是RPC

1.png 比方,HTTP+Restful规范+序列化与反序列化,构成一个完备的远程调用方案,再和RPC举行比力。而单纯的HTTP,只是一个通讯协议,自然无法和RPC比力
RPC的英文全称是Remote Procedure Call,翻译为中文叫“远程过程调用”。此中稍显晦涩的实在就是“过程”,过程实在就是方法。以是,可以把RPC明白为“远程方法调用”。
而在分布式体系中,由于每个服务的边界都很小,很有大概调用别的服务提供的方法。这就出现了服务A调用服务B中方法的需求,即远程过程调用。
要想让服务A调用服务B中的方法,开始想到的就是通过HTTP哀求实现。是的,这是很常见的,比方服务B袒露Restful接口,然后让服务A调用它的接口。基于Restful的调用方式由于可读性好(服务B袒暴露的是Restful接口,可读性固然好)而且HTTP哀求可以通过各种防火墙,因此非常不错。
然而,如前面所述,基于Restful的远程过程调用有着显着的缺点,紧张是服从低、封装调用复杂。当存在大量的服务间调用时,这些缺点变得更为突出。
服务A调用服务B的过程是应用间的内部过程,断送可读性提拔服从、易用性是可取的。基于这种思绪,RPC产生了。
通常,RPC要求在调用方中放置被调用的方法的接口。调用方只要调用了这些接口,就相当于调用了被调用方的实际方法,非常易用。于是,调用方可以像调用内部接口一样调用远程的方法,而不消封装参数名和参数值等利用。
RPC是一个完备的远程调用方案,它包罗了:接口规范+序列化反序列化规范+通讯协议等。
rpc是远端过程调用,其调用协议通常包罗传输协议序列化协议
传输协议包罗: 如著名的 [gRPC](grpc / grpc.io) 利用的 http2 协议,也有如dubbo一类的自界说报文的tcp协议。再比如常见的PRC协议有Http协议,WebSocket协议,Thrift,Hession。(底层都是http   TCP/UDP 协议)
序列化协议包罗: 如基于文本编码的 xml ,json,也有二进制编码的protobuf,hessian, Kryo等。
国内一些大公司的利用环境:
protobuf ,腾迅,百度等
thrift,小米,美团等
hessian, 阿里用的是本身维护的版本,有js/cpp的实现,由于阿里主用java,更多是汗青原因。
简朴来说成熟的rpc库相对http容器,更多的是封装了“服务发现”,"负载均衡",“熔断降级”一类面向服务的高级特性。可以这么明白,rpc框架是面向服务的更高级的封装。假如把一个http servlet容器上封装一层服务发现和函数署理调用,那它就已经可以做一个rpc框架了。
调用方调用内部的一个方法,但是被RPC框架偷梁换柱为远程的一个方法。之间的通讯数据可读性不须要好,只须要RPC框架能读懂即可,因此服从可以更高。通常利用UDP或者TCP作为通讯协议,固然也可以利用HTTP。


GRPC

gRPC是由google开辟的一个高性能、通用的开源RPC框架,紧张面向移动应用开辟且基于HTTP/2协议尺度而操持,同时支持大多数盛行的编程语言。gRPC基于HTTP/2协议传输
grpc 和通常的基于TCP的实现差异,是直接基于HTTP2 协议的。HTTP2 使得grpc 可以或许更好的实用于移动客户端和服务端通讯的利用场景,而且毗连多路复用也包管了RPC 的服从。
grpc 的协议操持上很好的利用了HTTP2 现有的语义,哀求和响应的数据利用HTTP Body 发送,其他的控制信息则用Header 表现。先看个例子,假设Protobuf 界说如...。
谈到RPC,就制止不了序列化的话题。gRPC默认的序列化方式是protobuf,由于两者都是google发明的。在当初Google开源protobuf时,很多人就期待是否能把RPC的实现也一起开源出来。没想到终极出来的是gRPC,终于补全了这一块。
Trpc 基于http2   protobuf
全双工双向流

GRPC基于http2(多路复用)支持全双工,类似websocket。要用双向流参数。再比如参考1,2。
bp 协议跨语言,前端可以直接利用生成的文件直接调用远程远程接口方法。比如:
前端利用的整个流程:
1. 将后端提供的全部的proto文件拷进src/proto文件夹
2. 运行npm run proto 生成proto.js
3. 根据接口枚举在src/api下写接口
4. .vue文件中利用接口。


相干文章
RPC和GRPC
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-12-4 16:47, Processed in 0.166428 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表