Présentation
Un problème de performances a été détecté avec l'utilisation d'Oghttp2, le codec HTTP/2 de Google, dans Envoy. Les tests ont montré que nghttp2, le codec précédent, était 15-25% plus rapide que Oghttp2 sur les requêtes avec des en-têtes lourds.
Contexte technique
Envoy a deux implémentations d'HTTP/2 : nghttp2 et Oghttp2. Les tests ont été effectués sur quatre microarchitectures différentes (Intel Sapphire Rapids, AMD Zen 4, AWS Graviton4 et Google Axion) avec un setup de loopback pour mesurer les performances.
Fonctionnement du codec
Les codecs HTTP/2 passent la plupart de leur temps à décompresser les en-têtes. La compression est effectuée à l'aide de l'algorithme HPACK (RFC 7541), qui utilise deux mécanismes : l'indexation et la compression de Huffman. La compression de Huffman est utilisée pour les chaînes de caractères qui ne peuvent pas être indexées.
Analyse scientifique
La compression de Huffman est un algorithme qui utilise un arbre de Huffman pour compresser les données. L'algorithme de Huffman est optimal pour la compression de données, mais il peut être lent à décompresser. Nghttp2 utilise une machine à états finis précalculée pour décompresser les données, ce qui est plus rapide que la méthode utilisée par Oghttp2. Les tests ont montré que la méthode utilisée par nghttp2 est 15-25% plus rapide que celle utilisée par Oghttp2.
nghttp2 utilise une machine à états finis précalculée pour décompresser les données