2016-05-17 3 views
1

ich ein Projekt in Larave haben 5.2 und ich bin mit:Beanstalkd + Supervisor + Laravel: Queue-Verarbeitung mit mehr als 10000 Arbeitsplätze Stunde

  • Bohnenstange
  • Betreuer
  • Laravel 5.2
  • Digitale Ocean Hosting mit 4GB RAM

Das Projekt basiert hauptsächlich auf Webhooks. Eine andere Webseite ruft unseren Webhook an und ich füge diese Webhooks in eine Warteschlange ein. Ungefähr 10000 Jobs pro Stunde werden der Warteschlange hinzugefügt.

Ich habe 50 num_process in Supervisor-Konfigurationen festgelegt.

Können Sie mir bitte vorschlagen, dass ich die Jobs in der Warteschlange wirklich schnell verarbeiten kann. damit ich nicht stundenlang warten muss, um meinen Job zu bearbeiten.

Hier ist ein Screenshot des aktuellen Status in der Warteschlange

enter image description here

Jede Hilfe sehr geschätzt wird.

Danke

Supervisor-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

Zeigen Sie Code und zeigen Sie Supervisord Job-Konfiguration. – Repox

+0

Ich habe die Supervisor-Konfiguration in der Beschreibung hinzugefügt. –

+0

@Repox Welchen Code soll ich zeigen? –

Antwort

1

ist Überprüfen Sie, ob Sie Remoteaufrufe auf externe URLs haben.

Fügen Sie auch Hinweise an verschiedenen Stellen hinzu, um zu sehen, welche Operation lange dauert.

Versuchen Sie in mehrere kleinere Ereignisse die ganze Warteschlange zu brechen, seien Sie nicht 1 lange Aufgaben, machen Sie eine Kette von Ereignissen.

+0

Zuvor war meine Serverlast 5+, jetzt ist es 2. Viel besser. Danke für Ihre Hilfe. –

2

Geschwindigkeit auf den Warteschlangen von Laravel dramatisch beeinflusst werden, jedes Mal, wenn der Rahmen geladen wird. Dies geschieht, wenn Sie die Warteschlangen anhören.

Sie die Warteschlange mit dem --daemon flag laufen sollte für jeden Warteschlangeneintrag Neuladen des Rahmens zu vermeiden:

[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 

Es ist auch möglich, dass Sie Supervisor-Job-Konfigurationsdatei, wie einige der Parameter, die Sie bereits verwenden, um einkochen eingestellt durch den Standardwert:

[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 

ich würde empfehlen, dass Sie die user-Parameter verwenden, wie Ihre aktuelle Arbeit wird als root-Benutzer ausgeführt wird - dies ist wahrscheinlich nicht notwendig ist, die Warteschlange zu laufen mit so hohen Privilegien und ich würde es als Sicherheitsrisiko betrachten. Ich würde vorschlagen, es auf den Benutzer zu setzen, der die Dateien in /var/www/html/yopify/

+0

Hallo Repox Ich habe Ihre Konfiguration versucht und ich bekam fast einen Herzinfarkt. Es gab ungefähr 10K Fehler in 3 Minuten. Für Warteschlangenhören ist die Daemon-Option nicht verfügbar. Ich änderte es in die Warteschlange: Arbeit mit der gleichen Konfiguration und es gab keinen Unterschied. Bitte helfen Sie –

+0

@NiveshSaharan, Welche Version von Laravel laufen Sie? – Repox

+0

Die Version ist 5.2 –

1

Wir haben wieder ein ähnliches Problem paar Monaten haben, hier ist das, was wir getan haben,

* Erste der Protokollierung befreien: Seine Zeit, reduziert auf die Schreibprotokolle ausgegeben und beschleunigt die Ausführung von Aufträgen in der Warteschlange . * Vermeiden Sie externe Anrufe: Externer Anruf benötigt Zeit zum Abrufen von Daten, die dann auch von der Größe der abgerufenen Daten abhängt. Versuchen Sie stattdessen, sie intern zu speichern. * Unterwarteschlangen verwenden: Verwenden Sie die Unterwarteschlange, um Unteraufgaben auszuführen.

Mein Vorschlag versuchen, zu redis zu wechseln, da es einfach ist, den Auftragsstatus zu verfolgen, während Sie einige schnelle Abfragen auf dem Redis-Server (redis cli) schreiben können.

Verwandte Themen