了解rpc与protobuf

文章目录

    • 前言
    • kafuka与rpc的区别
    • grpc
      • http2与http1协议。
      • http2的 protobuff
    • grpc的四种模式
      • unary api 一元模式
      • client stream api 客户端流模式
      • servier stream api 服务端流模式
      • bidirectional stream api 双端流模式
    • protoc
    • 总结

前言

(remote Procedure call)远程程序调用。rpc能让你像调用本地方法一样去调用远程的方法,通过网络从远程计算机程序上请求服务。

rpc可以是跨语言的,rpc服务端一门语言,rpc客户端可以是另外一门语言。比如服务端用golang,客户端用php。

grpc(google remote produre calls)是谷歌的rpc服务项目。protole buffer(简称protobuf)是一种结构化数据,同时也有对应的语法,protoc是对protobuf文件的编译器,protobuf文件编写完成后通过protoc生成一些给各语言使用rpc服务的文件。

kafuka与rpc的区别

共同点:服务的两端可以是不同的编程语言

不同点:kafuka是异步的,rpc是同步的

kafuka的生产者消费者模型:在队列满之前,消费者可以随时投递任务,投递之后即可去执行其他任务了。消费者会将队列列中任务逐个处理。kafuka适合处理耗时长但是不紧急的任务,比如注册成功的短信通知或者发送邮件。

rpc的调用:客户端发送rpc请求后需要等待rpc返回的处理结果。适合传输数据量大,网络环境不稳定的数据存储、RPC数据交换场景

grpc

grpc(google remote produre calls)是谷歌的rpc服务项目。grpc的特点在于:基于http2协议和protobuf。

http2与http1协议。

http1:文本。

http2:二进制流。

数据传输上不同在于protobuf传输过程中对数据的压缩,http1以文本的形式,而http2是使用了二进制流的形式。例如传输128和“128”

协议 数据 大小
http1 127(传输过程以文本类型,utf-8) 3字节
http2 127(二进制) 1字节

长连接的不同,http1.1开始支持长连接,通过三次握手之后打开一个长连接,然后发送多个http请求,请求之间是同步阻塞的。第一个请求返回后才能处理第二个请求,http2则可以同时接受多个请求,任意顺序处理请求返回,也可以多个请求一个返回。

http2的 protobuff

客户端与服务端同时协议一组参数和接受顺序。客户端指定方法后,通过参数顺序对参数进行赋值,这样的话再传输过程中就只需要传送字段值而不需要传字段名。同样的的数据在传输过程中需要携带数据量更少了。

了解rpc与protobuf_第1张图片

grpc的四种模式

unary api 一元模式

客户端发送一个请求,服务端一个响应

client stream api 客户端流模式

客户端发送多个请求,服务端一个响应

servier stream api 服务端流模式

客户端发送一个请求,服务端多个响应

bidirectional stream api 双端流模式

客户端发送多个请求,服务端响应多个请求

了解rpc与protobuf_第2张图片

protoc

protoc是编译protobuf文件的编码器,可以生成多种编程语言的客户端或服务端代码。

总结

rpc是一种远程程序调用,可以像在本地一样去调用远程的方法。

grpc是谷歌的一套rpc框架。grpc的rpc服务是基于http2协议的。

protobuf 以一种结构化数据,编写protobuf文件,然后通过protoc编译器编译成多种语言的rpc服务文件。

grpc有四种传输模式
注:如果想知道如何通过protoc生成文件或者是protobuf的语法,应该搜索protobuf而不是rpc\grpc

你可能感兴趣的:(glang,rpc,后端)