gRPC概述

RPC

在学习gRPC时,我们需要先了解RPC(远程过程调用)

RPC 是一种技术思想而非一种规范或协议

RPC是指远程过程调用

比如:两台服务器A,B。一个应用部署在A服务器上,A服务器中想要调用B服务器上的应用提供的函数/方法,但是不在一个内存空间,所有不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

RPC框架:

在这里插入图片描述

实现RPC需要解决的问题

序列化与反序列化

将传递的参数值进行传送给远程的程序。本地的话,直接可以通过内存去调用,在RPC中如上图所示,客户端与服务端是不同的进程,甚至有时候二者所使用的都不是同一种语言。这时候就需要客户端把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。这个过程叫序列化和反序列化。同理,从服务端返回的值也需要序列化反序列化的过程

网络传输:

远程调用往往发生在网络上,客户端的和服务端通过网络连接连接。二者上面发生的所有的数据都需要通过网络进行传输,需要一个网络传输层,将序列化后的调用结果传递,因此所使用的协议是不限的。大部分RPC框架使用的是TCP协议,但是UDP也可以,gRPC直接就使用了HTTP2.

寻址问题:

在RPC中,所有的函数都必须有自己的一个ID。这个ID在所有进程中都是唯一确定的,客户端在进行远程调用时都必须附上这个ID。还需要维护一个函数和id的对应表。当客户端需要进行远程调用时,它就查一下这个表,找出相应的Call ID,然后把它传给服务端,服务端也通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。

gRPC

gRPC一个 RPC 框架,与许多 RPC (Dubbo)系统一样;gRPC使用的http2.0规范

服务端负责实现定义好的接口并处理客户端的请求,客户端根据接口描述直接调用需要的服务。客户端和服务端可以分别使用gPRC支持的不同语言实现。
在这里插入图片描述

gRPC 客户端和服务器可以在各种环境中运行和相互通信。

主要特性:

  1. 强大的IDL

    使用ProtoBuf来定义服务,ProtoBuf能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。

  2. 多语言支持

    gRPC支持多种语言,并能够基于语言自动生成客户端和服务端功能库。

  3. HTTP2

    http2具有一些新特性:

    1. 采用二进制格式后实现方便且健壮
    2. 多路复用:多个request共享一个连接。
    3. header压缩:在HTTP1.x中header信息很多,会重复发送。HTTP2.0使用encoder减少了传输的header大小,且通信双方都缓存一份包含了header信息的表,此后的请求可以只发送差异数据,避免信息的重复传输,进一步减少需要传输的内容大小。
    4. 服务端推送:当一个客户端请求资源X,而服务器知道它很可能也需要资源Z的情况下,服务器可以在客户端发送请求前,主动将资源Z推送给客户端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

?abc!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值