Comment juger si un cron par minute ne surchargera pas notre serveur web (Apache)

Juste curieux de savoir comment je peux juger de la performance sur celui-ci. Nous exécutons Apache avec un site Web de produits / achats basé sur PHP / Postgresql.

Nous avons 2 serveurs – un pour le site Web (scripts PHP, tout le contenu statique) et un pour la firebase database.

Nos commandes s’exécutent comme suit avec une passerelle de paiement à distance: 1. Le client achève le processus de paiement sur le serveur Web 2. Le client est ensuite redirigé vers la passerelle de paiement pour le paiement. 3. Une notification est ensuite envoyée à notre script de serveur Web (à partir de la passerelle de paiement) pour nous informer du statut de la commande. À ce stade, nous vérifions si le paiement a réussi, puis nous passons la commande au système de stock du client en conséquence.

Maintenant, à l’étape 3, nous devons effectuer certaines tâches, faire une pause de 60 secondes (il s’agit d’une solution de contournement personnalisée pour le système de réservation de stock du client jusqu’à ce qu’il soit mis à niveau ultérieurement), puis continuer avec le rest les tâches. La “pause de 60 secondes” est la partie dont je ne suis pas sûr. Le script doit littéralement attendre un moment (une minute), puis nous faisons les autres tâches (transférer la commande à notre client).

Je peux penser à le faire de deux manières:

a) Nous définissons un délai / intervalle sur le script PHP pendant 60 secondes, puis nous terminons le travail. Ceci n’est probablement pas réalisable car nous avons affaire à une passerelle de paiement et nous ne soaps pas si elles expireront ou si des problèmes peuvent survenir ici.

OU

b) Nous effectuons le premier tour de tâches, puis un cron s’exécute toutes les 60 secondes pour vérifier les transferts de commandes incomplets, puis la balance fonctionne pour nous. Le cron doit être exécuté toutes les 60 secondes pour intercepter les commandes à envoyer au client.

Le serveur Web a un certain nombre de crons en cours d’exécution, la plupart du temps en dehors des heures de pointe. Quelqu’un peut-il conseiller:

  • Si vous pouvez voir une solution différente à ce qui précède

  • Si vous êtes d’accord avec la solution b), cela pourrait-il être une surcharge pour notre serveur Web? Quelle est la meilleure façon pour moi de juger? La tâche elle-même non exigeante (vérifie la firebase database, transfère un fichier d’un endroit à un autre sur notre serveur Web), mais je me demande si un cron devrait être exécuté à chaque minute comme ça.

Merci, Rishi

Compte tenu de vos contraintes et de votre calendrier, pourquoi ne pas écrire un démon système qui fonctionne? Il peut fonctionner “tout le temps”, aller dormir quand il n’y a pas de travail et se réveiller aussi souvent que nécessaire. Cela évite également les problèmes de “il y a 5 personnes qui courent”. Comme John l’a dit, vous pouvez créer une file d’attente et vous y tenir. Je l’ai fait à quelques resockets avec succès.

La réponse est B. Si vous êtes inquiet au sujet des performances de votre serveur à intervalles réguliers, vous avez vraiment besoin d’une plus grande machine / d’une architecture plus riche. La plupart des problèmes de performances sur un serveur Web se résument à des pics d’utilisation à des niveaux plus précis.

Si vous êtes inquiet, la solution est assez simple. Au lieu de déclencher un tas de processus chaque minute, créez une queue et une gestion d’état. Marquez la machine comme “traitement” lorsque vous démarrez votre queue. Si le cron se déclenche à nouveau et que la machine est encore en cours de traitement, il suffit de vider et d’attendre la prochaine coche. Lorsque vous avez terminé avec la queue, désélectionnez la machine.

Si vous faites 3-4 ticks sans sortir du «traitement», alors vous pouvez appeler le téléavertisseur de quelqu’un.