A project célja, hogy egy elosztott, párhuzamos rendszer segítségével - amit akár a felhasználó is definiálhat egy konfigurációs fájl segítségével - közelítse a PI értékét különböző módszerek, formulák felhasználásával.
- Pi megközelítése különböző módszerekkel
- Közelítés összegek iterálásával
- Közelítés számjegyenként
Megjegyzés: A hálózat, mint fogalom, alatt itt a konfigurációs állományban megadott IP címek és hosztnevek halmazát értjük.
- A számítások elosztása a definiált hálózat hosztgépei között
- Saját hálózat definiálásának lehetősége, vagy lokális hálózat használata
- A részszámítások nyomonkövetése élőben
- A kész számításokról jelentése készítése
- A számított értékkel való műveletek elvégzése:
- Mentése lemezre
- A számított érték ellenőrzése ellenőrzött eredmény alapján
- Részsztring keresése a számíott értékben
A megbeszéltek alapján a projectnek egy Maven projectnek kell lennie, így az is lesz a PiSeeker project management eszköze. A használandó pluginokat még nem egyeztettük előadáson/laboron, természetesen kiadáskor módosítom használt eszközök listáját a project README.md fájljában.
A project szerkezeti felépítése, a megbeszéltek alapján, az MVC mintát kell kövesse, az architektúrális stílusa (vékony?) kliens-szerver modellt fogja követni.
A számításokat a kliens fogja kezdeményezni a szerverek felé, viszont lehetőséget szeretnék adni a user-nek, hogy saját munkagépén is elvégezhesse a számítások valamekkora, kívánt részét.
Igazából konkrét mintákat még nem szeretnék megnevezni ebben a tervben, a project feljesztése során esélyes, hogy át kell szervezni néhány alrendszert.
Az egyes számítások eredményét a(z) (al)rendszerek egy-egy JSON állományba fogják menteni, a kliens fogja egyesíteni őket egy monolitikus JSON naplóba a GSON könyvtár segítségével.
Alapvetően én a Java.Net csomagban található Socket és ServerSocket osztályokat használnám a halózati kommunikáció lebonyolítására, (TCP-t szükségesnek tartom, hiszen a lebegőpontos aritmetikában a hiba eleve elkerülhetetlen, ha még csomagokat is vesztenénk azzal "jelentős" hiba adódna hozzá az eredményhez) az egyes kapcsolatokat külön-külön Thread-ben kezelném, hogy ne blokkolódjon az UI thread, se ne blokkolják egymást a Socket szálak.
A project lehetőséget ad arra is, hogy egy SSH alagúton keresztül is elérjünk egy PiSeeker szervert, az alagút kialakításához a JSch projectet használnám. Ezt a gyakorlatban már ki is próbáltam, el tudtam érni a Shrek szervert a jsch_demo echo szerver-kliens project keretein belül.
-
Title: A PI megközelítése
Main Success Scenario:- A rendszer beolvassa a hálózatra vonatkozó konfigurációs állományt.
- A rendszer a számítási feladatok megszerkesztésének lehetőségét felkínálja a felhasználónak.
- A felhasználó beállítja és elfogadja a számításokat meghatározó paramétereket. (módszer, pontosság, iterációs határ, ...)
- A rendszer összegzi az imént beállított konfigurációt, majd megerősítést kér a felhasználótól
- A rendszer kiküldi a számítási alfeladatokat a hálózat tagjai számára, a számítások alatt folyamatosan értesíti a felhasználót az egyes részeredményekről.
- A rendszer, miután elkészültek az utolsó számítások, egyesíti a részeredményeket.
- A felhasználó megkapja PI megközelítését.
- Statisztikai összefoglaló megjelenítése
Extensions:
1a. Nem létezik a konfigurációs fájl- A rendszer megkérdezi a felhasználót, hogy kialakíthat-e egy hálózatot(localhost: 2 szerver) a rendszer, vagy ő maga szeretne definiálni egyet.
1b. A konfigurációs fájl létezik, de sikertelen a parse-olása
- A rendszer ennek tényét jelzi, majd a helyzetet 1a.-ként kezeli
1c. A szerver kapcsolatot építi ki a fájl alapján, amennyiben ez sikertelen a helyzetet 1a.-ként kezeli.
3a. A rendszer biztonsági mentést készít a beállításokról (a JSON lemezre kerül)
1c-6a. Hálózati hiba merül fel
- A rendszer jelezi, amennyiben lehetséges, a hiba okát
- A rendszer újraindul.
8a. A felhasználó keres a PI-ben résztringeket, ha akarja.
8b. A kimutatást a felhasználó kiviheti lemezre, ha akarja.- A rendszer kezeli a fájlnév ütközéseket
-
Title: Adott alrendszer elvégzi a számításokat
Main Success Scenario:- Az alrendszer(szerver) megkapja az elvégzendő számításokat.
- A kapott számításokat átalakítja munkákká.
- Végrehajtja a munkát, minden egyes részeredményt visszaküld a szervernek.
- A munka bevégeztével elmenti egy JSON állományban a kapott értéket, majd ezt visszaküldi a szervernek.
Extensions:
1a-4a. Bármilyen hiba esetén azonnal megsemmisíti önmagát(processzus) maga után hagyva a log fájlt a host adminisztárotai számára.
A követelmény alapján JavaFX framework segítségével kerül megírásra a felhasználói felületek.