DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»FIFO vs LIFO : quelle stratégie de mise en file d’attente est la meilleure pour la disponibilité et la latence ?
    Uncategorized

    FIFO vs LIFO : quelle stratégie de mise en file d’attente est la meilleure pour la disponibilité et la latence ?

    mars 15, 2023
    FIFO vs LIFO : quelle stratégie de mise en file d'attente est la meilleure pour la disponibilité et la latence ?
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    En tant qu’ingénieur, vous savez probablement que les performances des serveurs sous forte charge sont cruciales pour maintenir la disponibilité et la réactivité de vos services. Mais que se passe-t-il lorsque des pics de trafic submergent votre système ? La mise en file d’attente des demandes est une solution courante, mais quelle est la meilleure approche : FIFO ou LIFO ? Dans cet article, nous allons explorer les deux stratégies via une simulation simple dans Colab, vous permettant de voir l’impact de la modification des paramètres sur les performances du système. La comparaison des avantages et des inconvénients de chaque approche aide à mieux comprendre les compromis et à effectuer de meilleurs appels sur les stratégies de mise en file d’attente, améliorant ainsi vos compétences en ingénierie dans le processus. Après tout, comme le dit le proverbe : « J’entends et j’oublie, je vois et je me souviens, je fais et je comprends ».

    Modèle

    Pour comparer les performances des stratégies de mise en file d’attente FIFO (qui traite les requêtes dans l’ordre où elles sont reçues) et LIFO (qui priorise les requêtes les plus récentes), nous allons construire un modèle simple utilisant un client qui génère les requêtes et un serveur qui les gère. Vous pouvez trouver les détails dans ce Colab. Les caractéristiques essentielles du modèle sont :

    • Le client génère des requêtes de complexité aléatoire en utilisant la distribution log-normale.
    • Le serveur peut traiter un certain nombre de requêtes avant de les mettre en file d’attente.
    • Nous allons simuler une montée en puissance du trafic atteignant progressivement environ 3 fois la capacité du serveur et observer comment le temps de réponse, le taux d’erreur et le débit sont affectés pour les files d’attente FIFO et LIFO.

    En exécutant cette simulation, nous serons en mesure de comparer les deux stratégies de mise en file d’attente et d’identifier leurs forces et leurs faiblesses sous forte charge. Alors, plongeons dans les détails et voyons comment les files d’attente FIFO et LIFO se comparent.

    Disponibilité

    Tous les paramètres du modèle (vous pouvez les retrouver dans la section « Code de simulation client ») sont réglables. Je les ai réglés pour que le serveur gère environ 15 RPS et que le trafic passe de 1 RPS à 50 RPS. Voyons comment le taux d’erreur pour FIFO/LIFO se compare à mesure que le trafic augmente :

    Ainsi, le serveur peut gérer jusqu’à 15 RPS sans aucun délai d’attente, puis nous assistons à une dégradation progressive de la disponibilité. Alors que LIFO fonctionne légèrement mieux si le taux est beaucoup plus élevé que le seuil de capacité, il commence à renvoyer des erreurs un peu plus tôt. En effet, LIFO peut agir de manière « injuste » et simplement oublier les requêtes plus anciennes. Pour résoudre ce problème, nous pouvons utiliser une stratégie de mise en file d’attente adaptative qui bascule entre FIFO et LIFO, en fonction de la taille de la file d’attente.

    Alors FIFO ou LIFO ? Adaptatif!

    Dans le diagramme de comparaison suivant, nous pouvons voir comment la stratégie de mise en file d’attente adaptative surpasse à la fois FIFO et LIFO, en maintenant une faible surcharge et une haute disponibilité même à des taux de requête élevés proches du seuil de capacité :

    Comme le montre le graphique de comparaison, la stratégie de mise en file d’attente adaptative maintient une faible surcharge et une haute disponibilité à des taux de requête élevés proches du seuil de capacité. Il fonctionne en agissant comme FIFO à faible QPS puis en passant à LIFO lorsque le point de saturation est atteint. Cette approche combine les points forts des deux stratégies de mise en file d’attente, obtenant le meilleur des deux mondes.

    Priorisation des demandes

    Une autre dimension à prendre en compte dans les stratégies de mise en file d’attente est la hiérarchisation des demandes. Dans de nombreuses applications, toutes les fonctions n’ont pas la même importance, et en période de stress, il est crucial de garder les fonctions principales disponibles à tout prix. Pour modéliser ce scénario, nous supposerons que 50 % des demandes sont des fonctions principales, tandis que les 50 % restants sont des demandes « au mieux ». Nous utiliserons la stratégie de mise en file d’attente LIFO pour les deux scénarios, avec et sans priorisation des demandes. Il est important de noter que dans le but de simuler la hiérarchisation des demandes, nous utiliserons LIFO au lieu de la stratégie adaptative pour minimiser les variables de notre modèle et mieux comprendre comment elles fonctionnent de manière isolée.

    Comme nous pouvons le voir sur le graphique, la hiérarchisation des requêtes « primaires » peut nous permettre de traiter deux fois plus de requêtes critiques au détriment des requêtes « best effort ». Pendant les périodes de forte demande, la hiérarchisation peut aider à garantir que les fonctions les plus importantes de votre service restent disponibles, tout en offrant de la valeur à vos clients grâce aux demandes de « meilleur effort » si les ressources le permettent. Être conscient de la valeur client et hiérarchiser explicitement les demandes peut être une stratégie efficace pour améliorer la satisfaction globale des clients.

    Débit

    En plus de mesurer le temps de réponse et le taux d’erreur, le débit global est également un facteur critique dans l’évaluation de l’efficacité des différentes stratégies de mise en file d’attente. Le graphique suivant montre le nombre total de requêtes traitées par le serveur à l’aide des stratégies FIFO, LIFO et de mise en file d’attente adaptative à mesure que le trafic augmente. Jetez un oeil au graphique ci-dessous:

    Comme vous pouvez le voir, alors que LIFO et Adaptive atteignent le point de saturation et maintiennent un débit stable, FIFO gère globalement moins de requêtes et gaspille une partie importante de la capacité, écrasant la file d’attente sans résultat positif (et c’est pourquoi il a un débit inférieur).

    Latence

    Et enfin, examinons l’impact des différentes stratégies de mise en file d’attente sur la latence. Après tout, il ne s’agit pas seulement du temps de réponse, mais de la rapidité avec laquelle vos clients reçoivent leurs réponses. Nous comparerons les latences moyennes, médianes et p90 pour les trois stratégies de mise en file d’attente : FIFO, LIFO et la stratégie adaptative.

    Dans le graphique de latence, nous ne considérons que les requêtes réussies et calculons la « surcharge de latence », qui est le surplus ajouté par la mise en file d’attente en plus de la latence que les requêtes ont elles-mêmes. Idéalement, nous aimerions garder cette surcharge proche de zéro :

    En regardant les données de latence, FIFO fonctionne mal après le point de saturation, avec un nombre élevé de requêtes ayant échoué et de requêtes réussies à la limite du délai d’attente (600s dans ce modèle). La stratégie adaptative a un pic dû au passage de FIFO à LIFO mais finit par se stabiliser.

    Il est important de se rappeler que l’ingénierie est une question de compromis et offre rarement une solution sans aucun inconvénient. LIFO a une latence stable, mais comme nous l’avons vu précédemment, il commence à échouer un peu plus tôt.

    Réflexions finales

    En résumé, les résultats montrent que bien que LIFO surpasse FIFO à des taux de requêtes plus élevés, il commence à renvoyer des erreurs plus tôt en raison de sa nature « injuste » consistant à oublier certaines requêtes. La stratégie de mise en file d’attente « Adaptative », qui bascule entre FIFO et LIFO en fonction de la taille de la file d’attente, est globalement la plus performante.

    De plus, la hiérarchisation des requêtes combinée à LIFO (ou Adaptive) améliore les performances du service, lui permettant de gérer plus de requêtes sans impact significatif sur la latence. Cette approche peut être utile pour maintenir les fonctionnalités essentielles pendant les périodes de trafic élevé au détriment des fonctionnalités secondaires et de meilleur effort.

    Nous avons également constaté que le FIFO a non seulement servi moins de requêtes, mais a également connu une augmentation significative de la surcharge de latence. En revanche, l’approche adaptative a connu un pic rapide lors du passage de FIFO à LIFO, mais la latence est rapidement revenue aux niveaux LIFO (alias auto-guérison).

    N’hésitez pas à jouer avec la simulation pour avoir une idée du modèle et de la manière dont différents paramètres peuvent l’affecter. N’oubliez pas qu’il n’y a pas de raccourci pour sauter l’entraînement lorsqu’il s’agit d’apprendre à danser !

    Cet article poursuit le thème de l’amélioration des performances/disponibilité des services abordé dans les articles précédents.

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.