Równoważenie obciążenia w sieci robotów internetowych Adam Grycner, nr indeksu 209179 Łukasz Kornek, nr indeksu 209145 28 czerwca 2011
SPIS TREŚCI SPIS TREŚCI Spis treści 1 Opis problemu 2 1.1 Obliczanie obciążenia......................... 2 2 Rozdzielanie zadań 2 2.1 Consistent hashing.......................... 2 3 Zastosowane metody równoważenia obciążenia (ang. load balancing) 2 3.1 Sender initiated load balancing................... 2 3.2 Random load balancing....................... 3 3.3 Centralized load balancing...................... 3 4 Testy 3 4.1 Sender initiated load balancing................... 3 4.2 Random load balancing....................... 4 4.3 Centralized load balancing...................... 5 4.4 Consistent hashing.......................... 5 5 Wnioski 6 6 Obsługa programu 7 6.1 Wymagania.............................. 7 6.2 Uruchamianie agentów........................ 7 6.2.1 Uruchomienie platformy................... 7 6.2.2 Uruchomienie agenta-robota................. 7 6.2.3 Uruchomienie agenta-statystyka............... 7 1
3 ZASTOSOWANE METODY RÓWNOWAŻENIA OBCIĄŻENIA (ANG. LOAD BALANCING) 1 Opis problemu Należy zarządzać siecią agentowych robotów internetowych (ang. web crawlers), tak aby: agenci nie odwiedzali tych samych stron wielokrotnie, agenci dzielili się pracą, było możliwe dodawanie i usuwanie agentów z sieci w czasie pracy. 1.1 Obliczanie obciążenia Aby dobrze opisać, jak agenci powinni dzielić się pracą, należy zdecydować się na sposób obliczania obciążenia agenta. Zastosowany sposób: L a = qsize(a)/avg upt(a) gdzie: L a - obciążenie agenta a, qsize(a) - rozmiar kolejki adresów stron do odwiedzenia przez agenta a, avg upt(a) - średnia liczba stron odwiedzanych przez agenta a w określonym czasie. 2 Rozdzielanie zadań 2.1 Consistent hashing Każdy agent posiada strukturę, która informuje go komu należy przydzielić dane zadanie. O strukturze możemy myśleć, jako o okręgu, na który będziemy mapować hasze agentów oraz hasze adresów url. Każdy agent, ma przydzielone kilka punktów na okręgu. Strona o haszu h jest przydzielana agentowi o najmniejszym haszu większym niż h. Graficzną prezentację metody widać na rysunku 1. Dzięki consistent hashing gwarantowaliśmy sobie, że agenci nie będą wykonywać nadmiarowej pracy. Każdy adres url jest przydzielony dokładnie jednemu agentowi i to on decyduje, czy zlecić komuś wykonanie zadania (pobranie zawartości adresu url). 3 Zastosowane metody równoważenia obciążenia (ang. load balancing) W programie zastosowane zostały następujące metody równoważenia obciążenia: 3.1 Sender initiated load balancing Agent pyta innych agentów o ich obciążenie. Jeśli jest przeciążony (istnieje agent, który jest mniej obciążony), wysyła do najmniej obciążonego agenta taką liczbę adresów, by ich obciążenie było równe. 2
3.2 Random load balancing 4 TESTY Rysunek 1: Consistent hashing 3.2 Random load balancing Agent pyta losowego agenta o jego obciążenie. Bardziej obciążony z nich wysyła mniej obciążonemu taką liczbę adresów, by ich obciążenie było równe. 3.3 Centralized load balancing Wybrany w sposób zdecentralizowany agent pyta innych agentów o ich obciążenie. Następnie wydaje agentom polecenia przesyłu pewnej liczby adresów innym agentom. 4 Testy W naszych testach porównaliśmy trzy metody równoważenia obciążenia (sender initiated load balancing, random load balancing, centralized load balancing). Poza tym każdy agent stosował consistent hashing do ustalania, czy dany adres url został już sprawdzony. Dodatkowo sprawdziliśmy, jak równoważą obciążenie agenci używający tylko consistent hashing. Na rysunkach mamy przedstawione wykresy obciążenia czterech agentów na przestrzeni godziny. 4.1 Sender initiated load balancing Średnie odchylenie standardowe: 352 Średnia różnica między największym a najmniejszym obciążeniem: 888 Liczba wysłanych wiadomości: 6960 Liczba odebranych wiadomości: 9871 3
4.2 Random load balancing 4 TESTY Rysunek 2: Wykres obciążenia na przestrzeni godziny przy sender initiated load balancing Rysunek 3: Wykres obciążenia na przestrzeni godziny przy random load balancing 4.2 Random load balancing Średnie odchylenie standardowe: 269 Średnia różnica między największym a najmniejszym obciążeniem: 679 Liczba wysłanych wiadomości: 3539 Liczba odebranych wiadomości: 3495 4
4.3 Centralized load balancing 4 TESTY Rysunek 4: Wykres obciążenia na przestrzeni godziny przy centralized load balancing 4.3 Centralized load balancing Średnie odchylenie standardowe: 472 Średnia różnica między największym a najmniejszym obciążeniem: 1206 Liczba wysłanych wiadomości: 3006 Liczba odebranych wiadomości: 3756 4.4 Consistent hashing Rysunek 5: Wykres obciążenia na przestrzeni godziny przy consistent hashing 5
5 WNIOSKI Średnie odchylenie standardowe: 2106 Średnia różnica między największym a najmniejszym obciążeniem: 5377 Jak widać samo consistent hashing nie równoważy dobrze obciążenia. Ponieważ jednak działanie consistent hashing nie zależy od obciążenia agenta, na drugim wykresie przedstawiamy zmianę wielkości kolejki agentów w czasie. Innymi słowy, jest to wykres działania agentów przy założeniu, że przeglądają adresy z taką samą szybkością. Rysunek 6: Wykres wielkości kolejki na przestrzeni godziny przy consistent hashing 5 Wnioski Zastosowanie consistent hashing zapewnia, że adresy url będą sprawdzane tylko raz. Consistent hashing dość dobrze rozdziela adresy pomiędzy agentów o równej przepustowości łącza. Można dostosować je też do agentów, którzy mają różną przepustowość łącza, odpowiednio ustalając ilość punktów przyporządkowanych agentom. Ma jednak poważne ograniczenia. Jest to bardzo sztywne rozwiązanie - jeśli w trakcie działania agenta zostanie ograniczona jego przepustowość, consistent hashing nie zrobi nic, by przenieść część jego pracy na innych agentów (rysunek 5). Ponadto równomierne rozdzielanie adresów zależy od dobrego wylosowania punktów agentów na okręgu, co nie zawsze się uda. Dlatego konieczne jest użycie dodatkowej metody równoważenia obciążenia. Dla niewielkiej liczby agentów najlepszym rozwiązaniem wydaje się random load balancing, które w testach uzyskało najmniejsze różnice w obciążeniu. Jednak wraz ze wzrostem liczby agentów prawdopodobnie inne metody będą działały lepiej niż random load balancing, ponieważ kontaktują się w większą liczbą agentów w celu równoważenia obciążenia. Z pozostałych dwóch przetestowanych metod sender initiated load balancing daje mniejsze różnice w obciążeniu agentów, ale wymienia o wiele więcej komunikatów między agentami niż centralized load balancing. Wadą Centralized load 6
6 OBSŁUGA PROGRAMU balancing jest centralizacja procesu wymiany adresów, co może prowadzić do przeciążenia centralnego agenta. 6 Obsługa programu 6.1 Wymagania Python 2.6.x (http://python.org/) biblioteka spade (http://code.google.com/p/spade2/) biblioteka BeautifulSoup (http://www.crummy.com/software/beautifulsoup/) Instalacja bibliotek Pythona: python setup.py install 6.2 Uruchamianie agentów 6.2.1 Uruchomienie platformy 1. spade/configure.py server_ip 2. spade/runspade.py gdzie: server ip - adres IP platformy spade 6.2.2 Uruchomienie agenta-robota sia-crawling/main.py agent_name server_ip LB_type [number_of_threads=1 seed_urls_file=none] gdzie: agent name - nazwa agenta server ip - adres IP platformy spade LB type - rodzaj równoważenia obciążenia: 1 - sender initiated LB 2 - random LB 3 - centralized LB 4 - tylko consistent hashing number of threads - ilość wątków przeglądających strony seed urls file - plik z początkowym zbiorem adresów1 6.2.3 Uruchomienie agenta-statystyka sia-crawling/statisticsagent.py agent_name server_ip gdzie: agent name - nazwa agenta server ip - adres IP platformy spade 7