protobuf frente a gRPC

Resuelto lony asked hace 6 años • 7 respuestas

Intento entender protobuf y gRPC y cómo puedo utilizar ambos. ¿Podrías ayudarme a entender lo siguiente?

  • Teniendo en cuenta el modelo OSI , ¿dónde está? Por ejemplo, ¿está Protobuf en la capa 4?
  • Pensando en una transferencia de mensajes, ¿cómo es el "flujo", qué está haciendo gRPC y lo que protobuf omite?
  • Si el remitente usa protobuf, ¿puede el servidor usar gRPC o gRPC agrega algo que solo un cliente de gRPC puede entregar?
  • Si gRPC puede hacer posible la comunicación sincrónica y asincrónica, Protobuf es solo para la clasificación y, por lo tanto, no tiene nada que ver con el estado: ¿verdadero o falso?
  • ¿Puedo usar gRPC en una aplicación frontend que se comunica en lugar de REST o GraphQL?

Ya sé, o supongo que lo sé, que:

Protobuf

  • Protocolo binario para intercambio de datos.
  • Diseñado por Google
  • Utiliza una descripción similar a "Estructura" generada en el cliente y el servidor para deshacer/ordenar el mensaje

gRPC

  • Utiliza protobuf (v3)
  • De nuevo de Google
  • Marco para llamadas RPC
  • También hace uso de HTTP/2
  • Posibilidad de comunicación síncrona y asíncrona

Nuevamente asumo que es una pregunta fácil para alguien que ya usa la tecnología. Aún así te agradecería que tuvieras paciencia conmigo y me ayudaras. También estaría muy agradecido por cualquier análisis profundo de las tecnologías en la red.

lony avatar Jan 19 '18 04:01 lony
Aceptado

Los buffers de protocolo son (¿son?) un lenguaje de definición de interfaz y una biblioteca de serialización:

  • Usted define sus estructuras de datos en su IDL, es decir, describe los objetos de datos que desea utilizar.
  • Proporciona rutinas para traducir sus objetos de datos hacia y desde binario, por ejemplo, para escribir/leer datos desde el disco.

gRPC usa el mismo IDL pero agrega la sintaxis "rpc" que le permite definir firmas de métodos de llamada a procedimiento remoto usando las estructuras de datos de Protobuf como tipos de datos:

  • Tú defines tus estructuras de datos.
  • Agrega las definiciones de su método rpc
  • Proporciona código para servir y llamar a las firmas de métodos a través de una red.
  • Aún puede serializar los objetos de datos manualmente con Protobuf si es necesario.

En respuesta a las preguntas:

  1. gRPC funciona en las capas 5, 6 y 7. Protobuf funciona en la capa 6.
  2. Cuando dice "transferencia de mensajes", a Protobuf no le preocupa la transferencia en sí. Solo funciona en cualquier extremo de cualquier transferencia de datos, convirtiendo bytes en objetos.
  3. Usar gRPC de forma predeterminada significa que estás usando Protobuf . Podría escribir su propio cliente que use Protobuf pero no gRPC para interoperar con gRPC, o conectar otros serializadores a gRPC, pero usar gRPC sería más fácil.
  4. Verdadero
  5. sí tu puedes
Peter Wishart avatar Feb 02 '2018 17:02 Peter Wishart

En realidad, gRPC y Protobuf son dos cosas completamente diferentes. Déjame simplificar:

  • gRPC gestiona la forma en que un cliente y un servidor pueden interactuar (como un cliente/servidor web con una API REST)
  • protobuf es solo una herramienta de serialización/deserialización (al igual que JSON)

gRPC tiene 2 lados: un lado del servidor y un lado del cliente, que puede marcar un servidor. El servidor expone RPC (es decir, funciones que puede llamar de forma remota). Y tiene muchas opciones allí: puede proteger la comunicación (usando TLS), agregar una capa de autenticación (usando interceptores),...

Puedes usar protobuf dentro de cualquier programa, que no necesita ser cliente/servidor. Si necesita intercambiar datos y desea que estén fuertemente tipados, protobuf es una buena opción (rápida y confiable).

Dicho esto, puedes combinar ambos para crear un buen sistema cliente/servidor: gRPC será tu código cliente/servidor y creará un prototipo de tu protocolo de datos.

PD: Escribí este artículo para mostrar cómo se puede construir un cliente/servidor con gRPC y protobuf usando Go, paso a paso.

chilladx avatar Feb 02 '2018 17:02 chilladx

grpc es un marco creado por Google y se utiliza en proyectos de producción del propio Google y #HyperledgerFabric está creado con grpc. Hay muchas aplicaciones de código abierto creadas con grpc.

protobuff es una representación de datos como json , esto también es de Google; de ​​hecho, tienen miles de archivos proto generados en sus proyectos de producción.

grpc

  • gRPC es un marco de código abierto desarrollado por Google
  • Nos permite crear Solicitud y Respuesta para RPC y manejar el resto mediante el marco.
  • REST está orientado a CRUD pero grpc está orientado a API (sin restricciones)
  • Construir sobre HTTP/2
  • Proporciona >>>>> autenticación, equilibrio de carga, supervisión y registro
  • [HTTP/2]
    • HTTP1.1 se lanzó en 1997 hace mucho tiempo.
    • HTTP1 abre una nueva conexión TCP a un servidor en cada solicitud
    • No comprime encabezados
    • SIN inserción del servidor, solo funciona con Req, Res
    • HTTP2 lanzado en 2015 (SPDY)
    • Soporta multiplexación
    • El cliente y el servidor pueden enviar mensajes en paralelo a través de la misma conexión TCP.
    • Reduce enormemente la latencia
    • HTTP2 admite la compresión de encabezados
    • HTTP2 es binario
      • proto buff es binario, por lo que es una gran combinación para HTTP2
  • [TIPOS]
    • unario
    • transmisión del cliente
    • transmisión del servidor
    • Transmisión bidireccional
    • Los servidores grpc son asíncronos por defecto
    • Los clientes grpc pueden ser sincronizados o asíncronos.

protobuff

  • Los buffers de protocolo son independientes del idioma
  • El análisis de los buffers de protocolo (formato binario) consume menos CPU
  • [Nombre]
    • Utilice mayúsculas y minúsculas en camello para los nombres de los mensajes.
    • guión bajo_separado para campos
    • Utilice camelcase para enumeraciones y CAPITAL_WITH_UNDERSCORE para nombres de valores
  • [Comentarios]
    • Apoyo //
    • Apoyo /* */
  • [Ventajas]
    • Los datos están completamente escritos
    • Los datos están completamente comprimidos (menos uso de ancho de banda)
    • Se necesita un esquema (mensaje) para generar código y leerlo.
    • La documentación se puede incrustar en el esquema.
    • Los datos se pueden leer en cualquier idioma.
    • El esquema puede evolucionar en cualquier momento de forma segura.
    • más rápido que XML
    • El código se genera automáticamente para usted.
    • Google inventó proto buff, usan 48000 mensajes protobuf y archivos 12000.proto
    • Muchos marcos RPC, incluido grpc, utilizan búferes de protocolo para intercambiar datos.
Narendranath Reddy avatar Aug 18 '2019 13:08 Narendranath Reddy