Skip to content

Instantly share code, notes, and snippets.

@cant0r
Last active March 29, 2020 15:08
Show Gist options
  • Save cant0r/9e59463ac993cf633e53f9c9de0dcbb9 to your computer and use it in GitHub Desktop.
Save cant0r/9e59463ac993cf633e53f9c9de0dcbb9 to your computer and use it in GitHub Desktop.
Initial plan for a possible uni project of mine

PiSeeker


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.

Features

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 project kivitelezéséről

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.

Architektúrális minta, stílus

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.

Tervezési minták

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.

Adatok tárolása

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.

A szerverek elérése

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.

Use Cases

  1. Title: A PI megközelítése
    Main Success Scenario:

    1. A rendszer beolvassa a hálózatra vonatkozó konfigurációs állományt.
    2. A rendszer a számítási feladatok megszerkesztésének lehetőségét felkínálja a felhasználónak.
    3. 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, ...)
    4. A rendszer összegzi az imént beállított konfigurációt, majd megerősítést kér a felhasználótól
    5. 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.
    6. A rendszer, miután elkészültek az utolsó számítások, egyesíti a részeredményeket.
    7. A felhasználó megkapja PI megközelítését.
    8. 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
  2. Title: Adott alrendszer elvégzi a számításokat
    Main Success Scenario:

    1. Az alrendszer(szerver) megkapja az elvégzendő számításokat.
    2. A kapott számításokat átalakítja munkákká.
    3. Végrehajtja a munkát, minden egyes részeredményt visszaküld a szervernek.
    4. 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.

Felhasználói felületek

A követelmény alapján JavaFX framework segítségével kerül megírásra a felhasználói felületek.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment