GRPC与 ProtoBuf 的理解与总结

简介: GRPC与 ProtoBuf 的理解与总结

转载请注明出处:

1.GRPC

  官网:https://www.grpc.io/

  gRPC 官方文档中文版:http://doc.oschina.net/grpc

  RPC 框架的目标就是让远程服务调用更加简单、透明,其负责屏蔽底层的传输方式(TCP/UDP)、序列化方式(XML/Json)和通信细节。服务调用者可以像调用本地接口一样调用远程的服务提供者,而不需要关心底层通信细节和调用过程。

      gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.

  在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

  GRPC 的优点:

  • 高兼容性、高性能、使用简单

  gRPC 的组成部分:

  • 使用 http2 作为网络传输层
  • 使用 protobuf 这个高性能的数据包序列化协议
  • 通过 protoc gprc 插件生成易用的 SDK

2.protobuf序列化协议 

  Protobuf2 语法指南

                        https://colobu.com/2015/01/07/Protobuf-language-guide/

  Protobuf3 语法指南

                        https://colobu.com/2017/03/16/Protobuf3-language-guide/

2.1 什么是ProtoBuf

  ProtoBuf(Protocol Buffers)是一种跨平台、语言无关、可扩展的序列化结构数据的方法,可用于网络数据交换及存储。

  protoBuf 是一种Google开发的高效的二进制数据交换格式,常用于不同编程语言之间的数据通信。

  在序列化结构化数据的机制中,ProtoBuf是灵活、高效、自动化的,相对常见的XML、JSON,描述同样的信息,ProtoBuf序列化后数据量更小 (在网络中传输消耗的网络流量更少)、序列化/反序列化速度更快、更简单。

  一旦定义了要处理的数据的数据结构之后,就可以利用ProtoBuf的代码生成工具生成相关的代码。只需使用 Protobuf 对数据结构进行一次描述,即可利用各种不同语言(proto3支持C++, Java, Python, Go, Ruby, Objective-C, C#)或从各种不同流中对你的结构化数据轻松读写。

 

2.2 ProtoBuf 协议的工作流程

                 

  在开发 gRPC 应用程序时,先要定义服务接口,其中应包含如下信息:消费者消费服务的方式、消费者能够远程调用的方法以及调用这些方法所使用的参数和消息格式等。在服务定义中所使用的语言叫作接口定义语言(interface definition language,IDL)。

  借助服务定义,可以生成服务器端代码,也就是服务器端骨架 (这里的“骨架”和“存根”都是代理。服务器端代理叫作“骨架”(skeleton),客户端代理叫作“存根”(stub)。),它通过提供低层级的通信抽象简化了服务器端的逻辑。同时,还可以生成客户端代码,也就是客户端存根,它使用抽象简化了客户端的通信,为不同的编程语言隐藏了低层级的通信。就像调用本地函数那样,客户端能够远程调用我们在服务接口定义中所指定的方法。底层的 gRPC 框架处理所有的复杂工作,通常包括确保严格的服务契约、数据序列化、网络通信、认证、访问控制、可观察性等。

 

3. grpc与protoBuf关系

  Protocol Buffers 是一种轻便高效的数据序列化框架,可以将结构化数据序列化为二进制格式,以便于网络传输和存储。通过定义数据结构的 .proto 文件,可以使用 Protocol Buffers 编译器生成各种编程语言的序列化和反序列化代码。Protocol Buffers 的优点是序列化后的数据大小远小于 XML 和 JSON,并且序列化和反序列化的速度也非常快。

  gRPC 是一种基于 HTTP/2 协议的高性能、开源的远程过程调用(RPC)框架。gRPC 使用 Protocol Buffers 作为其默认的数据序列化协议,可以快速地生成客户端和服务端的代码,并且支持多种编程语言。gRPC 的核心特性包括:高性能、双向流、流控制、多种编程语言支持、易于扩展等。

  gRPC 和 Protocol Buffers 是相互关联的,Protocol Buffers 提供了数据序列化和反序列化的功能,而 gRPC 则在此基础上实现了高性能、跨语言、易扩展的远程过程调用框架。

 

标签: protobuf

目录
相关文章
|
Cloud Native IDE Go
Protobuf在IDEA中的插件安装教程
Protobuf在IDEA中的插件安装教程
1365 0
|
算法 安全 编译器
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
702 0
|
存储 编解码 Cloud Native
C++ Qt关于多屏幕窗口处理
C++ Qt关于多屏幕窗口处理
|
6月前
|
JSON 自然语言处理 API
gRPC凭什么成为微服务通信首选?深度解析RPC进化史
本文深入解析了分布式系统中服务通信的核心机制,重点介绍了 RPC 与 gRPC 的原理、优势及使用场景,并详解 gRPC 所依赖的序列化协议 Protocol Buffers(Protobuf)。内容涵盖 RPC 概念、gRPC 特性、Protobuf 语法及服务定义,适合微服务架构设计与维护人员阅读,助你构建高性能、低耦合的服务通信体系。
820 73
gRPC凭什么成为微服务通信首选?深度解析RPC进化史
|
存储 C++
gRPC 四模式之 双向流RPC模式
gRPC 四模式之 双向流RPC模式
1228 0
|
Prometheus 监控 Cloud Native
高频面题: 你们线上 QPS 多少?你 怎么知道的?
本文由45岁资深架构师尼恩撰写,针对高级开发和架构师面试中的高频问题提供详细解答。文章涵盖了QPS、TPS、RT等性能指标的定义及计算方法,详解了如何配置Prometheus与Grafana监控系统QPS,并提供了应对高并发场景(如双十一抢购)的系统部署策略。此外,还分享了多个大厂面试真题及解决方案,帮助读者在面试中充分展示技术实力,提升求职竞争力。建议收藏并深入学习,为面试做好充分准备。更多内容可参考《尼恩Java面试宝典》及相关技术圣经系列PDF。
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
870 4
Golang语言goroutine协程篇
|
移动开发 网络协议 算法
TCP中的粘包、拆包问题产生原因及解决方法
TCP中的粘包、拆包问题产生原因及解决方法
1897 0
TCP中的粘包、拆包问题产生原因及解决方法
|
安全 网络安全 数据安全/隐私保护
HTTPS 请求中的证书验证详解(Python版)
HTTPS 请求中的证书验证详解(Python版)
971 0
|
存储 机器人
ROS2教程 07 参数Param
本文是关于ROS2(机器人操作系统2)中参数(Parameter)机制的教程,介绍了ROS2中参数的使用和管理,包括列出、获取、设置、删除参数,以及如何通过命令行和launch文件在启动节点时配置参数,并通过示例代码展示了如何在ROS2节点中声明和使用参数。
1071 1

热门文章

最新文章