Der Anwendungsserver uWSGI, der nicht nur Python, sondern auch Ruby, PHP und Perl verarbeiten kann, verfügt über einen Modus, der als billiger bezeichnet wird. Dies ist eine Funktion, die die Anzahl der Arbeiter dynamisch an die Last anpasst.
Standardmäßig gab es Steuerungsalgorithmen, die als Ersatz, Rückstand und Geschäftigkeit bezeichnet wurden. Da mir jedoch keiner von ihnen gefiel, erstellte ich einen Algorithmus namens spare2 und führte ihn in die ursprüngliche Familie ein. Da der Hauptzweig (Entwicklungsversion) enthalten war, haben wir auch eine stabile Version von [Plugins für uWSGI 2.0] bereitgestellt (http://github.com/KLab/uwsgi-cheaper-spare2).
Ich werde den diesmal hinzugefügten Spare2-Algorithmus erklären und erklären, warum es schwierig war, andere vorhandene Algorithmen zu übernehmen. (Weitere Informationen zu anderen Algorithmen finden Sie in der Dokumentation (http://uwsgi-docs.readthedocs.org/en/latest/Cheaper.html).)
spare2
Die Erklärung basiert auf der Beispieleinstellungsdatei.
[uwsgi]
...
processes=10
cheaper-algo=spare2
cheaper=2
cheaper-initial=2
cheaper-step=2
cheaper-idle=30
process = 10
ist die maximale Anzahl von Worker-Prozessen. billiger = 2
ist die Mindestanzahl von Prozessen und wird in dieser Zeit angepasst. billiger-initial = 2
ist die Anzahl der Arbeiter unmittelbar nach dem Start.
Der Spare2-Algorithmus versucht, die von billiger angegebene Anzahl von Leerlaufarbeitern beizubehalten. Wenn beispielsweise die Anzahl der inaktiven Mitarbeiter eins wird, wird 2-1 = 1 Mitarbeiter gestartet.
billiger-Schritt = 2
ist die maximale Anzahl von Prozessen, die gleichzeitig gestartet werden können. Wenn "billiger" groß ist, können Sie "billiger" einstellen, damit nicht zu viele Prozesse gleichzeitig gestartet werden.
Wenn die Anzahl der Leerlaufprozesse für "billiger Leerlauf = 30" Sekunden größer als billiger ist, wird ein Arbeitsprozess gestoppt. Wenn Sie diesen Wert länger einstellen, können Sie verhindern, dass Mitarbeiter im Detail anhalten und neu starten.
spare
[uwsgi]
...
processes=10
cheaper-algo=spare
cheaper=2
cheaper-initial=2
cheaper-step=2
cheaper-overload=5
Der Ersatzalgorithmus zählt, wenn keine Leerlaufprozesse (= Überlastung) vorhanden sind und wenn zwei oder mehr Leerlaufprozesse (= Leerlauf) vorhanden sind. Wenn Sie einen hochzählen, wird der andere zurückgesetzt, aber wenn Sie nur einen Leerlaufprozess haben, wird keiner gezählt.
Wenn die Überlastzahl "billiger-Überlast = 5" erreicht, fügen Sie "billiger-Schritt = 2" Arbeitsprozesse hinzu. Wenn die Leerlaufzahl "billiger-Überlast = 5" erreicht, stoppen Sie einen Arbeitsprozess.
Dieser Algorithmus erfordert eine kleine "billigere Überlastung" und einen großen "billigeren Schritt", um die Anzahl der Arbeiter schnell zu erhöhen, beispielsweise wenn ein Server unter Lastverteilung hinzugefügt wird. Trotzdem ist die anfängliche Reaktionszeit tendenziell erheblich kürzer, da neue Mitarbeiter erst gestartet werden, wenn alle Arbeitsprozesse ausgelastet sind.
Wenn Sie "billigere Überlastung = 1" einstellen, steigt oder sinkt die Anzahl der Arbeitnehmer tendenziell nach und nach. Wenn Sie beispielsweise ungefähr 40 Mitarbeiter haben, ist es übertrieben, einen Mitarbeiter mit nur zwei Leerlaufprozessen zu stoppen.
backlog
Es ähnelt Spare, trifft jedoch eine Überlastungsentscheidung, indem es die Fähigkeit von Linux nutzt, die Anzahl der Verbindungen im TCP-Backlog zu überwachen.
Dies kommt nicht in Frage, da es die Schwächen von Spare erbt und nicht verfügbar ist, wenn Nginx und UWSGI über Unix-Sockets verbunden sind.
busyness
Geschäftigkeit erschwert Ersatz.
Sei "billiger-Überlastung" der Zeitrahmen und sei Geschäftigkeit der Prozentsatz der Arbeiter, die während dieser Zeit untätig waren. Stellen Sie die Minimal- und Maximalwerte für diese Geschäftigkeit ein. Wenn der Mindestwert unterschritten wird, verringert sich die Anzahl der Mitarbeiter. Wenn der Maximalwert überschritten wird, erhöht sich die Anzahl der Mitarbeiter.
Andere Optionen sind recht kompliziert, wie die Option, die Reduzierung der Anzahl der Mitarbeiter zu erschweren, und die Option, den Rückstand zu überwachen und Mitarbeiter hinzuzufügen, ohne auf den Zeitrahmen zu warten. Dies erhöht jedoch auch die Anzahl der Mitarbeiter zu Beginn reibungslos. Es ist schwierig, mit der Einschaltlast umzugehen.