前言
(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
客户端与服务端同时协议一组参数和接受顺序。客户端指定方法后,通过参数顺序对参数进行赋值,这样的话再传输过程中就只需要传送字段值而不需要传字段名。同样的的数据在传输过程中需要携带数据量更少了。
grpc的四种模式
unary api 一元模式
客户端发送一个请求,服务端一个响应
client stream api 客户端流模式
客户端发送多个请求,服务端一个响应
servier stream api 服务端流模式
客户端发送一个请求,服务端多个响应
bidirectional stream api 双端流模式
客户端发送多个请求,服务端响应多个请求
protoc
protoc是编译protobuf文件的编码器,可以生成多种编程语言的客户端或服务端代码。
总结
rpc是一种远程程序调用,可以像在本地一样去调用远程的方法。
grpc是谷歌的一套rpc框架。grpc的rpc服务是基于http2协议的。
protobuf 以一种结构化数据,编写protobuf文件,然后通过protoc编译器编译成多种语言的rpc服务文件。
grpc有四种传输模式。 注:如果想知道如何通过protoc生成文件或者是protobuf的语法,应该搜索protobuf而不是rpc\grpc
|