tcp - how - http 2 request example
¿Los protocolos binarios están muertos? (15)
Parece que solía haber muchos más protocolos binarios debido a las lentas velocidades de Internet de la hora (acceso telefónico). He estado viendo que todo está siendo reemplazado por HTTP y SOAP / REST / XML.
¿Por qué es esto?
¿Los protocolos binarios están realmente muertos o son menos populares? ¿Por qué estarían muertos o serían menos populares?
¿Los protocolos binarios están muertos?
Dos respuestas:
- Ojala.
- No.
Al menos un protocolo binario es mejor que XML, que proporciona toda la legibilidad de un protocolo binario combinado con toda la eficiencia de menos eficiencia que un protocolo ASCII bien diseñado.
Un paralelo con los lenguajes de programación es probablemente muy relevante.
Si bien los lenguajes de alto nivel son las herramientas preferidas para la mayoría de los trabajos de programación, y han sido posibles (en parte) por los aumentos en la velocidad de la CPU y la capacidad de almacenamiento, no han eliminado la necesidad del lenguaje ensamblador.
De manera similar, los protocolos no binarios introducen más abstracción, más extensibilidad y, por lo tanto, son el vehículo de elección, particularmente para la comunicación a nivel de aplicación. Ellos también se han beneficiado de los aumentos en el ancho de banda y la capacidad de almacenamiento. Sin embargo, a un nivel más bajo, todavía no es práctico ser tan derrochador.
Además, a diferencia de los lenguajes de programación donde existen fuertes incentivos para "obtener el rendimiento exitoso" a cambio de una mayor simplicidad, velocidad de desarrollo, etc., la capacidad de estructurar la comunicación en capas hace que la complejidad y "binario" de las capas inferiores sean bastante transparentes al nivel de la aplicación . Por ejemplo, siempre que los mensajes SOAP que uno recibe estén correctos, la aplicación no necesita saber que estos se comprimieron efectivamente para pasar por el cable.
Algunos protocolos binarios que he visto en la naturaleza para aplicaciones de Internet
- Buffers de Protocolo de Google que se utilizan para comunicaciones internas pero también en, por ejemplo, Google Chrome Bookmark Syncing
- Flash AMF que se utiliza para la comunicación con aplicaciones Flash y Flex. Tanto Flash como Flex tienen la capacidad de comunicarse a través de REST o SOAP, sin embargo, el formato AMF es mucho más eficiente para Flex ya que algunos benchmarks demuestran
Estoy muy contento de que haya planteado esta pregunta, ya que los protocolos no binarios han multiplicado en uso muchos pliegues desde la introducción de XML. Hace diez años, prácticamente todos velarían por su "cumplimiento" de las comunicaciones basadas en XML. Sin embargo, este enfoque, uno de varios enfoques para protocolos binarios, tiene muchas deficiencias.
Uno de los valores, por ejemplo, era la legibilidad. Pero la legibilidad es importante para la depuración, cuando los humanos deberían leer la transacción. Son muy ineficientes en comparación con las transferencias binarias. Esto se debe al hecho de que XML en sí mismo es una secuencia binaria, que debe traducirse utilizando otra capa en fragmentos textuales ("tokens"), y luego de nuevo en binario con los datos contenidos.
Otro valor que las personas encontraron fue la extensibilidad. Pero la extensibilidad se puede mantener fácilmente si se usa un número de versión de protocolo para la secuencia binaria al comienzo de la transacción. En lugar de enviar etiquetas XML, uno podría enviar indicadores binarios. Si el número de versión es desconocido, el destinatario puede descargar el "diccionario" de esta versión desconocida. Este diccionario podría, por ejemplo, ser un archivo XML. ¡Pero descargar el diccionario es una operación única, en lugar de cada transacción!
¡De modo que la eficiencia se puede mantener junto con la extensibilidad, y muy fácilmente! Hay una buena cantidad de protocolos " compilados en XML " que hacen justamente eso.
Por último, aunque no menos importante, incluso he escuchado a personas decir que XML es una buena forma de superar los tipos de sistemas binarios little-endian y big-endian. Por ejemplo, computadoras Sun vs computadoras Intel. Pero esto es incorrecto: si ambas partes pueden aceptar XML (ASCII) de la manera correcta, seguramente ambas partes pueden aceptar el binario de la manera correcta, ya que XML y ASCII también se transmiten de forma binaria .......
Espero que encuentres esta lectura interesante!
Facebook, Last.fm y Evernote usan el protocolo binario Thrift .
Hasta ahora, todas las respuestas se centran en la eficiencia del espacio y el tiempo. Nadie ha mencionado lo que creo que es la razón número uno de tantos protocolos basados en texto: el intercambio de información. Es el objetivo de Internet y es mucho más fácil hacerlo con los protocolos legibles por texto que también son fáciles de procesar por las máquinas . Se deshace de la programación dependiente del idioma, específica de la aplicación y de la plataforma con el intercambio de datos de texto.
Enlace en cualquier XML / JSON / * - biblioteca de análisis que desee utilizar, descubra la estructura de la información y corte los datos que le interesan.
La respuesta de Eric J lo dice, pero aquí hay algo más de reflexión y hechos. Tenga en cuenta que lo que se muestra a continuación no se trata de protocolos de medios (videos, imágenes). Algunos elementos pueden ser claros para ti, pero sigo escuchando mitos todos los días, así que aquí tienes ...
No hay diferencia en la expresividad entre un protocolo binario y un protocolo de texto. Puede transmitir la misma información con la misma fiabilidad.
Para cada protocolo binario óptimo, puede diseñar un protocolo de texto óptimo que requiera aproximadamente un 15% más de espacio, y ese protocolo puede escribir en su teclado.
En la práctica (los protocolos prácticos se ven todos los días), la diferencia es a menudo aún menos significativa debido a la naturaleza estática de muchos protocolos binarios.
Por ejemplo, tome un número que puede llegar a ser muy grande (por ejemplo, en un rango de 32 bits) pero a menudo es muy pequeño. En binario, las personas modelan esto generalmente como cuatro bytes. En texto, a menudo se realiza como número impreso seguido de dos puntos. En este caso, los números debajo de diez se convierten en dos bytes y los números debajo de 100 tres bytes. (Por supuesto, puede afirmar que la codificación binaria es mala y que puede usar algunos bits de tamaño para que sea más eficiente en cuanto a espacio, pero eso es otra cosa que tiene que documentar, implementar en ambos lados y ser capaz de solucionar problemas cuando se trata sobre su cable.)
Por ejemplo, los mensajes en los protocolos binarios a menudo están enmarcados por campos de longitud y / o terminadores, mientras que en los protocolos de texto, usted simplemente usa un CRC.
- En la práctica, la diferencia suele ser menos significativa debido a la redundancia requerida.
Desea algún nivel de redundancia, sin importar si es binario o de texto. Los protocolos binarios a menudo no dejan espacio para errores. Tienes que documentar al 100% correctamente cada bit que envías, y dado que la mayoría de nosotros somos humanos, eso ocurre con poca frecuencia y no puedes leerlo lo suficiente como para llegar a una conclusión segura sobre lo que es correcto.
Así que, en resumen : los protocolos binarios son teóricamente más espacio y más eficientes en el cálculo, pero la diferencia es, en la práctica, a menudo menor de lo que piensas y el trato a menudo no vale la pena. Estoy trabajando en el área de Internet de las cosas y tengo que lidiar casi a diario con protocolos binarios personalizados y mal diseñados que son realmente difíciles de solucionar, molestos de implementar y no requieren más espacio. Si no necesita modificar absolutamente el último miliamperios de su batería y calcular con ciclos de microcontroladores (o transmitir medios), piénselo dos veces.
Los protocolos binarios continuarán viviendo donde sea que se requiera la eficiencia. En su mayoría, vivirán en los niveles inferiores, donde la implementación de hardware es más común que las implementaciones de software. La velocidad no es el único factor: la simplicidad de la implementación también es importante. Hacer que un chip procese mensajes de datos binarios es mucho más fácil que analizar mensajes de texto.
Los protocolos binarios no están muertos. Es mucho más eficiente enviar datos binarios en muchos casos.
WCF es compatible con la codificación binaria mediante TCP. http://msdn.microsoft.com/en-us/library/ms730879.aspx
No están muertos porque son las capas subyacentes de cada sistema de comunicación. El enlace de datos y network capas de network cada sistema de comunicación principal se basan en algún tipo de "protocolo binario".
Tome Internet, por ejemplo, probablemente ahora esté utilizando Ethernet en su LAN, Ethernet para comunicarse con su ISP , IP para navegar por la web y tal vez FTP para descargar un archivo. Todos los cuales son "protocolos binarios".
Estamos viendo este cambio hacia los protocolos basados en texto en las capas superiores porque son mucho más fáciles de desarrollar y comprender en comparación con los "protocolos binarios", y porque la mayoría de las aplicaciones no tienen requisitos estrictos de ancho de banda.
Raramente veo hablar de esto, pero los protocolos binarios, especialmente los protocolos de bloques, pueden simplificar enormemente la complejidad de las arquitecturas de los servidores.
Muchos protocolos de texto se implementan de tal manera que el analizador no tiene ninguna base sobre la cual inferir cuántos datos más se necesitan antes de que se haya recibido una unidad lógica (XML y JSON pueden proporcionar bytes mínimos necesarios para finalizar, pero no pueden proporcionar estimaciones significativas). Esto significa que el analizador puede tener que ceder periódicamente al código receptor de socket para recuperar más datos. Esto está bien si tus enchufes están en modo de bloqueo, no tan fácil si no lo están. Por lo general, significa que todo el estado del analizador debe mantenerse en el montón, no en la pila.
Si tiene un protocolo binario en el que, muy temprano en el proceso de recepción, sabe exactamente cuántos bytes necesita para completar el paquete, entonces sus operaciones de recepción no necesitan intercalarse con sus operaciones de análisis sintáctico. Como consecuencia, el estado del analizador puede mantenerse en la pila, y el analizador puede ejecutarse una vez por mensaje y ejecutarse directamente sin detenerse para recibir más bytes.
Seguramente esto depende completamente de la aplicación? Hasta ahora, ha habido dos tipos generales de ejemplos, respuestas relacionadas con xml / html y video / audio. Una está diseñada para ser ''compartida'' como lo señala Jonathon y la otra eficiente en su transferencia de datos (y sin la visión de Matrix, ''leer'' una película nunca sería útil, como leer un documento HTML).
La facilidad de depuración no es una razón para elegir un protocolo de texto sobre uno ''binario'' - los requisitos de la transferencia de datos deberían dictar eso. Trabajo en la industria aeroespacial, donde la mayoría de las comunicaciones son flujos de datos de alta velocidad y predecibles, como la altitud y las frecuencias de radio, por lo que se les asignan bits en una transmisión y no se requiere un dispositivo de lectura humana. También es muy eficiente para la transferencia y, además de la detección de interferencias, no requiere metadatos o procesamiento de protocolos.
Entonces, ciertamente, diría que no están muertos.
Estoy de acuerdo en que las elecciones de las personas probablemente se vean afectadas por el hecho de que tengan que depurarlas, pero también dependerán en gran medida de la confiabilidad, el ancho de banda, el tipo de datos y el tiempo de procesamiento requerido (¡y la potencia disponible!).
Siempre habrá una necesidad de protocolos binarios en algunas aplicaciones, como las comunicaciones de ancho de banda muy bajo. Pero hay enormes ventajas para los protocolos basados en texto. Por ejemplo, puedo usar Firebug para ver exactamente lo que se envía y recibe de cada llamada HTTP realizada por mi aplicación. Buena suerte haciendo eso con un protocolo binario :)
Otra ventaja de los protocolos de texto es que a pesar de que son menos eficientes en espacio que los binarios, los datos de texto se comprimen muy bien, por lo que los datos pueden comprimirse automáticamente para obtener lo mejor de ambos mundos. Ver compresión HTTP , por ejemplo.
depende de la aplicación ... Creo que en el entorno en tiempo real (firewire, usb, buses de campo ...) siempre habrá una necesidad de protocolos binarios
Usted no puede vencer al binario
Los protocolos binarios siempre serán más eficientes en cuanto a espacio que los protocolos de texto. A pesar de que la velocidad de Internet aumenta drásticamente, también lo hace la cantidad y complejidad de la información que deseamos transmitir.
Los protocolos de texto que usted referencia son sobresalientes en términos de estandarización, flexibilidad y facilidad de uso. Sin embargo, siempre habrá aplicaciones donde la eficiencia del transporte binario superará esos factores.
Una gran cantidad de información es de naturaleza binaria y probablemente nunca será reemplazada por un protocolo de texto. La transmisión de video viene a la mente como un claro ejemplo.
Incluso si comprime un protocolo basado en texto (por ejemplo, con GZip), un algoritmo de compresión de propósito general nunca será tan eficiente como un protocolo binario diseñado alrededor del flujo de datos específico.
Pero a veces no tienes que
La razón por la que está viendo más protocolos basados en texto se debe a que la velocidad de transmisión y la capacidad de almacenamiento de datos han crecido rápidamente en comparación con el tamaño de datos para una amplia gama de aplicaciones. A los humanos nos resulta mucho más fácil trabajar con protocolos de texto, por lo que diseñamos nuestro omnipresente protocolo XML alrededor de una representación de texto. Ciertamente, podríamos haber creado XML como un protocolo binario, si realmente tuviéramos que guardar cada byte, y construir herramientas comunes para visualizar y trabajar con los datos.
Entonces otra vez, a veces realmente lo haces
Muchos desarrolladores están acostumbrados a pensar en términos de computadoras multi-GB y multi-core. Incluso su teléfono típico en estos días expone a mi primer IBM PC-XT. Aún así, hay plataformas como dispositivos integrados, que tienen limitaciones bastante estrictas en el procesamiento de energía y memoria. Cuando se trata de tales dispositivos, el binario puede ser una necesidad.