Capitán Proto


Cap'n Proto es un formato de serialización de datos y un marco de llamada a procedimiento remoto (RPC) para intercambiar datos entre programas informáticos. El diseño de alto nivel se centra en la velocidad y la seguridad, lo que lo hace adecuado tanto para la red como para la comunicación entre procesos. Cap'n Proto fue creado por el antiguo responsable del popular framework Protocol Buffers de Google (Kenton Varda) y fue diseñado para evitar algunas de sus deficiencias percibidas.

Como la mayoría de los frameworks RPC que datan desde Sun RPC y OSF DCE RPC (y sus descendientes basados ​​en objetos CORBA y DCOM ), Cap'n Proto usa un Lenguaje de Descripción de Interfaz (IDL) para generar bibliotecas RPC en una variedad de lenguajes de programación - automatizar muchos detalles de bajo nivel, como manejar solicitudes de red, convertir entre tipos de datos, etc. El esquema de interfaz de Cap'n Proto usa una sintaxis similar a C y admite tipos de datos primitivos comunes (booleanos, enteros, flotantes, etc.), tipos compuestos (estructuras, listas, enumeraciones), así como genéricos y tipos dinámicos. [1] Cap'n Proto también admite características orientadas a objetos como la herencia múltiple, que ha sido criticada por su complejidad. [2]

Los valores en los mensajes de Cap'n Proto se representan en binario , a diferencia de la codificación de texto utilizada por los formatos " legibles por humanos " como JSON o XML . Cap'n Proto intenta hacer que el protocolo de almacenamiento / red sea apropiado como formato en memoria, de modo que no se necesite ningún paso de traducción al leer datos en la memoria o escribir datos fuera de la memoria. [nota 1] Por ejemplo, la representación de números ( endianness ) se eligió para que coincida con la representación de las arquitecturas de CPU más populares. [3] Cuando las representaciones en memoria y de protocolo de cable coinciden, Cap'n Proto puede evitar copiar y codificar datos al crear o leer un mensaje y, en su lugar,apunte a la ubicación del valor en la memoria. Cap'n Proto también admite el acceso aleatorio a los datos, lo que significa que se puede leer cualquier campo sin tener que leer el mensaje completo. [4]

A diferencia de otros protocolos de serialización binaria como XMI , Cap'n Proto considera la validación de datos detallados a nivel de RPC como una anti-característica que limita la capacidad de un protocolo para evolucionar. Esto fue informado por experiencias en Google donde simplemente cambiar un campo de obligatorio a opcional causaría fallas operativas complejas. [5] [nota 2] Los esquemas de Cap'n Proto están diseñados para ser lo más flexibles posible y empujan la validación de datos al nivel de la aplicación, lo que permite cambiar el nombre arbitrario de los campos, agregar nuevos campos y hacer que los tipos concretos sean genéricos [6] Cap'n Proto Sin embargo, valida los límites del puntero y comprueba los valores individuales cuando son los primerosaccedido . [4]

La aplicación de restricciones de esquema complejas también incurriría en una sobrecarga significativa, [nota 3] negando los beneficios de reutilizar las estructuras de datos en memoria y evitar el acceso aleatorio a los datos. [7] El protocolo Cap'n Proto es teóricamente adecuado [8] para una comunicación entre procesos (IPC) muy rápida a través de la memoria compartida inmutable, pero a partir de octubre de 2020 ninguna de las implementaciones admite el paso de datos a través de la memoria compartida. [9] Sin embargo, Cap'n Proto todavía se considera generalmente más rápido que Protocol Buffers y bibliotecas RPC similares. [10] [11]

Cap'n Proto RPC es consciente de la red: admite tanto el manejo de desconexiones como la canalización de promesas , en la que un servidor canaliza la salida de una función a otra función. Esto le ahorra al cliente un viaje de ida y vuelta por llamada sucesiva al servidor sin tener que proporcionar una API dedicada para cada posible gráfico de llamadas. Cap'n Proto puede superponerse a TLS [12] y la compatibilidad con Noise Protocol Framework está en la hoja de ruta. [13] Cap'n Proto RPC es independiente del transporte, y la implementación de la línea principal admite WebSockets, HTTP, TCP y UDP. [14]