2017-08-15 1 views
8

Ich verwende uwsgi in einem Container, der in einem Kubernetes-Cluster gehostet wird. UWSGI unterstützt eine traditionelle master/slave architecture, um eine bessere Verfügbarkeit für die Anwendung zu bieten, aber meine Frage ist, sollte ich diese Funktion sogar nutzen?Ist es notwendig, mehrere Prozesse/Threads in einem Kubernetes-Pod zu haben?

Mit anderen Worten, wenn ich mehr Prozesse brauche, um Anfragen zu bearbeiten und zu berechnen, sollte ich die Anzahl der Pods im Cluster erhöhen oder sollte ich noch den Master/Slave-Modus von UWSGI verwenden, um auf die Anfragen zu antworten?

+0

Ich denke, wenn Sie die basierend auf Anfragen erhöhen, erhalten Sie eine bessere Leistung – Efazati

Antwort

4

Seien Sie sich bewusst, dass Sie genügend Threads/Prozesse/Pods haben, um die Verfügbarkeit aufrechtzuerhalten, wenn Ihre Anwendung während der Ausführung jeder HTTP-Anforderung (z. B. Django) blockiert. Es wird eine Pod-Startzeit geben, wenn Sie eine horizontale Pod Autoscaling verwenden, und ich fand mit einer viel Verkehr Anwendung hatte ich viel bessere Verfügbarkeit mit uwsgi und die Anwendung innerhalb jedes Pod (gleicher Container), und eine separate Nginx-Pod Reverse-Proxying und Request-Pooling, wenn alle uwsgi-Mitarbeiter beschäftigt waren.

YMMV aber am Ende des Tages ist die Verfügbarkeit wichtiger als das Festhalten an der Faustregel für einen einzelnen Prozess. Verstehen Sie einfach die Nachteile, wie zum Beispiel weniger Isolation zwischen den Prozessen innerhalb des gleichen Containers. Protokolle stehen auf einer Containerbasis zur Verfügung, so dass keine Isolierung zwischen Objekten in demselben Container mithilfe der integrierten kubectl-Protokollfunktionalität besteht.

+0

Meine +1. Ich habe das gleiche Gefühl von Uwsgi und Django. Wenn die HTTP-Anfrage blockiert wird, benötigen Sie mehr als einen Prozess-IMO. –

3

Der empfohlene Weg, dies in Kubernetes zu verwalten, besteht darin, die Anzahl der PODs basierend auf den Arbeitslastanforderungen zu erhöhen.

+1

Danke. Und es bedeutet, dass es nur einen Thread/Prozess im Container geben sollte? –

+1

Ja, mit nur einem Prozess ist die beste Praxis für Container. Prozess kann mehrere Threads enthalten. – sfgroups

2

Wir verwenden ein Bereitstellungsmodell, in dem eine Django-basierte App von Gunicorn mit einigen Worker-Prozessen bereitgestellt wird. Wir haben weiter versucht, diesen Pod auf 2-3 Replikas zu skalieren und Leistungsverbesserungen gesehen zu haben.

Es ist alles, was für Ihre App funktioniert.

Vorteil der Skalierung Pods ist, dass Sie es dynamisch konfigurieren können, also keine Ressourcen verschwenden.

Verwandte Themen