项目中要使用rpc协议框架来实现两个系统之间的接口调用。A系统调用B系统的相应接口,因为考虑到http请求会包含更多冗余信息,造成请求过大,因此选用了rpc众多框架中的grpc。
grpc是google开源的rpc框架,目前版本1.0.0,看jar包引入包括netty与okhttp,同时序列化中使用的是protobuf(google自主研发的序列化方式—支持http2.0与多路复用,同时对数据进行压缩,效率较高,跨平台),目前grpc中的protobuf使用的是3.0最新版本(除了部分语言目前仅支持protobuf 2版本)。
一.为什么要使用grpc
RPC可以基于TCP协议也可以基于HTTP协议,基于TCP的RPC协议较为难读,不友好,虽然数据量小精简,但如果对数据速度及IO要求没有那么高,完全可以使用基于HTTP协议的rpc。由于gRPC基于HTTP/2标准设计,所以相对于其他RPC框架,gRPC带来了更多强大功能,如双向流、头部压缩、多复用请求等。这些功能给移动设备带来重大益处,如节省带宽、降低TCP链接次数、节省CPU使用和延长电池寿命等。同时,gRPC还能够提高了云端服务和Web应用的性能。gRPC既能够在客户端应用,也能够在服务器端应用,从而以透明的方式实现客户端和服务器端的通信和简化通信系统的构建。
二.为什么要使用protobuf
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。
比json、xml效率更高,以高效的二进制方式存储,比 XML 小 3 到 10 倍,快 20 到 100 倍。Protobuf 的编程模式比较友好,简单易学。
有两项技术保证了采用 Protobuf 的程序能获得相对于 XML 极大的性能提高:
1.Protobuf 序列化后的信息内容,信息的表示非常紧凑。
Protobuf 序列化后所生成的二进制消息非常紧凑,这得益于 Protobuf 采用的非常巧妙的 Encoding 方法。
2.Protobuf 封解包的大致过程,封解包的速度。
首先我们来了解一下 XML 的封解包过程。XML 需要从文件中读取出字符串,再转换为 XML 文档对象结构模型。之后,再从 XML 文档对象结构模型中读取指定节点的字符串,最后再将这个字符串转换成指定类型的变量。这个过程非常复杂,其中将 XML 文件转换为文档对象结构模型的过程通常需要完成词法文法分析等大量消耗 CPU 的复杂计算。
反观 Protobuf,它只需要简单地将一个二进制序列,按照指定的格式读取到程序对应的结构类型中就可以了。从上一节的描述可以看到消息的 decoding 过程也可以通过几个位移操作组成的表达式计算即可完成。速度非常快。
文章来源:http://blog.csdn.net/lin6286878/article/details/52537717
相关推荐
标题 "golang_grpc.zip" 提供的是一个用于搭建 Go 语言环境的 gRPC 工具包,这个包...通过这个 golang_grpc.zip 文件,开发者可以快速入门 gRPC 和 Protobuf 在 Go 中的应用,为构建高效、可靠的微服务架构奠定基础。
1. **gRPC基础知识**:gRPC的核心是基于ProtoBuf的接口定义,称为.proto文件。开发者在.proto文件中声明服务和消息类型,ProtoBuf编译器会生成服务端和客户端的 stub代码。这种定义方式使得服务端和客户端可以在不同...
这个压缩包包含了一个简单的客户端(Client)和服务器(Server)通信的例子,名为 "helloworld",这是 GRPC 的官方入门教程。 在 `grpc_client` 和 `grpc_server` 文件夹中,你将找到用 C++ 编写的客户端和服务端...
使用Scala的Akka gRPC快速入门快速入门指南《的介绍了此示例Hello World示例说明了Akka gRPC的基础知识。 在30分钟内,您应该能够下载并运行示例,并使用本指南来了解示例的构造方式。Giter8模板它也可以用作带有...
1. **gRPC基础**:gRPC基于HTTP/2协议,使用protobuf来定义服务接口和数据模型。服务定义包含服务方法的名称、输入和输出消息类型,这些定义会被protobuf编译器转换为各种语言的代码。 2. **Kotlin与gRPC**:在...
Go 入门的学习笔记,从零开始学 Go,做一个 Go 工程师。 持续更新... 如果你发现本项目有内容上的错误,欢迎提交 issues 进行指正。 文档指引 基础语法 - MD文档 基础语法 - Demo gRPC - Hello World 练手项目 -...
Go入门的学习笔记,从零开始学Go,做一个Go工程师。 持续更新... 项目结构 ├─ Go │ ├─ 00-基础语法 │ ├── 01-环境安装 │ ├── 02-变量声明 │ ├── 03-数组 │ ├── 04-Slice 切片 │ ├── 05-...
Go语言,也被称为Golang,是由Google开发的一种静态类型的、编译型的、...实践是检验理论的最好方式,因此,阅读并实践《Go语言入门指南:从基础到实践》中的案例,将有助于你更好地掌握Go语言并将其应用于实际项目中。
在本篇文章中,我们将深入探讨Consul的基础知识,包括其核心功能、工作原理以及如何在C#环境中进行入门实践。 一、Consul的核心功能 1. **服务发现**:Consul提供了服务注册与发现的能力,使得服务提供者可以在...
\n\n### gRPC基础知识\n\n1. **ProtoBuf(Protocol Buffers)**:gRPC基于ProtoBuf定义服务接口和数据结构。ProtoBuf是一种语言中立、平台中立的数据序列化格式,用于结构化数据交换。在`.proto`文件中,我们可以...
在本资料包中,我们将探讨 Dubbo 的基础概念、如何构建入门案例以及 Dubbo 3.0 的新特性。 首先,让我们深入了解一下 **Dubbo 的核心概念**: 1. **服务提供者(Provider)**:提供服务的组件,通过注册服务到服务...
Go语言的第三方库非常丰富,如gRPC用于微服务通信,gorm提供ORM功能,jwt-go处理JSON Web Token,gin或echo作为Web框架。学习如何正确地引入和使用这些库,能让你更好地与外部系统进行交互。 通过这个Go语言实例...
2. 局限性:相比其他现代通信技术(如WCF、WebAPI、gRPC),Remoting已逐渐被淘汰,维护成本高,且不支持异步操作,不适应现代的微服务架构。 六、进阶学习 理解了Remoting的基本概念后,可以深入研究: 1. 高级...
**WCF技术专题:WCF入门与进阶** Windows Communication Foundation(WCF)是微软推出的一种面向服务的架构,用于构建可互操作的分布式应用程序。它整合了.NET框架中的多种通信技术,如ASMX、Remoting、Web ...
这个项目整合了多个现代前端和后端开发工具,旨在提供一个快速启动新应用的基础结构。让我们逐一解析其中的关键技术。 **gRPC**:gRPC 是一个高性能、开源和通用的RPC框架,由Google开发,它基于HTTP/2协议,支持...
文档介绍了Go语言的发展背景、基础语法、数据类型、控制结构、函数、结构体、接口等内容。特别重点讲解了Go语言独特的并发编程特性,包括goroutines和channel的使用。此外,还包含了具体的代码示例帮助读者理解和...
开发者需要熟悉gRPC消息协议,了解如何配置和管理网络节点。 Hyperledger Fabric的核心组件包括CA、排序服务、peer节点和链码(Chaincode)等。链码是运行在peer节点上的程序,用于定义和管理账本上的状态转换。在...
Dapr的核心理念是解耦应用逻辑与基础设施,使得开发者可以专注于业务逻辑,而无需关心服务发现、状态管理、服务间通信等底层实现。它通过提供API和SDK,使得开发者能够轻松地在各种环境中(如Kubernetes、本地环境...
根据给定的文件信息,...综合以上信息,这份文档是关于.Net Core技术栈的全面教程,包含了从基础入门到高级主题的广泛内容,适用于希望学习和提高*** Core、Razor Pages、MVC、EF Core、SignalR、gRPC等技术的开发者。