Back to top

Rummager

Nowy projekt – Rummager – http://luka.sh/projekty/rummager! Projekt otrzymał angielską nazwę ze względów marketingowych - poważnie :) Będę się starał pisać całą dokumentację (komentarze itp) „in english”, aby móc dotrzeć do „szerszej społeczności” itd... (na razie kiepsko mi idzie i robię mnóstwo byków, ale, mam nadzieję – to kwestia wprawy, a ta „wprawa” to ważna rzecz i o to tu idzie :)).

Ciekawa jest architektura tego przedsięwzięcia – dość „rozproszona”, wyraźnie podzielona na segmenty wykorzystujące różne technologie (choć oczywiście można by było wszystko napisać w np. pythonie, ale w pewnych kwestiach wykorzystanie php jest dla mnie jednak ciągle łatwiejsze). Segmenty nie są mocno rozbudowane – to wszystko „prototypy”, również samą formę należy traktować dość luźno i niezobowiązująco – aktualnie po prostu taka wydała mi się najlepsza, ale zmiany są jak najbardziej możliwe. Z „rozproszoną architekturą” w warunkach domowo / hobbystycznych wiąże się ciekawa kwestia – na czym ją „postawić”? Ilu z nas ma w końcu w domu serwerownię? :) Zazdroszczę tym co mają, ja niestety do nich nie należę – choć przyznam się myślałem o tym, miejsce by było! Można wykorzystać oczywiście własnego PC-ta i wirtualizację, ale poza developowaniem to nie ma specjalnie sensu – w końcu PC-et potrzebny jest... hmmm „jak żyć”? Otóż moi drodzy – okazuje się, że się da! Po pierwszym dniu poszukiwać rozwiązania tego problemu byłem pełen optymizmu i niesamowicie podekscytowany, co prawda później okazało się, że to co znalazłem pierwszego dnia nie ma konkurencji, i nic lepszego (czy nawet równie dobrego) już mi się znaleźć nie udało, więc mój optymizm trochę przygasł, ale i tak wielkie dzięki za to co jest! „Własna serwerownia” - tak, to możliwe, choć nie do końca bez kosztowo, ale po kolei.

Miejscem, które ja osobiście aktualnie uważam za numer jeden w kontekście „hostowania” własnych aplikacji, jest platforma Openshift (https://openshift.redhat.com) – brawo Red Hat! Nie powiem, że nie ma minusów, ale nie są to rzeczy nie do przejścia, a nie ma co grymasić jak dostajemy trzy „serwery” za darmo! Oczywiście te „serwery” to nie są maszyny którymi zarządzamy w 100% - to nie tak, to działa trochę inaczej, te „serwery” to tylko platformy do uruchamiania naszych programów, ale to w zupełności wystarczy – można „puścić” jakiś program i o nim zapomnieć (ja wykorzystuję zarówno dla programów w pythonie jak i w javie)! W kontekście projektu Rummager wszystkie programy typu „Worker” są uruchamiane właśnie na platformie Openshift. Teraz trochę o ograniczeniach – jeden „serwer” (dla openshift to tzw. gear, a w wersji free otrzymujemy trzy „small gear”-y) to 256 MB Ramu, 1GB dysku i cztero-corowy, współdzielony procesor, niewiele ale można na tym już coś zrobić (projekt Rummager ewoluował z powodu tych ograniczeń mocno na początku, bo rozwiązania najprostsze okazały się oczywiście najmniej optymalne, a przy takich zasobach optymalizacja to ważna rzecz! - te optymalizacje to być może dobry temat na kolejny wpis).

Ok, tak oto mamy uruchomionych robotników (workers) – aby mogli oni jednak w pełni działać potrzebna jest „jednostka centralna” (zobacz schemat, opis na: http://luka.sh/projekty/rummager) - serwer przechowujący dane i koordynujący pracę robotników. W pierwszej chwili chciałem poświęcić jeden z gear-ów z openshifta (są dostępne odpowiednie „cartridgde” - np. z mysql-em – które można dołączyć do wybranego gear-a, tu jednak dało o sobie znać pewne ograniczenie – otóż takiego serwera Mysql nie można udostępnić „na zewnątrz”, nie można się z nim nawet połączyć z innych gear-ów :(. No cóż - poza openshiftem po prostu musiałem poszukać czegoś jeszcze - tego samego dnia co na openshifta, trafiłem również na informację o darmowych serwerach na platformie amazon (notabene sam openshift jest hostowany na amazonie). Amazon (przynajmniej w ubiegłym roku) umożliwiał testowanie ich usługi przez rok za darmo. W ramach pakietu free można było zinstancjonować sobie jeden wirtualny serwer (1GB Ram ...reszty nie pamiętam, ale widzę że promocja ciągle trwa, więc każdy może sprawdzić samemu: https://aws.amazon.com/ec2/pricing) – wirtualny serwer to już serwer pełną gębą, nie tylko platforma do uruchamiania programów. Wydawało mi się więc że oto openshift + amazon to będzie moja platforma na pierwszy rok. Niestety, tym razem przeszkodziły ograniczenia darmowej wersji amazona - chodzi konkretnie o ograniczenie wykorzystania procesora... Openshift też stosuje tego typu ograniczenia, obserwuję np. że program może działać wykorzystując 100% procesora tylko przez jakiś czas, później wykorzystanie procesora spada do około 25%. Na amazon mamy specjalne jednostki które „wydajemy” przy obciążaniu procesora, po ich wyczerpaniu, możemy korzystać z procesora tylko w jakimś minimalnym zakresie (około 6%). 100% wykorzystania procesora wyczerpie nasz limit jednostek (150) w godzinę, ich „odnowienie” będzie wymagało od nas odczekania 24 godzin. Oczywiście 100% CPU to ekstremum, ale w przypadku Rummager-a na amazonie zainstalowałem bazę i serwis dostępowy, i trzech robotników potrafiło na tyle obciążyć bazę, że limit „kredytów na CPU” i tak topniał zbyt szybko, w końcu dochodziło do ich wyczerpania i „zadławienia” się całego systemu :( Oczywiście można by spowolnić pracę robotników, ale ich wydajność jest aktualnie i tak bardzo niska (około 0.5M skanowanych hostów na dobę, przy wymaganych 11M jeżeli chciałbym przeskanować „cały Internet” w jeden rok – oczywiście mam na myśli tylko ipv4 – aktualnie, po pierwszym roku działania, robotnicy zeskanowali około 0.5% (jakieś 100M hostów) założonego zakresu adresacji!). Tak więc oferta amazon-a – jakkolwiek warta polecania – w tym przypadku nie okazała się rozwiązaniem problemu.

Nie mając specjalnie pomysłu co dalej, sięgnąłem po rozwiązania płatne – tutaj jednak sprawa wcale nie okazała się taka prosta jak „zapłać, używaj, bądź szczęśliwy”. Oferta pierwszego usługodawcy była całkiem fajna (cena promocyjna za pierwszy rok niska, cena „bez rabatu” jakieś 450 zł / rok). Na początku wszystko ok, a później nagle mnóstwo problemów, bo nigdzie w ofercie nie pisało, że zapytanie SQL może trwać maksymalnie 3 sek! Po przekroczeniu tego czasu jest po prostu „ubijane” i tyle. Dla mnie to był duży problem, na tyle duży że zmieniłem dostawcę. U nowego dostawcy (cena „bez rabatu” 750 zł / rok) jednym z ograniczeń jest ilość możliwych równoległych połączeń z bazą danych (takie ograniczenie również nie jest wymienione w żadnej dokumentacji / ofercie usługi - szkoda), ale to nie jest duży problem dopóki nie ma widoków na zwiększenie liczby Robotników (a na razie nie ma). Drugie ograniczenie to wielkość bazy danych – max 5GB, choć w reklamie widać hasło: „bez ograniczeń” (ale pewnie dotyczy czegoś innego ;)) - w każdym razie po przekroczeniu 5GB od razu otrzymałem email z prośbą o zmniejszenie rozmiaru bazy i z informacją, że do czasu zmniejszenia baza zostanie wyłączona z codziennego backupu – w sumie, po przemyśleniu, dodałem proces „transferu już niepotrzebnych danych” (widoczny na schemacie) do bazy „archive” utrzymywanej już lokalnie na maszynie wirtualnej (to problem, który będę musiał jakoś rozwiązać jeszcze w tym roku, bo baza zajmuje coraz więcej miejsca...). Cena za usługę oczywiście jest duża, ale „w promocji” można kupić tę samą usługę za 30 zł / rok – trzeba więc jedynie mieć dobrze udokumentowaną instalację i co roku przenosić się na nowy serwer (w sumie usługodawca „wycenia” taki „nasz trud” na około 720 zł, więc dopóki „mieścimy” się w takim koszcie to czemu mamy płacić więcej?) :)

OK, tyle „słowem wstępu” do tego projektu – aktualnie udostępniam na githubie tylko kod robotników, nad resztą pracuję!