项目中要使用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
相关推荐
使用Scala的Akka gRPC快速入门快速入门指南《的介绍了此示例Hello World示例说明了Akka gRPC的基础知识。 在30分钟内,您应该能够下载并运行示例,并使用本指南来了解示例的构造方式。Giter8模板它也可以用作带有...
Go 入门的学习笔记,从零开始学 Go,做一个 Go 工程师。 持续更新... 如果你发现本项目有内容上的错误,欢迎提交 issues 进行指正。 文档指引 基础语法 - MD文档 基础语法 - Demo gRPC - Hello World 练手项目 -...
Go入门的学习笔记,从零开始学Go,做一个Go工程师。 持续更新... 项目结构 ├─ Go │ ├─ 00-基础语法 │ ├── 01-环境安装 │ ├── 02-变量声明 │ ├── 03-数组 │ ├── 04-Slice 切片 │ ├── 05-...
基础语法 - MD文档 基础语法 - Demo gRPC - Hello World 练手项目 - 基于 gin 封装
learning_toolsgo-kit微服务实践,从入门到精通系列 (go-kit微服务) 1: v1 go-kit 微服务 基础使用 (HTTP)2: v2 go-kit 微服务 添加日志(user/zap ,并为每个请求添加UUID) 3: v3 go-kit 微服务 身份认证 (JWT...
(WIP):这是具有GraphQL API和GRPC微服务的企业级高级微服务模式,基于使用命令查询责任分离(CQRS)设计模式的域(DDD)。 想问问题,加入松弛频道:) 描述 这应该成为您下一个可扩展项目的后端基础。 这是一个...
我希望Gopher能从实战入门,毕竟go语法简单入门容易但是写好需要不少功力 本书面向读者是懂go基础但希望进阶的偏中上的读者针对人群是偏运维开发 本书是自己学习参考一些开源库的实现和自己工作中的思考总结完成,有...
警告,此项目是一个示例,可以用作构建更复杂的实时系统的基础。 :movie_camera: 预览 :telescope: 系统架构 :rocket: 技术领域 :toolbox: 先决条件 Docker Compose版本(1.25.4) Docker版本(19.03.9) ...
Atomikos曾介绍使用TCC作为微服务的分布式事务解决方案,有一篇简单的译文可作为入门资料。经文章叙述,Atomikos所设计的TCC交互完全整合在HTTP协议之上,并充分地替代了HTTP语义特性,是一个与应用层协议紧接解决...
API设计遵循Python SDK的设计,但是为了简化或与基础gRPC API保持一致,在某些地方有所不同。 入门 先决条件 矢量已上电。 您已成功创建Anki帐户。 已使用Vector随播应用程序设置了Vector。 Vector
Terraform本身是一种用于安全高效地构建,更改和版本化基础结构的工具。 您可以在其和找到有关Terraform的更多。Terraform CLI兼容性2.0.0版和更高版本的Plugin SDK需要Terraform 0.12.0或更高版本。 在运行提供...
3-6 Docker入门基础文档.mp4 3-6 本章小结.mp4 3-7 Ubuntu中通过Docker安装配置MySQL主从节点.mp4 第04章 “云存储”系统之基于用户系统实现的资源隔离及鉴权 4-1 帐号系统介绍与用户表设计.mp4 4-2 编码实战:...
例如,gRPC流用于联网,Consul用于群集。 传递数据,而不传递对象-序列化是一个明确的问题-不要试图隐藏它。 Protobuf一路走来。 要快-不要用性能来代替魔术API的诡计。 入门 是当前学习如何使用Proto.Actor的最佳...
微信公众号:NLP从入门到放弃深度学习自然语言处理变压器伯特-基本知识 ----百分之五十---百分之十---百分之十----百分之十伯特知识蒸馏词向量-词嵌入 Word2vec快速文字/手套句向量句嵌入文本相似度 -公众号-公众号...
Hunt框架文档 入门 基础知识 安全 数据库 数据库ORM 雷迪斯 分页 前端 查看模板 面包屑 本土化 深层发掘 HTTP客户端 快取 消息队列 排程 gRPC 建筑概念 服务容器 服务供应商 原料药
入门指南 许可:warning:关于该项目该项目是一个简单的直播系统,整个项目基于微服务。 警告,此项目是一个示例,可以用作构建更复杂的实时系统的基础。 :movie_camera:预览:telescope:系统架构:rocket:技术...
使用HiveMQ,Apache Kafka和TensorFLow从100000个IoT设备进行大规模流式机器学习如果您只是想开始并在几分钟内快速启动演示,请转到入门以设置基础结构(在GCP上)并运行演示。 您还可以通过现场演示观看20分钟的...
Microservice Lumen是基于Docker和Lumen Framework 7的入门框架。该项目有助于开发和维护用于管理/创建php微服务的简单,干净的基础架构。 只需几个步骤,开发人员就会根据需要启动开发/登台/生产环境。 基本上,...