Pierwotnie ta notka miała być o różnych kwestiach rozwiązania problemu wydajności serwera na którym ma pracować Viix. Uznałem, że przy wydajności mojej maszyny aplikacja typu “Hello world” powinna być obsługiwana na poziomie 800-850 req/sec. Co z tego wyszło? Zapraszam
1. Przegląd rozwiązań
Oto możliwe dostępne rozwiązania.
- Apache + mod_php + symfony
- Apache + mod_fastcgi + django
- Apache + mod_python + django
- LightTPD + FastCGI/CGI + symfony
- LightTPD + FastCGI + django
Udało mi się przetestować tylko 3. Na Windowsie oczywiście. A to wszystko przez złą obsługę FastCGI na aplikacjach właśnie tego systemu. Nie ukrywajmy to tylko stacja deweloperska. Po trzydniowej walce poddałem się ale nie do końca. Niewiele zabrakło do uruchomienia najwydajniejszego rozwiązania (ostatnie na liście).
2. Problemy
Niestety zaczęło się od tego, że Apache nie chciał załadować dll-a do obsługi FastCGI. Ni jak nie mogłem go zmusić do działania. Cóż, przetestowałem więc tylko mod_python i sprawa załatwiona, Apache poszedł szukać innego komputera (odinstalowany). Potem zainteresowałem się LightTPD w wersji dla Windows. I od razu zmiany. Przede wszystkim zużycie pamięci obniżyło się 1,5x. Sam katalog z serwerem zajmuje ok. 18 MB, czyli o wiele mniej niż konkurencyjny Apache. Uruchomienie PHP w trybie CGI (niestety FastCGI powoduje zbyt wiele problemów, wino leży po stronie PHP) przyniosło poprawę wydajności. Django niestety nie zadowoli się szybkim serwerem produkcyjnym, ponieważ Flup nie jest zbytnio dopracowany. Uruchamia serwer, ale nie potrafi odpowiedzieć na żądanie z przeglądarki lub jakiegokolwiek innego programu. Reszta konfiguracji wygląda poprawnie. Może kiedyś poprawią ten błąd.
3. Wydajność
Od razu zaznaczam, że to są luźne dywagacje. Benchmarki nie zostały przeprowadzone zgodnie z normami. Testowałem rozwiązanie 1, 3 i 4 z listy. Najwolniejszy okazał się… Django na mod_python. Ogólnie Django nie był testowany na FCGI, więc nie mógł pokazać pazurków. Ogólnie najwydajniejszy był Symfony na PHP ustawionym jako CGI.
Test wyglądał tak: pierwsza próba to wyświetlenie napisu “Hello world”, czyli łatwizna. Druga to policzenie od 1 do 10000 oraz wstawienie 10 wierszy do bazy danych a następnie ich usunięcie. O dziwo Symfony z propelem było zbyt szybkie? Być może przeoczyłem włączony Cache, ale takie ustawienia byłyby na produkcyjnym. Kiedyś jeszcze do tego tematu powrócę. Do pooglądania wykresy. Kolejno z powyższymi testami testami, skala celowo zachowana.
4. Podsumowanie
Pointa jest jedna: nie zabierać się za tworzenie środowisk produkcyjnych na maszynie deweloperskiej. Mimo wszystko Symfony trochę mnie zaskakuje
Dokładniejsze testy przeprowadzę w wakacje na Linuksie na maszynie serwerowej.











Używa
Muszę co nieco powiedzieć w sprawie testowania. Mnie też zdziwiły tak wysokie wyniki (mimo iż maszyna jest mocna) i zrobiłem wnikliwy przegląd programu testującego. Niestety, nie brał on pod uwagę rzeczywistego czasu wykonania skryptu a tylko czas wysłania żądania i czas odpowiedzi z gotowymi danymi. Czyli wyszła nam na jaw tylko przepustowość łącza. Aby wyniki była rzeczywiście rzeczywiste należy podzielić je przez 20 ;). Niedługo jak skompletuję wszystkie testy podam poprawne wyniki (w kategorii wydajność serwera a nie łącza)