fapws3?

Django, Flask, Bottle, WSGI, CGI…
Antworten
metty
User
Beiträge: 99
Registriert: Samstag 13. Dezember 2008, 19:30

edit (jens): abgetrennt von http://www.python-forum.de/topic-22121.html
Defnull hat geschrieben: Das meiner Erfahrung nach beste Setup in Sachen Geschwindigkeit ist eh ein schneller HTTP Load Balancer (phound) und dahinter für jeden CPU Kern eine fapws3 Instanz.

Ich hab auf meinem Desktop PC (4Kern CPU) mit diesem Setup (und bottle.py 'Hello World') etwa 25.000 Requests/Sekunde hin bekommen. Das reicht.
Liege ich damit richtig, das bei diesem Setup der eingehende Traffic einfach via Round Robin an die fapws3 Instanzen "verteilt" wird?

Wie siehts in diesem Setup mit Sicherheit aus?
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Richtig (was das Round-Robin angeht). Aber was meinst du mit Sicherheit?
Bottle: Micro Web Framework + Development Blog
metty
User
Beiträge: 99
Registriert: Samstag 13. Dezember 2008, 19:30

Defnull hat geschrieben:Aber was meinst du mit Sicherheit?
Tut mir leid, hätte ich anders formulieren sollen...
Was ich damit gemeint habe ist, wie zuverlässig ist diese Lösung, bzw. gibt es Sicherheitsprobleme im fapws3?

Ist dir diesbezüglich was aufgefallen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

metty hat geschrieben:Was ich damit gemeint habe ist, wie zuverlässig ist diese Lösung, bzw. gibt es Sicherheitsprobleme im fapws3?
Die sind sowieso eher im Backend, die Frage ist eher wie sicher ist Pound/Varnish. Zumindest bei dem von Defnull beschriebenen Setup.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
metty
User
Beiträge: 99
Registriert: Samstag 13. Dezember 2008, 19:30

Leonidas hat geschrieben:Die sind sowieso eher im Backend, die Frage ist eher wie sicher ist Pound/Varnish. Zumindest bei dem von Defnull beschriebenen Setup.
Stimmt auch wieder...

Ich muss mal ein wenig (lokal) mit fapws3 in Kombination mit pound/varnish rumspielen, dann seh ich schon wohin das führt. :D
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Pound ist denke ich mit das Sicherste, was man als Frontend haben kann:
Pound is a very small program, easily audited for security problems. It can run as setuid/setgid and/or in a chroot jail. Pound does not access the hard-disk at all (except for reading the certificate file on start, if required) and should thus pose no security threat to any machine.
Das Interessante daran:
Pound will verify requests for correctness and accept only well-formed ones.
Das heißt, das die Backends vor fehlerhaften HTTP Anfragen geschützt sind.

fapws3 ist ebenfalls sehr übersichtlich (grade mal 1200 Zeilen C) und tut selbst nicht besonders viel. Es ist eigentlich nur eine in C geschriebene HTTP->WSGI Brücke, die die sehr schnelle evlib nutzt (statt threads) um die Anfragen asynchron verwalten zu können. Der Code ist nicht der schönste, aber ich hab ihn mir durch gelesen und habe keine potenziellen Sicherheitsprobleme finden können. Ich bin aber auch kein Experte.

Bottle (als Spitze des Setups) ist so sicher wie ich in der Lage bin es zu programmieren. Natürlich mache ich Fehler, aber ich bin auch nicht der einzige, der den Code liest. Bottle ist im Vergleich zu den großen Frameworks außerdem sehr übersichtlich und kompakt. Theoretisch könnte jeder den Code in 1 oder 2 Stunden komplett durchlesen und verstehen. Das tue ich übrigens vor jedem Release ausführlichst. Sicherheitsrelevante Bugs sollten also eigentlich recht schnell gefunden werden.

Trotzdem ist Bottle natürlich nach wie vor ein 0.x Release, also nicht für den Produktiveinsatz gedacht. Manche User scheint das aber nicht aufzuhalten ;)

Was die Zuverlässigkeit angeht: Pound erkennt defekte Backends und überspringt sie. Dann wird alle paar Sekunden geprüft, ob es wieder da ist. fapws3 ist ebenfalls sehr Robust in der Hinsicht das er Fehler einfach schluckt. Ab 1000 gleichzeitigen Requests fängt mein Linux an, ab und zu socket Verbindungen zu verlieren. fapws3 sagt mir das (could not write to socket) und macht munter weiter mit den anderen Requests. Kein Problem also. Speicherverbrauch ist fast nicht vorhanden.
Bottle hatte in der Vergangenheit genau einen Stabilitätsbug (ein memory leak, weil der GarbageCollector nicht hinterher kam bei ein paar tausend Requests pro Sekunde) aber der ist behoben. Ansonsten ist Bottle genau so stabil wie Python selbst, da ich (bis auf MemoryLeaks oder kritische OSErrors) nicht wüsste, was schief gehen könnte. Selbst wenn mal etwas schief geht, die Exception wird abgefangen, geloggt und der User bekommt nen 500er. Bottle läuft trotzdem weiter.
Bottle: Micro Web Framework + Development Blog
Antworten