博主在5月份已经从上一家公司辞职了,七月份已经到现在的公司了,能在整个互联网大环境都不好的前提下,还能找到工作,待遇还不错,已经很知足了。grpc是进到公司的第一个项目用到的技术,已经用了很久也总结了,只是一直没有时间放到这边来。(ps:如果有空的话,会写一下找工作期间的一些建议和准备)
Grpc概述
在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使我们更容易创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以远程调用的方法及其参数和返回类型。在服务端,服务端实现这个接口并运行一个 gRPC 服务器来处理客户端调用。在客户端,客户端有一个存根(在某些语言中仅称为客户端),它提供与服务器gRPC 客户端和服务器可以在各种环境中运行和相互通信——从 Google 内部的服务器到您自己的桌面——并且可以用任何 gRPC 支持的语言编写相同的方法。
Grpc特性
- grpc可以跨语言使用。支持多种语言 支持C++、Java、Go、Python、Ruby、C#、Node.js、Android Java、Objective-C、PHP等编程语言。
- 基于 IDL ( 接口定义语言)文件定义服务,通过 proto3 工具生成指定语言的数据结构、服务端接口以及客户端 Stub。
- 通信协议基于标准的 HTTP/2 设计,支持双向流、消息头压缩、单 TCP 的多路复用、服务端推送等特性,这些特性使得 gRPC 在移动端设备上更加省电和节省网络流量。
- 序列化支持 PB(Protocol Buffer)和 JSON,PB 是一种语言无关的高性能序列化框架,基于 HTTP/2 + PB, 保障了 RPC 调用的高性能。
- 安装简单,扩展方便(用该框架每秒可达到百万个RPC)。
Grpc的使用场景
微服务
gRPC设计为低延迟和高吞吐量通信,gRPC非常适用于效率至关重要的轻型微服务。网络受限环境
使用Protobuf(一种轻量级消息格式)序列化gRPC消息,使得gRPC消息始终小于等效的JSON消息。点对点实时通信
gRPC对双向流媒体提供出色的支持,gRPC服务可以实时推送消息而无需轮询。多语言混合开发环境
gRPC工具支持所有流行的开发语言,使gRPC成为多语言开发环境的理想选择。
Grpc大致请求流程
1、客户端(gRPC Stub)调用 A 方法,发起RPC 调用。
2、对请求信息使用 Protobuf 进行对象序列化压缩。
3、服务端(gRPC Server)接收到请求后,解码请求体,进行业务逻辑处理并返回。
4、对响应结果使用 Protobuf 进行对象序列化压缩。
5、客户端接受到服务端响应,解码请求体。回调被调用的 A 方法,唤醒正在等待响应(阻塞 )的客户端调用并返回响应结果。
Grpc的使用流程
1、定义标准的proto文件
2、生成标准代码
3、服务端使用生成的代码提供服务
(参考各个 语言的使用)
4、客户端使用生成的代码调用服务
(参考各个语言的使用)
Grpc四种服务方法
-
一元RPC
-
客户端流式RPC
-
服务端流式RPC
-
双向流式RPC