10 min de lecture
HTTP/2 et nouvelles fonctionnalités de routage
Il y a deux mois, nous avons annoncé la sortie de notre nouveau routeur HTTP à l'épreuve du temps basé sur Openresty. Depuis lors, nous en avons tiré parti et de nombreuses nouvelles fonctionnalités ont été mises à disposition. Parmi elles, la compatibilité HTTP/2.

Il y a deux mois, nous avons annoncé la sortie de notre nouveau routeur HTTP résistant à l'avenir, basé sur Openresty. Depuis lors, nous en avons tiré parti et un certain nombre de nouvelles fonctionnalités ont été mises à disposition. Parmi elles, la compatibilité HTTP/2.
Avant de continuer avec cet article de blog, vous voudrez peut-être lire quelques détails sur notre nouveau routeur HTTP basé sur OpenResty.
HTTP/2
Les navigateurs et les applications web communiquent généralement HTTP entre eux. En mai 2015, la seconde version de ce protocole a été publiée, en tant que révision majeure du protocole réseau HTTP. Cette nouvelle version conserve les mêmes principes que la version précédente : méthodes, en-têtes et statuts. Mais elle introduit plusieurs nouvelles fonctionnalités du côté du transport, notamment :
Être un protocole binaire
En-têtes compressés
Multiplexage des requêtes
Ces fonctionnalités améliorent le nombre de connexions nécessaires aux clients pour effectuer des requêtes et la quantité de données envoyées/reçues vers/depuis l'application. Dans les cas où la latence est élevée (comme les connexions mobiles), cela peut considérablement augmenter les performances. Avec une seule connexion, HTTP/2 implique seulement une unique poignée de main TCP en trois étapes, et une négociation TLS.
Il y a beaucoup d'autres choses intéressantes dans HTTP/2, vous trouverez plus de détails dans les spécifications des RFC énumérées ici.
Comment puis-je l'activer pour mon application ?
En fait, si vous utilisez un navigateur moderne, vous l'utilisez probablement déjà. Si le client est capable de communiquer avec HTTP/2, nos proxies mettront automatiquement à niveau la connexion vers HTTP/2.

En-tête d'ID de requête
Une autre fonctionnalité utile que nous avons ajoutée grâce au déploiement de notre nouveau routeur HTTP est l'en-tête d'ID de requête. Nos serveurs de routage sont les premières entités à recevoir vos requêtes HTTP, ils ajoutent désormais l'en-tête X-Request-ID à chaque requête reçue avant de l'envoyer à vos conteneurs d'application.
C'est un identifiant unique que vous pouvez utiliser dans votre journal pour identifier une requête précise sans avoir à étudier les horodatages/adresses IP sources. Une utilisation simple est de vous aider à lire les journaux lorsque des requêtes sont exécutées simultanément, il est beaucoup plus facile de dé-intercaler les journaux et de savoir quelle ligne correspond à quelle requête.
Si votre application communique avec une autre application, il est conseillé de transmettre également l'en-tête X-Request-ID à ces requêtes afin de pouvoir suivre le flux d'exécution complet d'une requête donnée.
Vous pouvez trouver des exemples sur la façon de gérer cet en-tête avec Ruby on Rails et NodeJS sur la page de documentation X-Request-Id.
Mise en file d'attente des requêtes
La prochaine fonctionnalité que nous avons ajoutée est davantage une fonctionnalité de sécurité contre les attaques DDoS. Lorsque des requêtes sont envoyées à une application, elles sont directement reexpédiées à l'un de vos conteneurs d'application. Si, pour une raison quelconque, l'application met plus de temps à répondre que les nouvelles requêtes entrantes n'atteignent l'infrastructure, les requêtes commenceront à faire la queue au niveau de notre serveur de routage, attendant que les conteneurs d'application les traitent.
Vous pouvez avoir jusqu'à 50 requêtes en file d'attente simultanément par conteneur web, ensuite les requêtes seront abandonnées et un message d'erreur sera renvoyé au client.
Par exemple, si une application a 2 conteneurs web, jusqu'à 100 requêtes peuvent être traitées simultanément. Si 100 requêtes sont déjà en cours de traitement, la 101ème requête sera refusée et le client de cette requête recevra une réponse HTTP 503 Service Unavailable.
Quarantaine
La dernière fonctionnalité publiée améliorera la disponibilité de votre application en cas de panne d'un conteneur. Jusqu'à présent, lorsqu'un conteneur tombait en panne ou était temporairement indisponible, les requêtes continuaient d'être routées vers ce conteneur malade, entraînant de multiples réponses 502 Bad Gateway pour l'utilisateur des applications concernées. Ce comportement n'était pas optimal et nous voulions corriger cela.
Désormais, lorsque qu’un conteneur est indisponible, il est instantanément détecté et mis en quarantaine jusqu'à sa récupération (redémarrage, nouveau déploiement, ou simplement une résolution temporaire de la panne). Lorsque le conteneur est en quarantaine, les requêtes ne lui sont pas envoyées et sont routées vers les autres conteneurs sains si l'application a plus d'un conteneur.
Des contrôles de santé avec un retour exponentiel sont envoyés aux conteneurs en quarantaine, si la réponse est positive, il est ajouté de nouveau au pool de conteneurs de l'application et les requêtes recommencent à circuler.
Conclusion
De multiples améliorations ont été apportées en arrière-plan, notre prochain article se concentrera sur les fonctionnalités configurables par application telles que les sessions persistantes, la redirection automatique ou le forçage de l'accès HTTPS à une application. Ces fonctionnalités apparaîtront bientôt sur votre tableau de bord, restez à l'écoute !

Yann Klis
Yann KLIS a fondé Scalingo en 2015 avec son associé Léo Unbekandt avec la vision de proposer une plateforme cloud d'hébergement web, véritable alternative européenne et souveraine aux géants américains. Aujourd'hui Scalingo héberge plusieurs milliers d'applications web déployées par des clients du monde entier ! L'objectif de Scalingo est de devenir la plateforme cloud de référence pour les développeurs web en Europe. Auparavant, il a fondé Novelys, un studio de développement spécialisé dans la technologie Ruby on Rails.
Restez informé
Recevez des articles et des mises à jour de la plateforme dans votre boîte de réception.
Prêt à déployer en toute confiance ?
Découvrez des déploiements sans temps d'arrêt, une mise à l'échelle automatique intelligente et une infrastructure entièrement gérée. Commencez à déployer vos applications sur Scalingo dès aujourd'hui.
Aucune carte de crédit requise • Déployez en quelques minutes • Annulez à tout moment





