grpc特点(gRPC原理、核心概念和性能分析)

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。


友情提醒: 请添加客服微信进行免费领取流量卡!
QQ交流群:226333560 站长微信:qgzmt2

原创文章,作者:sunyaqun,如若转载,请注明出处:https://www.dallk.cn/61565.html

(0)
sunyaqunsunyaqun
上一篇 2024年9月3日
下一篇 2024年9月3日

相关推荐

发表回复

登录后才能评论