web-dev-qa-db-fra.com

Optimiser l'application pour gérer les pics de charge énormes

Notre application connaît une croissance rapide, nous devons donc maintenant adapter notre infrastructure pour ne pas ralentir le site Web dans son ensemble indépendamment du nombre d'utilisateurs que nous avons.

Le système dorsal est basé sur de nombreux appels curl d’une durée de 1 à 10 secondes et doivent être exécutés en parallèle.

Nous avons actuellement 4 vb de mémoire vive de 4 Go, mais nous obtenons parfois une erreur 503 lorsque tous les 50 canaux démarrent en parallèle (nous avons configuré 50 tâches cron) qui exécutent 5 appels curl/chacun.

Ces chiffres vont augmenter rapidement, nous devons donc trouver une solution pour ne pas laisser l’utilisateur final attendre plus d’une minute pour que ses tâches soient terminées.

Avons-nous besoin d'un serveur dédié ou cela ne fera-t-il pas une grande différence? Ou configurer les fonctions aws lambda avec la file d'attente sns? Amazon serait la meilleure solution car peu importe le nombre de messages sns que nous avons mis en file d'attente et instantanément, ils seront traités en activant le déclencheur, mais la fonction lambda ne prenant actuellement pas en charge PHP, nous devons donc réécrire tous les messages. le code en Python

Comment géreriez-vous cette situation pour améliorer les performances?

Je vous remercie

3
lorigio

Cela ressemble à un besoin d'améliorer votre code au lieu de votre matériel. Vous ne fournissez pas d'exemple dans votre question, je ne peux donc pas en évaluer la qualité, je me suis donc basé sur la situation décrite.

Pourquoi ces tâches doivent-elles être plus nombreuses si vous avez plus de visiteurs? Pour moi, c'est un petit drapeau rouge. Je ne devrais pas avoir à maintenir mon code par visiteur.

E.g.1: Voulez-vous chercher quelque chose pour l'utilisateur? Si tel est le cas, ne pouvez-vous pas créer un [click here to get result] afin que vous ne cURLiez que lorsque l'utilisateur clique? Cela vous permettra d'économiser beaucoup de ressources ET d'évoluer plus facilement, car seuls les utilisateurs actifs ont besoin de ressources.
E.g.2: Ces tâches cron doivent-elles commencer en même temps, ou pouvez-vous les enchaîner? J'ai un scénario assez intense, il parcourt tous les produits de toutes les marques. Mais, je peux me permettre un délai, donc tous les 25 produits, il dort 1 seconde, après chaque marque, il dort 10 secondes. Cela a chuté de 30% en l'étalant sur une plus longue période.
Eg3: Est-il pertinent que tout code soit mis à jour en permanence, ou pouvez-vous vous déplacer? ceci dans les heures de la nuit? Cela vous permet de pousser le processeur davantage car vous n’ennuyez pas les utilisateurs et aucun utilisateur ne ralentit le processus.

Cela pourrait ne pas s'appliquer à votre situation, mais vous voudrez peut-être essayer de penser à plus d'exemples. Trop souvent, les utilisateurs améliorent leur matériel au lieu d’améliorer leur code. Peut-être même être meilleur marché à long terme, car vous n'avez pas besoin d'un serveur plus coûteux.


Si tout cela ne s'applique pas et que votre code est de haute qualité, vous pouvez consulter les services VPS. Celles-ci permettent souvent l’expansion en quelques clics, par exemple. vous ajoutez un autre noyau ou de la mémoire via votre controlepanel et vous l'éteignez après votre pointe.

1
Martijn