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]