gRPC远程调用框架
gRPC远程调用框架

gRPC远程调用框架

由于加入学校的项目小组,走了的后端留下的是go的grpc框架,所以只能被迫同时学这两个玩意了,在日夜苦读了两个星期后,现在写点笔记。虽然觉得理解的还有一部分不够充分的。

RPC:

RPC(Remote Procedure Call Protocol)远程过程调用程序,目的是让远程程序服务调用更加简单透明。RPC框架负责屏蔽底层的传输方式(TCP或者UDP),序列化方式(XML/Json/二进制)和通信的细节。服务调用者可以像调用本地接口一样调用远程的服务提供者。

  • 服务消费方(client)调用以本地调用方式调用服务
  • client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体
  • client stub找到服务地址,并将消息发送到服务端
  • server stub收到消息后进行解码
  • server stub根据解码结果调用本地的服务
  • 本地服务执行并将结果返回给 server stub
  • server stub将返回结果打包成消息并发送至消费方
  • client stub接收到消息,并进行解码
  • 服务消费方得到最终结果

Protocol Buffers

protoBuf是一种灵活且高效的数据格式,和XML,JSON类似,作用主要有三:定义数据结构,定义服务接口,通过序列化和反序列化提升传输效率。具体就是,服务之间的传输方式,是按照这个protoBuf规定的方式来做。类比成不同地区的人说同一种语言,这样即使是写在信上,传输过去,也能正常阅读。并且由于protoBuf规定了语言,可以约定,每次传输的第一句话是天气,第二句话是气温,第三句话是名字。这样传输内容是“晴,24,甘露寺,”。相比之下“天气:晴,气温:24,名字:甘露寺”。传输效率高了不少。所以这里有个问题,每个服务都需要拥有这个protoBuf。

由此发生的组内小事故

由于不知道前端也拥有一套protoBuf,我在改了后端代码之后,直接提交了,而前端的protoBuf还没有改过,导致正式环境出现了问题。自此之后牢记每个服务都拥有一套protoBuf。

gRPC的跨语言能力就是由此发生的,每个服务不需要统一语言,只需要服务之间通信调用的保证protoBuf相同就可以了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注