networking protocol-buffers grpc

networking - protobuf vs gRPC



protocol-buffers (3)

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

  • gRPC gestiona la forma en que un cliente y un servidor pueden interactuar (al igual que 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 asegurar la comunicación (usando TLS), agregar capa de autenticación (usando interceptores), ...

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

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

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

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

  • Teniendo en cuenta el modelo OSI, ¿qué es, por ejemplo, es Protobuf en la capa 4?
  • Pensando en una transferencia de mensajes, ¿cómo está el "flujo"? ¿Qué está haciendo gRPC?
  • 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 sincronizada 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 asumo que sí, que:

Protobuf

  • Protocolo binario para intercambio de datos.
  • Diseñado por Google
  • Utiliza "Struct" generada como descripción en el cliente y el servidor para deshacer el mensaje de Marshall

gRPC

  • Utiliza protobuf (v3)
  • De nuevo de Google
  • Marco para llamadas RPC
  • Hace uso de HTTP / 2 también
  • Comunicación síncrona y asíncrona posible

Una vez más, supongo que es una pregunta fácil para alguien que ya usa la tecnología. Todavía te agradecería que seas paciente conmigo y que me ayudes. También estaría muy agradecido por cualquier inmersión profunda en la red de las tecnologías.


Las memorias intermedias 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 usar
  • Proporciona rutinas para traducir sus objetos de datos ay desde binarios, por ejemplo, para escribir / leer datos del disco

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

  • Usted define sus estructuras de datos
  • Agregue sus definiciones de 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 necesita

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", Protobuf no se preocupa por la transferencia en sí. Solo funciona en cualquier extremo de cualquier transferencia de datos, convirtiendo bytes en objetos
  3. Usar gRPC por defecto significa que estás usando Protobuf . Puede escribir su propio cliente que use Protobuf pero no gRPC para interoperar con gRPC, o conecte otros serializadores a gRPC, pero usar gRPC sería más fácil
  4. Cierto
  5. sí tu puedes

grpc es un framework creado por google y se usa en proyectos de producción del propio google y #HyperledgerFabric está construido 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 descanso por 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, monitoreo, 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
    • NO empuje 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 compresión de encabezado
    • HTTP2 es binario
      • proto buff es binario, por lo que es una gran combinación para HTTP2
  • [TIPOS]
    • Unario
    • transmisión de 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 lenguaje
  • Analizar buffers de protocolo (formato binario) requiere menos CPU
  • [Nomenclatura]
    • Use el caso de camello para los nombres de los mensajes
    • subrayado_separado para campos
    • Use camelcase para Enums y CAPITAL_WITH_UNDERSCORE para nombres de valores
  • [Comentarios]
    • Soporte //
    • Soporte / * * /
  • [Ventajas]
    • Los datos están completamente escritos
    • Los datos están completamente comprimidos (menos uso de CPU)
    • Se necesita un esquema (mensaje) para generar código y leer el código
    • 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 manera segura
    • más rápido que XML
    • el código se genera automáticamente
    • Google inventó el protofoto, utilizan 48000 mensajes protobuf y 12000.proto archivos
    • Muchos marcos RPC, incluido el grpc, utilizan buffers de protocolo para intercambiar datos