Protocol Buffers

Protocol Buffers

Protocol Buffers es una herramienta para la serialización de estructuras de datos. La serialización es un proceso de codificación de un objeto en un medio de almacenamiento —como puede ser una archivo o un buffer en memoria— en ocasiones para transmitirlo a través de una conexión de red o para preservarlo entre ejecuciones de un programa. La serie de bytes que codifican el estado del objeto tras la serialización puede ser usada para crear un nuevo objeto, idéntico al original, tras aplicar el proceso inverso de deserialización.

Protocol Buffers básicamente provee una manera sencilla de definir la estructura de los datos, pudieron entonces generar código capaz de leer y escribir dichos datos de manera eficiente, desde diferentes lenguajes y en una variedad de distintos tipos de flujos de datos.

Fue desarrollado internamente por Google para almacenar e intercambiar todo tipo de información estructurada. Hasta el punto de que sirve de base para un sistema de llamada a procedimiento remoto o RPC (Remote Procedure Call) propio que es usado prácticamente para todas las comunicaciones entre equipos en Google.

En su momento, Google hizo generadores de código de Protocol Buffers para C++, Java y Python y liberó la herramienta con una licencia BSD

Alternativas

La idea detrás de Protocol Buffers es muy similar a la que dio origen a XML, solo que en este caso el formato es binario, compacto y pone énfasis en la velocidad a la hora de serializar y deserializar los datos.

ℹ️¿Qué es serializar y deserializar?
La serialización es un proceso de codificación de un objeto en un medio de almacenamiento —como puede ser una archivo o un buffer en memoria— en ocasiones para transmitirlo a través de una conexión de red o para preservarlo entre ejecuciones de un programa. La serie de bytes que codifican el estado del objeto tras la serialización puede ser usada para crear un nuevo objeto, idéntico al original, tras aplicar el proceso inverso de deserialización.

Además, es muy similar a Apache Thrift —creado y usado internamente por Facebook— o Apache Avro, excepto porque Protocol Buffers no define un protocolo RPC concreto, sino solo como deben empaquetarse los datos.

Si se quiere definir un servicio RPC que haga uso de un protocolo que se apoye sobre Protocol Buffers para el intercambio de datos, existen diversas implementaciones RPC para distintos lenguajes de programación.

Referencias