it-swarm.com.de

Was sind die Einschränkungen des in der Flasche integrierten Webservers?

Ich bin ein Neuling in der Webserver-Administration. Ich habe mehrmals gelesen, dass der integrierte Webserver der Flasche nicht für "Produktion" ausgelegt ist und nur für Tests und Debugging verwendet werden muss. 

Aber was ist, wenn meine App nur tausend Benutzer berührt, die gelegentlich Daten an den Server senden? 

Wenn es funktioniert, wann muss ich mich mit der Konfiguration eines anspruchsvolleren Webservers beschäftigen? (Ich suche nach ungefähren Metriken).

Kurz gesagt, ich würde gerne herausfinden, was der eingebaute Webserver (mit ungefähr Schwellenwerten) kann und was er nicht kann.

Danke vielmals !

34
edelans

Es gibt keine richtige Antwort auf diese Frage, aber hier sind einige Dinge zu beachten:

Mit der richtigen horizontalen Skalierung ist es durchaus möglich, dass Sie den Debug-Server für immer skalieren. Wann genau Sie mit der Skalierung beginnen müssen (oder auf einen "echten" Webserver umsteigen), hängt auch von der Umgebung ab, in der Sie sich befinden, den Erwartungen der Benutzer usw.

Das Hauptproblem, auf das Sie wahrscheinlich stoßen würden, ist, dass der Server Single-Threading ist. Dies bedeutet, dass jede Anforderung nacheinander seriell bearbeitet wird. Das heißt, wenn Sie versuchen, mehr als eine Anforderung zu bearbeiten (einschließlich Favoriten, statische Elemente wie Bilder, CSS- und Javascript-Dateien usw.), dauern die Anforderungen länger. Wenn bestimmte Anforderungen sehr lange dauern (beispielsweise 20 Sekunden), reagiert Ihre gesamte Anwendung für diese Zeit (20 Sekunden) nicht. Dies ist natürlich nur die Standardeinstellung: Sie können die Anzahl der Threads erhöhen (oder Anforderungen in anderen Prozessen bearbeiten lassen), wodurch sich einige Probleme lösen lassen. Bei einer "hohen" Last kann es jedoch noch langsam sein. Was als "hohe Last" angesehen wird, hängt von Ihrer Anwendung und den Erwartungen einer maximal akzeptablen Antwortzeit ab.

Ein weiteres Problem ist die Sicherheit: Wenn Sie sich ALLES Sorgen um die Sicherheit machen (und nicht nur um die Sicherheit der Daten in der Anwendung selbst, sondern auch um die Sicherheit der Box, auf der sie ebenfalls ausgeführt wird), sollten Sie den Entwicklungsserver nicht verwenden. Es ist nicht bereit, einem Angriff standzuhalten.

Schließlich könnte der Entwicklungsserver einfach ausfallen. Es ist nicht dafür ausgelegt, als langwieriger Prozess (Tage, Wochen, Monate) verwendet zu werden, und es wurde nicht getestet, um in dieser Funktion zu arbeiten.

Also ja, es hat Einschränkungen. Ja, Sie könnten es vielleicht noch in der Produktion verwenden. Und ja, ich würde trotzdem empfehlen, einen "echten" Webserver zu verwenden. Wenn Sie nicht die Idee haben, etwas wie Apache oder Nginx installieren zu müssen, können Sie immer noch eine Lösung verwenden, die so einfach ist wie das Ausführen eines Python-Skripts, indem Sie einige der WSGI-Standalone-Server verwenden. Der Server kann auf einem Server ausgeführt werden, der für die Produktion vorgesehen ist, und zwar genauso einfach wie das Ausführen von python run_app.py in der Befehlszeile. Normalerweise müssen Sie nur ein 4-5-Zeilen-Python-Skript erstellen, um das Serverobjekt zu importieren und zu erstellen, es auf Ihre Flask app zu verweisen und es auszuführen.

gunicorn konnte nur mit den folgenden Anweisungen in der Befehlszeile ausgeführt werden, es ist kein zusätzliches Skript erforderlich:

gunicorn myproject:app

... wobei "myproject" das Python-Paket ist, das das app Flask-Objekt enthält.

45
Mark Hildreth

Das OP hat sich längst weiterentwickelt, aber für diejenigen, die in der Zukunft auf diese Frage stoßen, möchte ich nur hinzufügen, dass das Einrichten eines Apache-Servers, sogar auf einem Laptop, kostenlos und ziemlich einfach ist. Es kann für beliebig viele oder beliebig viele Funktionen konfiguriert werden, indem Sie die Kommentarzeilen in der Konfigurationsdatei auskommentieren oder kommentieren. Heutzutage gibt es vielleicht eine noch einfachere GUI-Methode, aber das Bearbeiten der Konfigurationsdateien ist einfach.

0
Todd Carney