Besoin d'aide ?

API avec charge importante - Limitation CPU

Avatar de JosephMORIN
JosephMORIN

Bonjour la communauté,

je sollicite votre aide afin de résoudre un problème que nous rencontrons avec Laravel 8 et PHP 8.

Côté BDD, nous avons une instance MySQL avec 2vCPU, 10GB de RAM, 85GB de stockage, environ 250 IO/secondes La base ne semble pas surchargée de requêtes, CPU et RAM restent bas, et les IO ont déjà été augmentés afin de soulager certains appels en base de donnée. Côté applicatif, Laravel et PHP 8 sont exécutés au sein d'un container Docker, avec 2vCPU et 8GB de RAM, le tout sur SSD.

Laravel fourni une API accessible après une phase d'authentification via un appel classique /app/login.

Une fois un token récupéré les utilisateurs peuvent mettre à jour un timestamp toutes les 10 secondes sur une instance MySQL (ainsi que 2 ou 3 autres colonnes de la même table). Nous avons déjà réalisé pas mal d'optimisations : -build Docker multi-stage -composer install --no-cache --prefer-dist --no-interaction --no-progress --optimize-autoloader --no-ansi (durant la build de l'image Docker) -tuning de PHP FPM en static (max.children à environ 110) -tuning de Nginx avec Socket UNIX pour joindre FastCGI, augmentation du nombre de workers -php artisan route:cache -php artisan view:cache -php artisan config:cache -php artisan artisan optimize -activation de PHP OPCache -activation du compilateur JIT

En temps normal, les temps de réponse sont aux alentours de 250-300ms. Nous sommes néanmoins confrontés à un soucis de performance, notre API ne peut supporter que 100 utilisateurs en simultané par vCPU.

Les tests de charge sont réalisés grâce à l'outil Locust (phase d'authentification comme 1ère étape puis appel de l'API toutes les 10 secondes pour mettre à jour le timestamp et autres colonnes en base (même table). La principale limite semble être le CPU, qui est vite vers le 90-95% à l'approche des 200 utilisateurs (environ 20-22 requêtes/s) Nous avons déjà essayé d'augmenter le nombre de vCPU mais le bottleneck est toujours présent et la limite de 100 utilisateurs/vCPU semble persister.

Avez-vous des suggestions qui pourraient nous aider à obtenir de meilleurs performances ?

Vous ne pouvez pas répondre à ce sujet.