Jakie są ograniczenia wbudowanego serwera www flask

Jestem nowicjuszem w administracji serwerem WWW. Wielokrotnie czytałem, że flask wbudowany serwer WWW nie jest przeznaczony do "produkcji" i musi być używany tylko do testów i debugowania...

Ale co jeśli moja aplikacja dotyka tylko tysiąca użytkowników, którzy okazjonalnie wysyłają dane na serwer ?

Jeśli to zadziała, to kiedy będę musiał zawracać sobie głowę konfiguracją bardziej wyrafinowanego serwera www ? (Szukam metryki przybliżonej).

W skrócie, chciałbym znaleźć to, co wbudowany serwer WWW może zrobić (z progami OK.) i czego nie może.

Wielkie dzięki !

Author: edelans, 2013-12-30

2 answers

Nie ma jednej prawidłowej odpowiedzi na to pytanie, ale oto kilka rzeczy, o których należy pamiętać:

Przy odpowiedniej ilości skalowania poziomego, jest całkiem możliwe, że możesz nie używać serwera debugowania w nieskończoność. Kiedy dokładnie będziesz musiał rozpocząć skalowanie (lub przełączyć się na "prawdziwy" serwer WWW) zależy również od środowiska, w którym hostujesz, oczekiwań użytkowników itp.

Głównym problemem, który prawdopodobnie napotkasz, jest to, że serwer jest jednowątkowy. Oznacza to, że będzie obsługiwał każde żądanie po kolei, seryjnie. Oznacza to, że jeśli próbujesz obsłużyć więcej niż jedno żądanie (w tym favicony, elementy statyczne, takie jak obrazy, pliki CSS i Javascript itp.) żądania potrwają dłużej. Jeśli dane żądania zajmują dużo czasu (powiedzmy 20 sekund), cała aplikacja nie odpowiada przez ten czas (20 sekund). Jest to oczywiście tylko domyślne: możesz podbić liczbę wątków (lub mieć żądania obsługiwane w innych procesach), co może złagodzić niektóre problemy. Ale po raz kolejny, nadal może być powolny pod "wysokim" obciążeniem. To, co jest uważane za "wysokie" obciążenie, będzie zależeć od twojej aplikacji i oczekiwań maksymalnego dopuszczalnego czasu reakcji.

Kolejną kwestią jest bezpieczeństwo: jeśli w ogóle martwisz się o bezpieczeństwo (i nie tylko o bezpieczeństwo danych w samej aplikacji, ale także o bezpieczeństwo pudełka, w którym będzie ona uruchomiona), nie powinieneś używać serwer programistyczny. Nie jest gotowy, by wytrzymać jakikolwiek atak.

Wreszcie, serwer programistyczny może po prostu zawieść. Nie jest przeznaczony do stosowania jako długotrwały proces (dni, tygodnie, miesiące), a więc nie został dobrze przetestowany do pracy w tym charakterze.

Więc tak, ma ograniczenia. Tak, nadal można go wykorzystać w produkcji. I tak, nadal polecam korzystanie z" prawdziwego " serwera www. Jeśli nie podoba Ci się pomysł instalacji czegoś takiego jak Apache lub Nginx, nadal możesz wybrać rozwiązanie, które jest tak proste ,jak" uruchom skrypt Pythona", korzystając z niektórych autonomicznych serwerów WSGI , które może uruchomić serwer, który jest zaprojektowany do produkcji z czymś tak prostym, jak uruchomienie python run_app.py w wierszu poleceń. Zazwyczaj wystarczy utworzyć 4-5-liniowy skrypt Pythona, aby zaimportować i utworzyć obiekt server, skierować go do Flask app i uruchomić go.

Gunicorn może być uruchomiony tylko z następującym poleceniem linia, nie wymaga dodatkowego skryptu:

gunicorn myproject:app

...gdzie "myproject" jest pakietem Pythona zawierającym obiekt app Flask.

 42
Author: Mark Hildreth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-31 19:03:22

OP już dawno ruszył dalej, ale dla tych, którzy napotkają to pytanie w przyszłości dodam tylko, że konfiguracja serwera Apache, nawet na laptopie, jest darmowa i całkiem łatwa. Można go łatwo skonfigurować dla tak niewielu lub tak wielu funkcji, jak chcesz, po prostu odkomentowując lub komentując wiersze w pliku konfiguracyjnym. W dzisiejszych czasach może być jeszcze łatwiejsza metoda GUI, ale sama edycja configs jest prosta.

 0
Author: Todd Carney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-16 22:30:08