Ich verwende uwsgi in einem Container, der in einem Kubernetes-Cluster gehostet wird. UWSGI unterstützt eine traditionelle Master / Slave-Architektur , um eine bessere Verfügbarkeit für die Anwendung zu bieten, aber meine Frage ist , sollte ich diese Funktion überhaupt nutzen?
Mit anderen Worten, wenn ich mehr Prozesse benötige, 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?
Seien Sie sich bewusst, dass Sie genügend Threads / Prozesse / Pods haben, um die Verfügbarkeit aufrechtzuerhalten, wenn Ihre Anwendung während der Bereitstellung jeder HTTP-Anfrage (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 einen separaten 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 die Einhaltung 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.
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 kommt völlig darauf an, was für Ihre App funktioniert.
Der Vorteil der Skalierung von Pods besteht darin, dass Sie sie dynamisch konfigurieren können und somit keine Ressourcen verschwenden.
Tags und Links django kubernetes uwsgi