Depuración de QUIC con H2O y QLog
Una de las principales virtudes de cualquier programa informático es su capacidad de depuración. Esto resulta especialmente cierto en el caso de las implementaciones de protocolos, cuando está en juego la interoperabilidad entre varias de ellas. Además de poner a prueba si son correctas, una buena capacidad de depuración ayuda a identificar si es necesario ajustar el rendimiento. Esto es crucial en el caso de QUIC, dado que el protocolo necesita implementarse en el espacio de usuario. En esta entrada del blog explicaré cómo añadimos compatibilidad con QLog, un formato incremental de registro de puntos de conexión QUIC, en H2O, un servidor HTTP de código abierto que desplegamos en toda nuestra plataforma de edge cloud.
QUIC, QLog y las herramientas de depuración
QUIC es un protocolo seguro de la capa de transporte de baja latencia que se utiliza en HTTP/3. QUIC es un protocolo nuevo e interesantísimo que aborda los problemas esenciales a los que se enfrenta TCP en el entorno actual de Internet. Si también te parece interesante, echa un vistazo a la serie de entradas del blog sobre QUIC escritas por Jana Iyengar, nuestro Distinguished Engineer.
QLog es un formato de registro de puntos de conexión de QUIC. El proyecto QLog proporciona también QVis, un conjunto de herramientas de visualización basadas en JavaScript para datos de QLog. Aunque se suele hablar de QLog y QVis conjuntamente, conviene tener en cuenta que el formato de registro de QLog resulta práctico incluso sin el visualizador, puesto que ahora ofrece un formato de registro estándar que nos ayuda a crear herramientas. Si apoyamos el proyecto QLog es porque creemos que un lenguaje estándar «de facto» para datos de rastreo de QUIC no solo beneficiaría a los desarrolladores, sino a toda la inmensa comunidad internauta. La especificación de QLog está evolucionando de forma simultánea a QUIC.
Reutilización de la infraestructura de rastreo de eventos de H2O
El servidor H2O proporciona una función integral de rastreo de eventos de bajo nivel, basada en eBPF o DTrace, según la plataforma. En concreto, el rastreo de los eventos se consigue mediante la instrumentación del servidor H2O y sus bibliotecas subyacentes (p. ej., quicly, la implementación QUIC de H2O) con sondas USDT (User Statically Defined Tracing). Estas sondas funcionan bien en producción, puesto que la sobrecarga de una sonda inactiva es tan solo una única instrucción NOP. A partir de esta infraestructura de rastreo, programamos un adaptador QLog de posprocesamiento que nos facilitó la compatibilidad con el formato QLog al mismo tiempo que se conservaban las potentes capacidades de rastreo de bajo nivel de H2O. El uso de un adaptador también nos permite tener en cuenta diferentes formatos y herramientas de registro en el futuro, sin modificar la infraestructura de rastreo en H2O.
La parte difícil fue manejar las diferencias estructurales entre el rastreo de bajo nivel de H2O y la semántica de alto nivel de QLog. A modo de ejemplo, los eventos de paquetes y transmisión se manejan de formas distintas en H2O, pero están estrechamente emparejados en el formato QLog. Al final dimos con un diseño flexible que nos permitió lograr esa asignación.
El futuro de QUIC
Prevemos un futuro luminoso para QUIC. El proceso de estandarización del IETF está llegando a su fin, el navegador Google Chrome ahora es compatible oficialmente con QUIC de IETF, y aquí en Fastly hemos desplegado QUIC y HTTP/3 en toda nuestra flota de servidores. El resultado es que estamos asistiendo a un crecimiento del tráfico QUIC a medida que atraemos más clientes. La nueva capacidad de registrar y examinar estados de puntos de conexión QUIC a través de QLog ayudará a nuestro equipo de ingeniería de protocolos a crear un Internet más seguro y más ágil.