代码之家  ›  专栏  ›  技术社区  ›  lony

协议与gRPC

  •  159
  • lony  · 技术社区  · 8 年前

    我试图理解protobuf和gRPC,以及如何使用这两种语言。你能帮我理解以下内容吗:

    • 考虑到 OSI model 例如,Protobuf在第4层的位置是什么?
    • 通过消息传输思考“流”是怎样的,gRPC在做什么,protobuf遗漏了什么?
    • 如果发送方使用protobuf,服务器是否可以使用gRPC,或者gRPC是否添加了只有gRPC客户端才能提供的内容?
    • 如果gRPC可以使同步和异步通信成为可能,Protobuf只是用于编组,因此与状态无关-真或假?
    • 我可以在前端应用程序通信中使用gRPC而不是REST或GraphQL吗?

    我已经知道或假设我知道:

    Protobuf

    • 数据交换二进制协议
    • 由谷歌设计
    • 在客户端和服务器上使用生成的类似“Struct”的描述来解压缩消息

    gRPC

    • 使用protobuf(v3)
    • 再次来自谷歌
    • RPC调用框架
    • 还利用了HTTP/2
    • 可以进行同步和异步通信

    我再次假设,对于已经在使用该技术的人来说,这是一个简单的问题。我仍然会感谢你对我有耐心并帮助我走出困境。我也非常感谢任何网络技术的深入研究。

    5 回复  |  直到 5 年前
        1
  •  146
  •   Peter Wishart    7 年前

    协议缓冲区 是(是?)接口定义语言和序列化库:

    • 在IDL中定义数据结构,即描述要使用的数据对象
    • 它提供了将数据对象转换为二进制或二进制的例程,例如从磁盘写入/读取数据

    gRPC公司 使用相同的IDL,但添加了语法“rpc”,允许您使用Protobuf数据结构作为数据类型定义远程过程调用方法签名:

    • 定义数据结构
    • 添加rpc方法定义
    • 它提供通过网络提供和调用方法签名的代码
    • 如果需要,仍然可以使用Protobuf手动序列化数据对象

    回答问题:

    1. gRPC在第5、6和7层工作。Protobuf在第6层工作。
    2. 当您说“消息传输”时,Protobuf与传输本身无关。它只在任何数据传输的两端工作,将字节转换为对象
    3. 默认情况下使用gRPC 您正在使用Protobuf . 您可以编写自己的客户端,使用Protobuf而不是gRPC与gRPC进行互操作,或者将其他序列化程序插入到gRPC中,但使用gRPC会更容易
    4. 真的
    5. 是的,你可以
        2
  •  97
  •   gMale    7 年前

    实际上,gRPC和Protobuf是两个完全不同的东西。让我简化一下:

    • gRPC管理客户端和服务器的交互方式(就像使用REST API的web客户端/服务器一样)
    • protobuf只是一个序列化/反序列化工具(就像JSON一样)

    gRPC有两个方面:一个是服务器端,另一个是客户端,可以拨打服务器。服务器公开RPC(即可以远程调用的函数)。您有很多选择:您可以保护通信(使用TLS),添加身份验证层(使用拦截器)。。。

    您可以在任何程序中使用protobuf,而不需要是客户机/服务器。如果您需要交换数据,并且希望它们是强类型的,protobuf是一个不错的选择(快速可靠)。

    也就是说,您可以将两者结合起来构建一个好的客户机/服务器系统:gRPC将是您的客户机/服务器代码,而protobuf是您的数据协议。

    附言:这是我写的 paper 要演示如何使用Go逐步使用gRPC和protobuf构建客户机/服务器。

        3
  •  11
  •   swrobel chl    5 年前

    grpc公司 是一个由谷歌构建的框架,用于谷歌自身的生产项目,HyperledgerFabric是用grpc构建的。有许多开源应用程序是用grpc构建的

    原buff 数据表示形式如下 json

    grpc公司

    • gRPC是由google开发的开源框架
    • 它允许我们创建请求&框架响应RPC和处理rest
    • REST面向CRUD,但grpc面向API(无约束)
    • 构建在HTTP/2之上
    • 提供(>)&燃气轮机&燃气轮机&燃气轮机&燃气轮机;身份验证、负载平衡、监控、日志记录
    • [HTTP/2]
      • HTTP1.1早在1997年就发布了
      • HTTP1在每次请求时打开到服务器的新TCP连接
      • 它不压缩标题
      • 没有服务器推送,它只与Req、Res一起工作
      • 2015年发布的HTTP2(SPDY)
      • 支持多路复用
      • 客户端(&P);服务器可以通过相同的TCP连接并行推送消息
      • 大大减少延迟
      • HTTP2支持标头压缩
      • HTTP2是二进制的
        • proto buff是二进制的,因此它与HTTP2非常匹配
    • [类型]
      • 一元
      • 客户端流式处理
      • 服务器流式处理
      • 双向流媒体
      • 默认情况下,grpc服务器是异步的
      • grpc客户端可以是同步或异步的

    原buff

    • 解析协议缓冲区(二进制格式)的CPU占用较少
    • [命名]
      • 消息名称使用驼峰大小写
      • 下划线\u为字段分隔
      • 对枚举使用camelcase,对值名称使用大写\u加下划线
    • [评论]
      • 支持//
      • 支持/**/
    • [优势]
      • 数据已完全键入
      • 数据已完全压缩(带宽使用率更低)
      • 需要架构(消息)来生成代码并读取代码
      • 文档可以嵌入到模式中
      • 可以跨任何语言读取数据
      • 模式可以随时以安全的方式发展
      • 比XML更快
      • 自动为您生成代码
      • Google发明了proto buff,他们使用48000条protobuf消息;12000.proto文件
      • 包括grpc在内的许多RPC框架都使用协议缓冲区来交换数据
        4
  •  0
  •   Bran    4 年前

    gRPC是基于protobuf序列化库的RPC集成样式的实例化。 有五种集成样式:RPC、文件传输、MOM、分布式对象和共享数据库。 RMI是RPC集成样式实例化的另一个示例。还有很多其他的。MQ是MOM集成风格的一个实例。RabbitMQ也是如此。Oracle数据库模式是共享数据库集成风格的一种实例化。CORBA是分布式对象集成风格的一种实例。等等 Avro是另一个(二进制)序列化库的示例。

        5
  •  -1
  •   Nithin Tom    4 年前

    最简单的形式是,grpc就像一辆公共车辆。它将在客户端和服务器之间交换数据。

    推荐文章