1 Wstęp

Większość użytkowników Internetu ma swoje ulubione strony WWW, które regularnie odwiedza. Często stykają się oni z problemem braku informacji o zmianach na interesujących ich stronach. Chcieliby wiedzieć, kiedy zmieni się zawartość danej strony, lecz nie chcą na nią wchodzić codziennie, aby to sprawdzić. Aby ułatwić życie sobie i innym internautom, postanowiłem stworzyć serwis internetowy, który cyklicznie sprawdzałby strony zgłoszone przez użytkowników i automatycznie informował o zmianach, które zaszły od ostatniego sprawdzenia. Taki system pozwalałby internautom zaoszczędzić czas, a jednocześnie uprościłby dostęp do informacji.

Celem niniejszej pracy jest zaprojektowanie i zaimplementowanie systemu rejestrującego zmiany stron WWW. W pracy opisuję przyczyny powstania tego systemu oraz etapy analizy, projektowania i implementacji. Jednocześnie pokazuję także powstawanie biblioteki umożliwiającej przetwarzanie rozproszone -- będzie ona częścią całego systemu. Poszczególne etapy powstawania systemu zostały opisane w kolejnych rozdziałach pracy.

Rozdział 2. zawiera krótką analizę wykorzystania WWW przez ludzi, napotykanych problemów z uzyskiwaniem aktualnych treści oraz sposoby ich rozwiązania. Jest tam opisany przykładowy scenariusz działania użytkownika WWW oraz pokazany moment, w którym serwis powiadamiający o zmianach stron WWW staje się przydatny

W rozdziale 3. znajduje się analiza wymagań stawianych przed systemem. Ponieważ główny moduł systemu -- program sprawdzający strony -- jest rozproszony (potrzebę taką uzasadniam w punkcie 3.2), dalej w rozdziale omówione są wymagania stawiane przed systemem rozproszonym. Głównymi wymaganiami (i zaletami rozproszenia) są wydajność, skalowalność i odporność na błędy.

Rozdział 4. zawiera projekt systemu. Omówiłem w nim zastosowane technologie uzasadniając dokonane wybory. W kolejnych punktach rozdziału opisałem budowę systemu, projekt bazy danych, algorytm rozdzielania zadań pomiędzy węzły sieci, protokół komunikacji pomiędzy agentami a serwerem oraz sposób działania programu serwera głównego.

W rozdziale 5. omówiłem implementację systemu. Szczegółowo opisałem kilka najciekawszych aspektów implementacji. Jednym z nich było uniezależnienie szkieletu systemu od typu wykonywanych zadań (sprawdzania stron WWW). Dzięki takiemu podziałowi udało mi się wyodrębnić ogólną bibliotekę do rozdziału i rozproszonego przetwarzania zadań. Opisałem też między innymi sposób synchronizacji dostępu do tablic oraz metodę efektywnego sprawdzania stron WWW przy wykorzystaniu możliwości protokołu HTTP i algorytmu MD5. Dodatkowo pokazałem, jak wysyłanie poczty elektronicznej do użytkowników zostało w systemie potraktowane jako odrębny typ zadania.

System rozproszony, taki jak opisany w tej pracy, osiąga pełną wydajność dopiero po dostrojeniu -- ustawieniu odpowiednich parametrów algorytmu rozdzielającego zadania pomiędzy węzły sieci. Opis testów wydajnościowych i wynikającego z nich doboru parametrów umieściłem w rozdziale 6.

Rozdział 7. zawiera podsumowanie pracy. Umieściłem w nim moje wnioski sformułowane po zaimplementowaniu i uruchomieniu systemu. Opisałem także pomysły na rozszerzenie systemu oraz możliwości wykorzystania biblioteki do rozproszonego przetwarzania zadań powstałej w ramach realizacji projektu.

Pracę kończą dodatki oraz bibliografia. W dodatku A umieściłem przykładowy program wykorzystujący powstałą bibliotekę. Natomiast w dodatku B znajdują się skrypty tworzące bazę rzeczywistych adresów internetowych używanych przy testowaniu systemu.

Chciałbym w tym miejscu serdecznie podziękować mojemu opiekunowi naukowemu, dr Janinie Mincer-Daszkiewicz, za pomoc w przygotowaniu tej pracy oraz przesyłanie uwag i poprawek podczas jej powstawania.

Sebastian Łopieński