searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

gRPC从原理到实践【上】

2023-09-26 08:52:34
10
0

一句话定义

    一个高性能,开源的通用RPC框架。基于HTTP/2协议设计。

特点

    1、gRPC是一个现代开源的高性能远程过程调用 (RPC) 框架,可以在任何环境中运行。

    2、可以通过对负载平衡、跟踪、健康检查和身份验证的可插拔支持有效地连接数据中心内和跨数据中心的服务。

    3、适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端服务。

信息交互

    gRPC默认使用Protocol Buffers作为其接口定义语言 (IDL)和底层信息交互格式。Protocol Buffers是谷歌的成熟的开源的用于序列化结构化的数据,当然也可以使用其他数据格式(如JSON)。

gRPC是基于服务的思想

    像许多RPC系统一样,gRPC基于定义服务的思想,指定可以通过参数和返回类型远程调用的方法。

四种服务方法

1、客户端向服务器发送单个请求并获得单个响应的机构RPC,就像正常函数调用一样。

rpc SayHello(HelloRequest) returns (HelloResponse);
2、 服务器streaming传输RPC,客户端将请求发送到服务器并获取读取一系列消息的流。客户端从返回的流读取,直到没有更多的消息。GRPC保证在单个RPC调用中的消息排序。

rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
3、客户端streaming RPC,客户端写一系列消息并将它们发送到服务器,再次使用提供的流。一旦客户端写入邮件,它会等待服务器读取它们并返回其响应。再次GRPC再次保证在单个RPC呼叫中的消息排序。

rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
4、双向流式RPC,双方使用读写流发送一系列消息。这两个流独立运行,因此客户端和服务器可以以其相同的顺序读取和写入。例如,服务器可以等待接收到所有的客户端消息后才写入响应,或者当他在写消息时候也能读消息,或者其他读写的组合。每个流中的消息顺序被保留。

rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);

使用API

    从Service定义开始,GRPC提供生成客户端和服务器端代码的协议缓冲区编译器插件。 GRPC用户通常在客户端调用这些API并在服务器端实现相应的API。

    在服务器端,服务器实现服务声明的方法,并运行GRPC服务器以处理客户端调用。 GRPC基础架构对传入请求进行解码,执行服务方法,并编码服务响应。

    在客户端,客户端具有称为存根的本地对象(对于某些语言,首选术语是客户端),其实现与服务相同的方法。然后,客户端可以在本地对象上调用这些方法,将调用的参数包装在适当的protocol buffer message类型中,gRPC负责向服务器发送请求并返回服务器的protocol buffer 响应。

同步和异步

     同步RPC调用一直阻塞直到从服务端响应到达客户端,是最接近RPC所期望的过程调用的抽象。网络本质上是异步的,在很多情况下,能够在不阻塞当前线程的情况下启动rpc是很有用的。大多数语言中的gRPC编程API都有同步和异步两种风格。你可以在每种语言的教程和参考文档中找到更多信息(完整的参考文档即将发布)。

0条评论
0 / 1000
s****r
4文章数
0粉丝数
s****r
4 文章 | 0 粉丝
原创

gRPC从原理到实践【上】

2023-09-26 08:52:34
10
0

一句话定义

    一个高性能,开源的通用RPC框架。基于HTTP/2协议设计。

特点

    1、gRPC是一个现代开源的高性能远程过程调用 (RPC) 框架,可以在任何环境中运行。

    2、可以通过对负载平衡、跟踪、健康检查和身份验证的可插拔支持有效地连接数据中心内和跨数据中心的服务。

    3、适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端服务。

信息交互

    gRPC默认使用Protocol Buffers作为其接口定义语言 (IDL)和底层信息交互格式。Protocol Buffers是谷歌的成熟的开源的用于序列化结构化的数据,当然也可以使用其他数据格式(如JSON)。

gRPC是基于服务的思想

    像许多RPC系统一样,gRPC基于定义服务的思想,指定可以通过参数和返回类型远程调用的方法。

四种服务方法

1、客户端向服务器发送单个请求并获得单个响应的机构RPC,就像正常函数调用一样。

rpc SayHello(HelloRequest) returns (HelloResponse);
2、 服务器streaming传输RPC,客户端将请求发送到服务器并获取读取一系列消息的流。客户端从返回的流读取,直到没有更多的消息。GRPC保证在单个RPC调用中的消息排序。

rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
3、客户端streaming RPC,客户端写一系列消息并将它们发送到服务器,再次使用提供的流。一旦客户端写入邮件,它会等待服务器读取它们并返回其响应。再次GRPC再次保证在单个RPC呼叫中的消息排序。

rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
4、双向流式RPC,双方使用读写流发送一系列消息。这两个流独立运行,因此客户端和服务器可以以其相同的顺序读取和写入。例如,服务器可以等待接收到所有的客户端消息后才写入响应,或者当他在写消息时候也能读消息,或者其他读写的组合。每个流中的消息顺序被保留。

rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);

使用API

    从Service定义开始,GRPC提供生成客户端和服务器端代码的协议缓冲区编译器插件。 GRPC用户通常在客户端调用这些API并在服务器端实现相应的API。

    在服务器端,服务器实现服务声明的方法,并运行GRPC服务器以处理客户端调用。 GRPC基础架构对传入请求进行解码,执行服务方法,并编码服务响应。

    在客户端,客户端具有称为存根的本地对象(对于某些语言,首选术语是客户端),其实现与服务相同的方法。然后,客户端可以在本地对象上调用这些方法,将调用的参数包装在适当的protocol buffer message类型中,gRPC负责向服务器发送请求并返回服务器的protocol buffer 响应。

同步和异步

     同步RPC调用一直阻塞直到从服务端响应到达客户端,是最接近RPC所期望的过程调用的抽象。网络本质上是异步的,在很多情况下,能够在不阻塞当前线程的情况下启动rpc是很有用的。大多数语言中的gRPC编程API都有同步和异步两种风格。你可以在每种语言的教程和参考文档中找到更多信息(完整的参考文档即将发布)。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0