Aplikacje internetowe i rozproszone

Transkrypt

Aplikacje internetowe i rozproszone
Aplikacje internetowe i rozproszone
Projekt
Cel projektu
1. Poznanie i praktyczne wykorzystanie metod / narzędzi udostępniania usług aplikacji za
pośrednictwem Internetu – np. za pomocą serwera aplikacji (preferowane środowisko realizacji
serwera aplikacji – Python).
2. Realizacja projektu programistycznego w zespole.
Ogólny opis - założenia
Zadanie polega na udostępnieniu za pomocą przeglądarki usług klastra obliczeniowego (zrealizowanego
jako klaster stacji roboczych).
W ramach projektu zostanie zaprojektowany i zaimplementowany moduł realizujący obliczenia w
środowisku rozproszonym/równoległym, jak również serwer umożliwiający zdalne zlecenie/wykonanie
zadania obliczeniowego za pomocą przeglądarki albo prostej aplikacji klienckiej.
Realizacja modułu obliczeniowego polega na zaimplementowaniu wybranego algorytmu w środowisku
równoległym na klastrze obliczeniowym (klastrem będzie grupa stacji roboczych pracujących w środowisku
MPI). Na klastrze będą realizowane zadania wymagające intensywnych obliczeń (przykłady - propozycje
takich zadań poniżej). Dostęp do usług klastra odbywał się będzie za pomocą przeglądarki WWW, przy
pomocy której użytkownik będzie łączył się z serwerem aplikacji obliczeniowej. Funkcjonalność serwera
aplikacji:
 Rejestracja / logowanie użytkownika,
 Uruchomienia zadania obliczeniowego,
 Zarządzanie „swoimi” zadaniami przez użytkownika,
 Monitorowanie postępu – informacja do użytkownika („pasek postępu”),
 Udostępnienie wyników obliczeń.
Proponowane technologie:
 Serwer aplikacji: Python (+ Django / Flask),
 Aplikacja równoległa: MPI (implementacja MPICH, C/C++, ew. Python), Apache Spark (Scala,
Python),
 Strona klienta: HTML5, CSS, JavaScript (jQuery / AngularJS).
Realizacja projektu
Projekt będzie realizowany w kilkuosobowych grupach studenckich. Grupa projektowa wyłoni szefa
projektu, który będzie prowadził harmonogram projektu oraz czuwał nad przydzieleniem osób do
poszczególnych podzadań w ramach projektu. Współpraca w grupie projektowej powinna być
zorganizowana / wspomagana za pomocą wybranego środowiska pracy grupowej –Trello, kod powinien być
utrzymywany w repozytorium – github).
Realizacja projektu będzie miała charakter iteracyjny – w pierwszym etapie (iteracja 0 – ok. 60% czasu
przeznaczonego na projekt) wykonana zostanie minimalna funkcjonalność (prototyp), umożliwiająca
weryfikację zaproponowanej architektury. Następnie rozwiązanie to zostanie rozbudowane (iteracja 1).
Ważnym elementem projektu będzie wykonanie dokumentacji opracowanego środowiska.
Zadanie realizowane będzie w następujących krokach:
1. Wybór tematu projektu i organizacja zespołu
Pierwszym krokiem jest zorganizowanie zespołu, w tym wybór szefa projektu oraz zorganizowanie
środowiska pracy grupowej zespołu (Trello).
Następnie należy wybrać temat projektu (w tym algorytm, który będzie podlegał równoległemu wykonaniu
w klastrze). Wybrany temat należy uzgodnić z prowadzącym.
2. Opracowanie projektu koncepcyjnego
Należy przedstawić koncepcję realizacji zadania, w tym architekturę aplikacji, oraz sposób realizacji takich
funkcji jak (w ramach projektów nie jest wymagana realizacja wszystkich poniższych funkcji):
 komunikacja z użytkownikiem,
 przekazywania parametrów do aplikacji,
 wywoływania funkcji aplikacji,
 przekazywania wyników do użytkownika,
 zarządzania użytkownikami aplikacji,
 uwierzytelnienie użytkowników aplikacji,
 zarządzania klastrem równoległym, raportowanie stanu klastra.
W przypadku aplikacji równoległych elementem tego projektu jest także koncepcja równoległego
wykonania zadania, w szczególności:
 architektura programu równoległego (np. podział dziedziny – farma procesów, przetwarzanie
potokowe),
 definicja elementarnego (pod)zadania dystrybuowanego do równolegle działających węzłów,
 definicja elementarnej paczki z cząstkowym rezultatem (wynik obliczeń dla podzadania),
 sposób agregowania wyników cząstkowych,
 sposób zakończenia działania procesów na równolegle działających węzłach,
 sposób śledzenia przebiegu obliczeń i pomiaru efektywności działania programu równoległego.
W tym etapie zostanie wskazana minimalna funkcjonalność aplikacji do realizacji w iteracji 0 oraz
planowana po iteracji 1.
3. Opracowanie projektu technicznego
Projekt techniczny powinien zawierać szczegóły implementacyjne rozwiązań opisanych w projekcie
koncepcyjnym -- należy zwrócić uwagę na interfejsy – wymianę informacji pomiędzy serwerem aplikacji a
programem równoległym na klastrze.
4. Implementacja podstawowej funkcjonalności – iteracja 0
Należy zrealizować prototyp, tj. podstawową funkcjonalność serwera aplikacji oraz modułu obliczeniowego
oraz połączyć obie te części. Kluczowe w tym etapie jest zademonstrowanie, że rozwiązane zrealizowane
wg zaproponowanej architektury działa (z minimalną jeszcze funkcjonalnością).
5. Implementacja pełnej funkcjonalności – iteracja 1
Etap polega na dodaniu do wyniku iteracji 0 – realizowane będzie do końca semestru (uwzględniając czas
potrzebny na zdokumentowanie projektu).
6. Testy
Należy zbadać skalowalność opracowanego programu równoległego w zależności od wielkości podzadania
wysyłanego do równolegle działających procesów.
7. Opracowanie dokumentacji
Wymagana treść:
 Opis koncepcji rozwiązania,
 Projekt techniczny,
 Dokumentacja powykonawcza (instalacyjna),
 Kod źródłowy programów,
 Przykładowe wynik badania efektywności programu równoległego.
Przykładowe tematy projektowe dla części równoległej
1. Równoległa wersja problemu komiwojażera.
2. Zadanie szeregowania zadań – rozwiązanie np. za pomocą metody tabu-search, równoległa wersja.
3. Równoległa wersja algorytmu generacji planu zajęć (school timetabling problem, class-teacher
timetabling problem).
4. Generacja scen metodą ray-tracing – równoległa wersja algorytmu.
5. Stworzenie animacji złożonej z klatek renderowanych za pomocą metody ray-tracing.
6. Generacja fraktala, animacja pozwalająca na obserwację fraktala w zwiększonej skali (zoom in).
7. Faktoryzacja dużej liczby metodą 'brutalnej siły' - rozłożenie zadanej liczby na czynniki bądź
stwierdzenie, że liczba jest pierwsza. Badanie skalowalności programu. Program powinien
umożliwić faktoryzację liczb większych niż 264-1.
8. Testowanie czy zadana liczba naturalna jest pierwsza (np. z wykorzystaniem małego twierdzenia
Fermata lub testu Millera-Rabina – obie te metody są probabilistyczne; może inne metody).
9. Sprawdzenie czy zadany zbiór zaszyfrowanych haseł może (i w jakim czasie) zostać „złamany” za
pomocą komputera równoległego jakim jest klaster stacji roboczych. Różne metody łamania haseł
(słownikowa, „brute force”, tablice tęczowe).
10. Równoległe zadanie klasteryzacji hierarchicznej wielowymiarowych danych.
[email protected]