Radosław Bułat

Radosław Bułat Ruby on Rails
developer,
Adtaily.com

Temat: Wdrożenie nginx w AdTaily (http://www.adtaily.pl/)

Dla niewtajemniczonych: AdTaily to serwis dla wydawców i reklamodawców. Wydawcy umieszczają kawałek kodu javascript na stronie, który renderuje niewielki widget z reklamami. Przykładowy box możecie zobaczyć na stronach takich jak http://www.pudelek.pl/, http://www.fotka.pl/, http://bash.org.pl/latest/ (po załadowaniu strony szukajcie po słowie "AdTaily").

Kawałek skryptu js, który wkleja właściciel strony, pobiera m.in. z serwera dane o reklamach do wyświetlenia. Takie dane są dosyć łatwo keszowalne (wszyscy użytkownicy widzą te same reklamy w obrębie jednego serwisu). Wyzwaniem może być obsługa wielu jednoczesnych połączeń i ilości żądań/sekundę.

Początkowo używaliśmy Apache + Passenger (aplikacja stoi na railsach), jednak szybko się okazało, że są problemy z obsługą tysięcy połączeń jednocześnie. Oczywiście trzeba było zbijać Keep-Alive (= mniej procesów apache, mniej forków, mniejsze zużycie pamięci itp.), jednak na długo to nie wystarczyło.

Po wdrożeniu nginxa wszystkie bolączki zniknęły. Ilość otwartych połączeń (kilka tysięcy) nie robi żadnego wrażenia (nie musimy już zbijać Keep-Alive bo nginx sobie poradzi). Spadło zużycie pamięci, load.
Fakty w liczbach:
- 500req/s (dotyczy tylko jsonów z reklamami, obrazki i kod samego widgeta są na innym serwerze)
- 3000 aktywnych połączeń jednocześnie
- load - znikomy (generowany i tak przez samą aplikację a nie przez nginx)
- ponad MILIARD odsłon widgeta miesięcznie

Ostatnio zastosowaliśmy także nginx jako reverse proxy do danych trzymanych na S3 i rozwiązanie to spisuje się doskonale.

Dla mnie osobiście nginx jest zwycięzcą i odkryciem 2010 roku w poznanych narzędziach (znałem go wcześniej, ale nie miałem okazji używać).
Polecam każdemu.Radosław Bułat edytował(a) ten post dnia 22.12.10 o godzinie 12:48