欢迎大家来到IT世界,在知识的湖畔探索吧!
gRPC 简介
gRPC 是Google开源的一个高性能、通用的RPC框架。
gRPC 客户端和gRPC服务端共用一个接口方法。
gPRC客户端和服务端可以在各种环境中运行和相互调用。它具有运行环境无关性和开发语言无关性。这种与语言无关的RPC框架,更适合构建分布式应用,尤其是微服务系统。
在客户端有一个称为stub的本地对象,它实现了与服务相同的方法。然后,客户端可以在stub 本地对象上调用这些方法,并将该调用的参数包装在适当的Protocol buffer消息类型中。然后客户端将请求消息发送到服务器,如果是同步调用,需要等待服务端的响应。
gRPC为什么性能表现如此优异?
Spring Cloud 中默认使用Feign 进行内部的服务调用,而Feign底层使用HTTP协议进行服务之间的调用。
对比gRPC和HTTP/JSON 客户端的传输效率,gRPC性能表现非常优异。主要有3个方面的原因:
(1)gPRC采用了Proto Buffer 作为序列化工具,这比采用JSON方式进行序列化性能提高了不少;
(2)gRPC采用了HTTP2协议,进行了头部信息压缩,对连接进行了复用,减少了TCP的连接次数;
(3)gPRC采用了Netty作为IO处理框架,提高了性能。
gPRC依赖Protocol Buffers
Protocol Buffers简称ProtoBuf,是一种高效、轻便、易用的结构化数据存储格式,它与平台无关、与语言无关、可扩展性强,广泛用于通信协议和数据存储等领域。
(1)Protocol Buffer具有JSON、XML格式的所有优点,且易于扩展;
(2)Protocol Buffer解析速度非常快,与XML对比,解析速度快了 20-100倍,比JSON快3-5倍;
(3)序列化数据非常紧凑、简洁,与XML对比,采用Protocol Buffer序列化的数据大概是采用XML序列化数据size的10%-30%;
gRPC依赖HTTP2
HTTP2即超文本传输协议版本2,HTTP2通过对头部字段进行压缩,在客户端和服务端建立连接之后允许双向传输数据来提高传输效率、减少延迟。
(1)HTTP2是一个二进制协议;
(2)多路复用,提高了连接的利用率;
(3)头压缩;
(4)服务器推送,是HTTP2具有的一个强大的功能,这个功能称为缓存推送。
gPRC基于Netty进行IO处理
Netty 是由JBOSS开源的一个异步事件驱动的Java网络应用框架,用于快速开发可维护的、高性能的服务器和客户端。
gRPC 的Java版本用Netty 作为NIO框架。
gRPC 的服务端(Server)和客户端(Client)均使用Netty Channel 作为数据传输通道,使用Proto Buffer作为数据序列化和反序列化的工具,每个请求都封装成符合HTTP2规范的数据流。客户端连接上服务端的Channel 之后,仍然保持长连接,这样就做到了连接复用,而不需要每次请求都需要客户端重新连接上服务端,从而大大提高了数据交互的效率。
Spring Cloud 默认使用Feign 进行内部的服务调用,而Feign 底层使用HTTP 协议进行服务之间的调用。现在更高效的内部服务调用方案是gRPC。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/17833.html