GRPC 浅析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GRPC 浅析相关的知识,希望对你有一定的参考价值。
参考技术A IDL(proto buffer) + RPCnetty:异步/事件驱动的 网络应用程序服务器框架(高性能)
Http2:流式、双向
protobuf:序列化(节省网络带宽)
IDL定义示例:
Starting from a service definition in a .proto file, gRPC provides protocol buffer compiler plugins that generate client- and server-side code.
Http:如果没有API文档就不知道细节,
GRPC:IDL就相当于API文档,可以同时
开发顺序:
Http:先服务端后客户端
GRPC:可以同时
跨语言:都支持多语言
性能:GRPC远差于Thrift,因为用了Http2,各大server目前支持不完善
易用性:GRPC尚未完全提供连接池、服务自动发现、进程内负载均衡等高级特性,需要开发人员额外的封装;
多语言
Http2特性:如stream
易用性:GRPC尚未完全提供连接池、服务自动发现、进程内负载均衡等高级特性,需要开发人员额外的封装
gRPC介绍
gRPC介绍
什么是gRPC
gRPC=google+Remote Procedure Call,也就是google出品的远程过程调用。
gRPC的分类
RPC也被称为远程调用,目前google的gRPC使用的比较广泛,框架方面阿里的Dubbo在微服务领域被使用的很多。
gRPC的优缺点
gRPC的优缺点比较明显,缺点也部分限制了gRPC的大范围流行。
gRPC的特点
gRPC是一个开源高性能RPC框架,可以在任何环境中运行。它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,调用链追踪,健康检查和身份验证。
它还适用于分布式计算的最后一英里,用于将设备,移动应用程序和浏览器连接到后端服务。
gRPC下图的四个核心特性,使得其对开发者有着极大的吸引力。
gRPC服务流程
gPRC的一个很明显的优势是它使用了二进制编码,所以它比 JSON/HTTP 更快。
gRPC使用了protobufs作为序列化工具,提高了序列化和反序列化的速度,同时降低数据包的大小。在通信协议上,使用HTTP2,性能比HTTP1.1好很多。
gRPC接口规范
服务定义
gRPC定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。
在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。
在客户端拥有一个存根(Stub),它提供与服务器相同的方法。客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,其背后会通过RPC通信给服务端发送请求,并获得响应。
服务段接口定义
要完成服务调用,我们首先要进行服务定义,我们将定义服务的语法称之为IDL(接口定义语言)。
gRPC默认使用Protocol Buffer进行服务定义,这是 Google 开源的一套成熟的结构数据序列化机制。目前Protocol Buffer已经发展到proto3,相对于proto2,它拥有轻量简化的语法、一些有用的新功能,并且支持更多新语言。
服务端的接口定义如下图所示,接口定义说明如下:
定义一个表示请求的HelloRequest,其包含一个name字段表示请求内容
定义一个表示响应的HelloReplay,其包含一个message字段表示响应内容
定义一个服务Greeter,其提供一个SayHello方法,以HelloRequest作为方法参数,并返回HelloReplay
Protocol Buffers
Protocol Buffers,是Google公司开发的一种平台无关、语言无关、可扩展的数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。目前有proto2 和 proto3两个版本。
Protocol Buffers因为其编码方式和储存方法其序列化和反序列化的速度很快,储存空间利用率也很高,当然缺点是不够直观,难以看懂。
Protocol Buffers因为是支持多种语言与场景,基本的使用流程如下:
插件机制
grpc的插件机制既是拦截器机制,以对每一次RPC请求进行拦截。基于此,我们可以实现一些RPC通信过程中的高级功能。
身份验证:gRPC内置了两种验证机制,基于连接层面的SSL/TLS,以及基于Google Token的身份认证机制。如果不满足需求,你也很容易的进行扩展自己验证机制。
负载均衡:在微服务架构中,为了实现容灾、高可用或者水平扩展等目的,通常一个服务都会部署多个节点。客户端在调用时,尽量的将请求分散在不同的节点上,以实现负载均衡。
健康检查:健康检查用于探测服务端是否可以处理RPC请求。检查检查可以由客户端直接发起,或者通过其他系统(如consul)。服务端可以选择回复”unhealthy"来表明自己还没准备好处理请求,或者服务端已经宕机。客户端根据服务端回复的响应信息,或者指定时间内是否收到响应,来判断服务端是否健康。
流式传输
gRPC是基于HTTP/2双向流传输 ,基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
以上是关于GRPC 浅析的主要内容,如果未能解决你的问题,请参考以下文章
flinkFlink 1.12.2 源码浅析 : StreamTask 浅析