Kiedy kupowałem pierwsze Raspberry Pi Model A kilka lat temu, byłem przekonany, że jedyne słuszne zastosowanie to XBMC, czy jakaś emulacja GameBoya na telewizorze, generalnie tania rozrywka. Szybko jednak okazało się, że przez większość czasu maliny wisiały za telewizorami nie robiąc nic ciekawego, a co lepsze, bardzo rzadko z nich korzystałem. W pewnym momencie przeszedłem na Smart TV i Raspberry Pi wylądowało w szufladzie, nie było też czasu na rozsiadanie się przy starych gierkach bo lepiej było powalczyć na konsoli.

MalinowyGRID - wygląd

Jakiś czas później zaangażowałem się w programowanie biblioteki do liczenia rozproszonego (distributed computing) i potrzebowałem odpowiedniej platformy za nieduże pieniądze by móc ją na bieżąco testować. Od razu wiedziałem, że Raspberry Pi do takiego projektu będzie idealne bowiem nie wymaga chłodzenia, nie szumi, nie pobiera dużo prądu, jest mega łatwe w użyciu a do tego bardzo dostępne i tanie. Same zalety – wszystko to przypominam miało działać w domu, więc zwłaszcza te temperatury, zużycie prądu i brak szumu były istotne.

MalinowyGRID - wygląd

Złożenie kilku Raspberry Pi w jedną całość nie jest takie łatwe, to dlatego że otwory w Malinkach mają dość nietypowy rozmiar i wymagane było ich rozwiercenie do rozmiaru M4. Trzeba być przy tym być bardzo ostrożnym, robótki w takiej małej skali raczej skazane są na porażkę. Nie mnie j jednak po delikatnym rozwierceniu, malinki pięknie się nakładają na dystanse aluminiowe (M4 L=20mm). Przyznaje, że zacząłem od 50mm ale dystanse o wysokości 20mm są idealne bowiem grid nie przegrzewa się i ma jeszcze czym oddychać. Dodatkowo nie jest wysoki przez co stabilnie stoi.

MalinowyGRID - hub USB D-Link

Kolejnym wyzwaniem jest zasilanie. Kierowałem się w tym przypadku prostą zasadą – jeden kabel do gniazdka. To wymagało mocnego HUBa i po wielu testach udało mi się w końcu trafić na D-LINK (http://www.dlink.com/us/en/home-solutions/connect_us/usb/dub-h7-7-port-usb-2-0-hub) – idealnie pracuje on z 6 raspberry na raz. Inne Huby powodowały cuda, niektóre wyłączały porty w momencie liczenia, inne zaś nie dawały nawet szansy na uruchomienie MalinowegoGRIDa. Zdecydowanie polecam DLinka.

MalinowyGRID - karty WiFi

Mając gotowy system zasilania, stabilną konstrukcje GRIDa i chęci, pojawił się temat sieci a wraz z nim kwestie związane z miejscem i przestrzenią. Nie mogłem pozwolić sobie na kable bo wymagało by to dodatkowego urządzenia jakim byłby switch, ilość kabli spowodowałaby, że MalinowyGRID urósłby do rozmiarów małej szafki i wszystko to w mieszkaniu po prostu by przeszkadzało. Stąd wybór padł na WIFI. Raspberry dość dobrze radzi sobie z połączeniem bezprzewodowym a do tego jestem wolny od kabli i dodatkowych urządzeń. GRID z WiFi może stać w każdym miejscu w mieszkaniu i nie będzie przeszkadzał. Wybór WiFi ma swój jeden główny minus – prędkość, przesyłanie binarek/danych między nodami w GRIDzie będzie zdecydowanie wolniejsze, ale coś za coś. Dla mnie ważniejsze były gabaryty samej maszyny, prędkoćć nie stanowi problemu – nie liczymy równolegle, a dwie minuty w tą czy tamtą nie ma znaczenia w przypadku gdy wynik obliczania mamy i tak dostać za kilka dni. Wszystkie node’y grida wyposażyłem w karte sieciową TP-LINK TL-WN725N(http://www.tp-link.com.pl/products/details/?model=TL-WN725N) i tu uwaga, na Allegro są te karty w wersji ‘china’ i nie mają diody, niestety większość kupiłem hurtem i nie zwróciłem na to uwagi – teraz żałuje. Kupujcie z diodą – efekt jest ciekawszy.

MalinowyGRID - zasilanie

Następny temat to system. Idealnie na MalinowyGRID nadaje się Raspbian, nie ma się co oszukiwać czysty OS bez dodatków świetnie sobie daje radę. Podszedłem do zagadnienia tak jak podchodzi się do tematu przy normalnych skalowalnych gridach – najpierw skonfigurowałem jeden node a potem przy pomocy narzędzia rpi-clone (https://github.com/billw2/rpi-clone) przekopiowałem cały obraz systemu na 6 osobnych kart SD. Po tym etapie, zostaje już tylko skonfigurować odpowiednio DHCP tak by cały GRID miał zarezerwowaną pulę adresów IP.

MalinowyGRID - GRIDMAN

Sama konstrukcja z kilku Raspberry GRIDa nie czyni, trzeba na nich uruchomić odpowiednie oprogramowanie, które pozwoli dystrybuować i zarządzać GRIDem. Do tego celu napisałem odpowiednią bibliotekę GRIDMAN, która z założenia ma być prosta w obsłudze, x-platform i ma pozwalać na zarządzanie superkomputerem z poziomu telefonu z systemem iOS. Aplikację na telefon można ściągnąć z AppStore (https://itunes.apple.com/us/app/gridman/id819277978?mt=8).
Dla ciekawskich, biblioteka napisana jest w C++ całość składa się z następujących binarek:

  • Server
  • Worker
  • Biblioteka
  • iOS Gridman
  • Command line manager

Dopiero teraz, mając gotowy system, sprawdzoną konfigurację i bibliotekę można przystąpić do pracy. W czasie gdy powstawał GRIDMAN dość dużo bawiłem się pentestingiem i backtrackiem w związku z tym trzy pierwsze ‘taski’, które napisałem na grid były distributed bruteforce’ami łamały WEP, WPA i MD5. Po dłuższym czasie, przyszedł moment w którym trzeba było napisać coś innego – tym razem były to sieci neuronowe, które wykorzystywały GRID do rozproszonego nauczania, sieci te pracują do dziś i analizują rynek FOREX.

MalinowyGRID poza analizą rynku pracuje też jako środowisko dev & test dla wszystkich aplikacji i tasków które zanim wylądują na docelowym gridzie (złożonym z kilku maszyn Z800) są testowane przeze mnie w domu. Nie jestem naukowcem, a GRID zbudowałem i zaprogramowałem w ramach wolnego czasu i hobby. Przygodę z budową własnego GRIDa polecam każdemu, efekt końcowy jest po prostu zdumiewający. Sam GRID może posłużyć do wielu celów, u mnie zaczął jako maszyna do łamania haseł a dziś pracuje nocą i zdarza mu się na siebie zarobić.

Dzisiaj za małe grosze, każdy może mieć w domu czy swoim biurze superkomputer i o to w tej całej przygodzie chodzi :) A przy większym zapotrzebowaniu, dzięki temu że biblioteka jest gotowa – można przeskalować rozwiązanie w kilka minut na gotową platformę np. Blade’y.

Co dalej?
Chcę przede wszystkim opublikować binarki na Raspberry – tak by można je było przyjemnie zainstalować via apt-get. Dzięki temu, każdy będzie mógł sobie uruchomić własny MalinowyGRID w domu i napisać na niego aplikacje bądź skorzystać z gotowych rozwiązań.

Warto obejrzeć sobie kilka filmów na kanale: youtube.pl/codemasterpl