0
点赞
收藏
分享

微信扫一扫

go语言 远程调用grpc 01 入门

1.(g)RPC是什么

gRPC = google+ Remote Procedure Call, google出品的远程过程调用(像在本地一样调用远程方法)

屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/ 二进制)和通信细节

2.RPC分类

  • 支持多语言的 RPC 框架,比较成熟的有 Google 的 gRPC、Apache(Facebook)的 Thrift;
  • 只支持特定语言的 RPC 框架,例如新浪微博的 Motan;
  • 支持服务治理等服务化特性的分布式服务框架,其底层内核仍然是 RPC 框架, 例如阿里的 Dubbo。

3.应用场景

内部做模块化拆分之后,如果涉及到不同语言的接口调用,就可以使用gRPC.另外,安卓客户端和后端后台服务做交互,也可以直接使用gRPC

4.特点/优缺点(具体到gRPC)

  • grpc可以跨语言使用。支持多种语言 支持C++、Java、Go、Python、Ruby、C#、Node.js、Android Java、Objective-C、PHP等编程语言
  • 基于 IDL ( 接口定义语言(Interface Define Language))文件定义服务,通过 proto3 工具生成指定语言的数据结构、服务端接口以及客户端 Stub;
  • 通信协议基于标准的 HTTP/2 设计,支持·双向流、消息头压缩、单 TCP 的多路复用、服务端推送等特性,这些特性使得 gRPC 在移动端设备上更加省电和节省网络流量;
  • 序列化支持 PB(Protocol Buffer)和 JSON,PB 是一种语言无关的高性能序列化框架,基于 HTTP/2 + PB, 保障了 RPC 调用的高性能。
  • 安装简单,扩展方便(用该框架每秒可达到百万个RPC)
  • gRPC允许客户端指定他们愿意等待RPC完成的时间。该期限被发送到服务端,服务端可以决定在超出了限期时采取什么行动。例如,服务器可能会在超时时取消正在进行的gRPC / HTTP /数据库请求。通过子gRPC调用截至时间和取消操作有助于实施资源使用限制。

缺点:

  1.服务治理相关能力缺失,另外负载均衡和服务发现等功能要业务扩展实现

  2.浏览器兼容问题 。当下,不可能直接从浏览器调用gRPC服务。gRPC大量使用HTTP/2功能,没有浏览器提供支持gRPC客户机的Web请求所需的控制级别。例如,浏览器不允许调用者要求使用的HTTP/2,或者提供对底层HTTP/2框架的访问。

go语言  grpc 01 入门_服务器

go语言  grpc 01 入门_服务器_02

go语言  grpc 01 入门_服务器_03

go语言  grpc 01 入门_客户端_04


go语言  grpc 01 入门_服务端_05

go语言  grpc 01 入门_服务端_06

go语言  grpc 01 入门_客户端_07

go语言  grpc 01 入门_服务端_08





go语言  grpc 01 入门_服务端_09

go语言  grpc 01 入门_服务端_10

go语言  grpc 01 入门_服务器_11



go语言  grpc 01 入门_服务器_12

go语言  grpc 01 入门_服务器_13

gRPC,其实就是RPC框架的一种,前面带了一个g,代表是RPC中的大哥,龙头老大的意思,另外g也有global的意思,意思是全球化比较fashion,是一个高性能、开源和通用的 RPC 框架,基于ProtoBuf(Protocol Buffers) 序列化协议开发,且支持众多开发语言。面向服务端和移动端,基于 HTTP/2 设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

代码生成

  • 所有gRPC框架都为代码生成提供了一流的支持。gRPC开发的核心文件是*.proto文件 ,它定义了gRPC服务和消息的约定。根据这个文件,gRPC框架将生成服务基类,消息和完整的客户端代码。
  • 通过在服务器和客户端之间共享*.proto文件,可以从端到端生成消息和客户端代码。客户端的代码生成消除了客户端和服务器上的重复消息,并为您创建了一个强类型的客户端。无需编写客户端代码,可在具有许多服务的应用程序中节省大量开发时间。


go语言  grpc 01 入门_服务端_14


go语言  grpc 01 入门_服务端_15

go语言  grpc 01 入门_服务端_16

go语言  grpc 01 入门_客户端_17

go语言  grpc 01 入门_服务器_18


go语言  grpc 01 入门_服务端_19

go语言  grpc 01 入门_客户端_20


go语言  grpc 01 入门_服务器_21






举报

相关推荐

0 条评论