Superkomputer w służbie SEO – Google, Facebook i Brand24 nadciągam z moim potworem !

Na moim blogu (supercomputers.pl) opisywałem ostatnio złożenie klastra obliczeniowego na którym bawiłem się w testowanie różnych rozwiązań takich jak kopanie kryptowalut, rozkład obciążenia na wiele nodów i tym podobne zabawy. Jednak od początku moim celem było zbudowanie potwora który będzie w stanie zagrozić google i bingowi (Binga to już chyba przeskoczyłem 🙂 )

Od razu uprzedzam nie zbudowałem drugiej wyszukiwarki (pracuje nad tym ale o ironio nie mam jak utrzymywać danych które pobieram) ani monitoringu stron a’la brand24.pl (aczkolwiek też monitoruje tylko inne rzeczy) – zbudowałem małego potworka który przede wszystkim jest w stanie crawlować strony kilkunastokrotnie szybciej niż Screaming Frog oraz chodzić po internecie odkrywając i indeksując cały internet. Brzmi jak fantastyka ale zaraz wszystko postaram się opisać.

Superkomputer dla SEO

Mój superkomputer opisałem już wcześniej na supercomputers.pl: http://supercomputers.pl/moj-wlasny-diskless-klaster-typu-beowulf. Jest to klaster typu beowulf czyli taki „bieda klaster” który składa się z komputerów znalezionych w piwnicy. Stałych fizycznych nodów jest 12 jednak wszystko jest tak skonfigurowane że cokolwiek podłączymy do sieci co umożliwia bootowanie po PXE (cały klaster jest diskless – komputery pobierają system z sieci) staje się kolejnym nodem  klastra.
Nody to nic wysublimowanego – klasyczne P4 (stara dobra szkoła podatna na meltdown i spectre) 3 GHz z 2 GB RAM + nody które nie są stałą częścią klastra. Do tego klastra należą też cztery maszyny serwerowe (D210) spięte w klaster PROXMOX na którym śmigają kontenery LXC w liczbie 8 sztuk. Wszystko działa na Debianie 9 64 bit a same narzędzia na PHP 7.0. Jako system plików używam kolejnego klastra tym razem DRBD na dwóch DELLach optiplex 520 z P$ 2,8 GHz.

Cały klaster składa się zatem z dość sporej grupki komputerowych emerytów które dają niezłego czadu mimo że ktoś spisał je kiedyś na straty.

SEO Crawler

To jest projekt który rozwijam od czterech lat. Ogólnie wziął się z tego że nie miałem kasy na ScreamingFrog (jestem pyrusem i zawsze żal kasy) i pomyślałem że przecież da się to napisać. Użyłem biblioteki PHPCrawler jednak już po dwóch latach niewiele z nie jest zostało. Crawlerem sprawdzam ponad 40 czynników które mają wpływ na SEO oraz kondycje witryny (np: mierzy czasy odpowiedzi, downloadu itp dla każdej z podstron). W czystej postaci dostaje raport z wszystkim podstronami serwisu z parametrami wydajnościowymi, SEO dla każdej z podstron. Na postawie tego inny skrypt który nazwałem SEO Auditor przygotowuje audyt w bardziej przystępnej dla ludzi formie

Webiste SEO crawler
Panel sterujący crawlowaniem i audytami w blinked

Wydajność tego skryptu to około 20 stron crawlowanych jednocześnie przy 10-15 odpytaniach na sekundę dla każdej z tych witryn. Oczywiście istnieje możliwość zwiększenia liczby jednocześnie crawlowanych stron do 40 i liczby requestów do 100 req/s jednak tutaj blokuje mnie infrastruktura. Przy takiej liczbie requestów pojawiają się duże problemy z proxy, z moim routerem od TP-Linka tl-r480t+ (nie polecam) który nie radzi sobie z trybem load balancing ani nawet z trybem backupu łącza. Kolejnym problemem jest wydajność operacji I/O której bez duzej inwestycji w infrastrukturę nie przeskoczę

Jednak w standardowej konfiguracji skrypt jest już w stanie przetworzyć bardzo dużą liczbę podstron w jednej sekundzie rozkładając obciążenie na różne nody. Rozkładanie obciążenia polega na tym że skrypt sprawdza czy na danym nodzie jest uruchomione zadanie jeżeli nie to przydziela do danego noda kolejną stronę do crawlowania. Tak robi dla każdego kolejnego noda aż wszystkie nie będą obciążone. Jeżeli obciążenie na danym nodzie jest niższe niż 25% to dorzuca mu crawlowanie kolejnej strony.
W przypadku przerwania zadania przez pad zasilania lub łącza przywraca zadanie w ciągu 15 minut na nodzie na którym zostało ono zakończone.

Po crawlowaniu wysyła raport z informacją jak ono przebiegało oraz dodaje do bazy MySQL sterującej przypisywaniem zadań co jest sygnałem dla skryptu SEO Auditor który z danych składa audyt SEO.

SEO Auditor

To potężne narzędzie które jest u mnie w fazie „Alfa”. Jego celem jest poskładanie danych zbieranych z crawlera oraz monitoringu infrastruktury w porządny audyt seo który da pełny obraz stanu witryny.
Niestety pisanie takiego narzędzia jest bardzo czasochłonne gdyż trzeba przetworzyć olbrzymią liczbę danych – csv dla strony z 1000 podstron) to parenaście MB danych, poskładać to w sensowną całość oraz napisać masę zabezpieczeń żeby robot w audycie nie napisał jakieś głupoty.

Voyager

To mój skrypt który jest podwaliną pod przyszłą konkurencję Google i trochę jest takim odpowiednikiem Brand24.pl w SEO. Podstawowym celem
skryptu jest crawlowanie internetu. Z danych paru domen ma wyciągać linki prowadzące do innych domen a z tych kolejnych wyciągać linki do kolejnych domen i tak bez końca. Czyli skrypt jest spiderem który ma odkrywać nowe strony, zapisywać ich urle.

Podczas testów tego skryptu nie zastosowałem zabezpieczeń i program którego celem było parsowanie tylko domen z końcówką .pl rozkręcił się na tyle
że zaczął sobie zapisywać linki do każdej napotkanej domeny i na sekunde przybywało mi po okło 100-200 nowych domen.

Ucieszyłem się bo zawsze moim marzeniem było stworzenie sztucznej inteligencji. Stanąłem na środku biura krzyknąłem:

It’s alive

niczym doktor Frankenstein i po chwili je..b, trzask i miałem po moim mikro NFSie który się zapchał od liczby danych. Chwila radości a potem masa wulgaryzmów 🙁

Dzięki systemowi przeszukiwania możemy się dowiedzieć czy do naszej witryny prowadzą linki, wyszukać nowe domeny do crawlowania. System z prostego skryptu który miał mi wyciągać nazwy polskich domen stał się masakrycznym samograjem którego teraz już za bardzo nie kontroluje a który żyje trochę własnym życiem. Obecnie usprawniam mechanizm wyszukiwania linków prowadzących do danej domeny gdyż przy tym wolumenie danych jest to już trudne zadanie.

Voyager jest trochę takim odpowiednikiem narzędzi ahrefs jeżeli chodzi o SEO ale ma możliwość też wyciągania z treści danej podstrony, podstron (po połączeniu z crawlerem) czy znajduje się tam wzmianka o naszym biznesie podobnie jak brand24.pl. Tutaj uspokajam Michała Sadowskiego – nie jest moim celem stworzenie monitoringu mediów 🙂
Paser ten nie bazuje na wyszukiwaniu tylko w jakieś określonej puli domen a cały czas poszerza swoją bibiliotekę o kolejne domeny które znalazł na poprzednich domenach itd. itd. Oczywiście klaster tutaj jest wykorzystywany w podobny sposób jak przy poprzednich skryptach – jeżeli dany nod nie ma roboty to jest dociążany w ciągu 15-30 minut kolejnym zadaniem. Problemy te same co wcześniej: router, szybkość łącza, proxy.

Dane z tego skryptu w przyszłości posłużą mi być może do stworzenia wyszukiwarki lepszej niż GOOGLE !

Panel sterujący SEO

Do ogarnięcia całej tej zgrai botów oczywiście mam panel sterujący – widać go na screenie – dzięki niemu widzę co dokładnie w danym momencie się dzieje z nodami, jakie prace są wykonywane. Wyświetlane informacje są oczywiście mocno okrojone z tego względu że nie zmieściłyby się na ekranie. W kolumnie host nazwa jest specyficzna natomiast wynika to z tego że jako ojciec dwóch dziewczynek mam duszę koloru różowego i wszystkie fizyczne hosty nazwane są od imion kucyków pony a kontenery LXC od psiego patrolu 🙂

Reasumując

Wykorzystałem klaster typu beowulf w dość niespodziewanym kierunku jakim jest crawlowanie internetu, stron klientów. Oczywiście funkjonalności które są realizowane przez klaster jest znacznie więcej:
– Sprawdzanie kondycji witryny, jej uptime’u,
– Podstawowych parametrów jak Page Speed
– Warningi dotyczące zmian na podstronach lub globalnie dla całej domeny. Szczególnie istotne dla dużego e-commerce.
– Kopie też ZCASHa w nocy 🙂

Jestem przekonany że w Polsce nie ma drugiej agencji SEO która miałaby tak zaawansowane, napisane na własne potrzeby narzędzie które wykorzystuje tego typu klaster do analizy stron internetowych. Narzędzia póki co nie zamierzam udostępniać na zewnątrz – służy tylko wewnętrznym potrzebom ale kto wie czy już wkrótce nie zrobię jakiegoś spektakularnego serwisu.

Natomiast powiem Wam że jest to tak fantastyczna, wciągająca dziedzina IT/e-commerce/BigData że pochłania mnie bardzo mocno. Patrzenie jak te crawlery pożerają dane, nody które same się uruchamiają żeby odciążyć inne hosty, niespodziewane awarie przez które czasami mam wrażenie że zbudowałem Skynet powodują że chce więcej i więcej programować bawić się tym. Fajne jest to że pomimo istnienia w kraju paru podobnych rozwiązań czy to do monitoringu internetu takich jak brand24 Michała Sadowskeigo czy do audytów witryn jak Clusteric o którym dowiedziałem się pisząc ten artykuł, każde z tych rozwiązań jest totalnie unikatowe i ilość danych które niejako można wyciągnąć z internetu jest tak olbrzymia że nawet nie ma szans aby powstały dwa narzędzia zajmujące sie w zasadzie tym samym o tych samych funkcjonalnościach.

Wszystkie osoby zainteresowane zapraszam do kontaktu – jeżeli potrzebujesz nietypowych danych z różnych witryn, sprawdzenia różnych współczynników na Twojej stronie to zachęcam do kontaktu 🙂

Autor: Michał

Ninja e-commerce specjalizujący się głównie w SEO, kampaniach display, contencie oraz tematach infrastrukturalnych. W wolnych chwilach coś sobie pokoduje w PHPie czy innym Pythonie

Komentarze (0)

Leave a reply