2016-05-17 1 views
1

J'ai un projet Larave 5.2 et je me sers:superviseur beanstalkd + + Laravel: traitement de file d'attente avec plus de 10000 emplois à l'heure

  • Beanstalk
  • Superviseur
  • Laravel 5.2
  • numérique Ocean Hosting avec 4 Go de RAM

Le projet est principalement basé sur des webhooks. Un autre site Web appelle notre webhook et j'ajoute ces webhooks dans une file d'attente. En gros, 10000 emplois par heure sont ajoutés à la file d'attente.

J'ai 50 num_process dans les configs du superviseur.

Pouvez-vous s'il vous plaît me suggérer comment puis-je traiter les travaux dans la file d'attente très rapidement. de sorte que je n'ai pas à attendre des heures pour faire traiter mon travail.

Voici une capture d'écran de la situation actuelle dans la file d'attente

enter image description here

Toute aide est très appréciée.

Merci

Superviseur Config:

[program:laravel_queue] 
command=php /var/www/html/nivesh/artisan --env=production --timeout=3600 queue:listen --queue=important,urgent,high,default 
autostart=true 
autorestart=true 
process_name=%(program_name)s_%(process_num)s 
numprocs=55 
stderr_logfile=/var/log/laraqueue.err.log 
stdout_logfile=/var/log/laraqueue.out.log 
priority=999 
numprocs_start=55 
startsecs=0 
redirect_stderr=true 
+0

Afficher le code et afficher la configuration du travail Supervisord. – Repox

+0

J'ai ajouté la configuration du superviseur dans la description. –

+0

@Repox Quel code voulez-vous que je montre? –

Répondre

1

Vérifiez si vous ne disposez pas des appels à distance aux URL externes.

Ajoutez également des conseils à différents endroits pour voir quelle opération prend longtemps. Essayez de diviser en plusieurs événements plus petits toute la file d'attente, ne pas être 1 longues tâches, faire une chaîne d'événements.

+0

Auparavant, mon serveur était de 5+, maintenant c'est 2. Beaucoup mieux. Merci de votre aide. –

2

vitesse sur les files d'attente sont considérablement impacté par Laravel, chaque fois que le cadre est chargé. Cela arrive lorsque vous écoutez sur les files d'attente.

Vous devez exécuter la file d'attente avec le --daemon flag pour éviter rechargeant le cadre pour chaque entrée de file d'attente:

[program:laravel_queue] 
command=php /var/www/html/yopify/artisan --env=production --timeout=3600 queue:work --queue=important,urgent,high,default --daemon 
autostart=true 
autorestart=true 
process_name=%(program_name)s_%(process_num)s 
numprocs=55 
stderr_logfile=/var/log/laraqueue.err.log 
stdout_logfile=/var/log/laraqueue.out.log 
priority=999 
numprocs_start=55 
startsecs=0 
redirect_stderr=true 

Il est également possible de faire bouillir votre fichier de configuration d'emploi Superviseur comme certains des paramètres que vous utilisez sont déjà définis par la valeur par défaut:

[program:laravel_queue] 
command=php /var/www/html/yopify/artisan --env=production --timeout=3600 queue:work --queue=important,urgent,high,default --daemon 
process_name=%(program_name)s_%(process_num)s 
numprocs=55 
stderr_logfile=/var/log/laraqueue.err.log 
stdout_logfile=/var/log/laraqueue.out.log 
numprocs_start=55 
startsecs=0 
redirect_stderr=true 

Je vous recommande d'utiliser le paramètre user, comme votre emploi actuel est en cours d'exécution en tant qu'utilisateur root - ceci est probablement inutile d'exécuter votre file d'attente avec si haut privilèges et je considérerais comme un risque pour la sécurité. Je suggère de le définir à l'utilisateur qui possède les fichiers dans /var/www/html/yopify/

+0

Salut Repox J'ai essayé votre configuration et j'ai presque eu une crise cardiaque. Il y avait environ 10K erreurs en 3 minutes. Pour l'écoute de la file, l'option daemon n'est pas disponible. Je l'ai changé en file d'attente: travailler avec la même configuration et il n'y avait pas de différence. S'il vous plaît aider –

+0

@NiveshSaharan, Quelle version de Laravel exécutez-vous? – Repox

+0

La version est 5.2 –

1

Nous avons eu un problème similaire il y a quelques mois, voici ce que nous avons fait,

* Se débarrasser de l'exploitation forestière: Son réduit le temps passé sur les journaux d'écriture et accélère l'exécution des travaux dans la file d'attente . * Évitez les appels externes: L'appel externe prend du temps pour récupérer des données, ce qui dépend également de la taille des données récupérées. Au lieu de cela, essayez de les stocker en interne. * Utilisation de sous-files d'attente: Utilisez la sous-file pour effectuer des sous-tâches.

Ma suggestion essaie de passer à redis car il est facile de suivre le statut du travail alors que vous pouvez écrire quelques requêtes rapides sur le serveur redis (redis cli).