protobuf frente a gRPC
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.
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:
- gRPC funciona en las capas 5, 6 y 7. Protobuf funciona en la capa 6.
- 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.
- 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.
- Verdadero
- sí tu puedes
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.
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.