Cage Remote File Access System

A rendszer célja

Támogatás a hálózaton lévő számítógépeken lévő fájlokhoz való távoli hozzáféréshez. A rendszer „virtuálisan” támogatja az összes alapvető fájlműveletet (létrehozás, törlés, olvasás, írás stb.) a tranzakciók (üzenetek) cseréjével a TCP protokoll segítségével.

alkalmazások

A rendszer működése a következő esetekben hatékony:

  • a mobil és beágyazott eszközök (okostelefonok, fedélzeti vezérlőrendszerek stb.) natív alkalmazásaiban, amelyek gyors hozzáférést igényelnek a távoli szervereken lévő fájlokhoz a kommunikáció esetleges átmeneti megszakadása esetén (az offline állapotba kerüléskor);
  • betöltött DBMS-ekben, ha egyes szervereken lekérdezésfeldolgozás, másokon adattárolás történik;
  • elosztott vállalati hálózatokban információk gyűjtésére és feldolgozására, amelyek nagy sebességű adatcserét, redundanciát és megbízhatóságot igényelnek;
  • komplex rendszerekben mikroszolgáltatási architektúrával, ahol kritikus a késések a modulok közötti információcserében.

Szerkezet

A Cage rendszer (van egy megvalósítás - béta verzió a Python 3.7-ben Windows rendszeren) két fő részből áll:

  1. Cageserver — egy fájlkiszolgáló program (funkciócsomag), amely a hálózaton lévő számítógépeken fut, amelyek fájljai távoli hozzáférést igényelnek;
  2. osztály Ketrec a kliensszoftverek módszereinek könyvtárával, leegyszerűsítve a szerverekkel való interakció kódolását.

A rendszer használata kliens oldalon

A Cage osztály metódusai helyettesítik a szokásos, „rutin” fájlrendszeri műveleteket: létrehozás, megnyitás, bezárás, törlés fájlokat, valamint adatok olvasása/írása bináris formátumban (az adatok helyzetének és méretének feltüntetésével). Elvileg ezek a módszerek közel állnak a C nyelv fájlfunkcióihoz, ahol a fájlok megnyitása/bezárása a bemeneti/kimeneti „csatornákon” történik.

Más szóval, a programozó nem dolgozik a „fájl” objektumok metódusaival (class _io Pythonban), de a Cage osztály metódusaival.

A Cage objektum példányának létrehozásakor kezdeti kapcsolatot létesít egy szerverrel (vagy több kiszolgálóval), az ügyfélazonosító engedélyezi, és megerősítést kap egy dedikált portszámmal az összes fájlművelethez. Ha egy Cage objektumot törölnek, az utasítja a szervert, hogy hagyja abba a kommunikációt és zárja be a fájlokat. A kommunikáció megszakítását maguk a szerverek is kezdeményezhetik.

A rendszer javítja az olvasási/írási teljesítményt azáltal, hogy a kliensprogramok gyakran használt fájltöredékeit a RAM-gyorsítótárban (puffer) tárolja.
Az ügyfélszoftver tetszőleges számú Cage objektumot használhat különböző beállításokkal (puffermemória mérete, blokkméret a szerverrel való csere során stb.).

Egyetlen Cage objektum több fájllal is kommunikálhat több szerveren. A kommunikációs paraméterek (IP-cím vagy DNS-kiszolgáló, fő port az engedélyezéshez, elérési út és fájlnév) az objektum létrehozásakor kerülnek megadásra.

Mivel minden Cage objektum egyszerre több fájllal is működhet, a pufferelésre a megosztott memóriaterületet használják. Gyorsítótár mérete – az oldalak száma és azok mérete dinamikusan beállítható egy Cage objektum létrehozásakor. Például egy 1 GB-os gyorsítótár 1000, egyenként 1 MB-os oldal, vagy 10 ezer, egyenként 100 KB-os oldal, vagy 1 millió, egyenként 1 KB-os oldal. Az oldalak méretének és számának kiválasztása minden egyes pályázati esetre külön feladat.

Egyszerre több Cage objektumot is használhat különböző puffermemória-beállítások meghatározásához attól függően, hogy a különböző fájlokban hogyan érhető el az információ. Alapvetően a legegyszerűbb pufferelési algoritmus használatos: adott mennyiségű memória kimerülése után az új oldalak kiszorítják a régieket a visszavonás elve szerint, minimális hozzáférési számmal. A pufferelés különösen hatékony egyenetlen (statisztikai értelemben vett) megosztott hozzáférés esetén, egyrészt különböző fájlokhoz, másrészt az egyes fájlok töredékeihez.

A Cage osztály nem csak adatcímekkel (a tömb pozíciójának és hosszának jelzésével, a fájlrendszer műveleteinek „cseréjével”) támogatja az I/O-t, hanem alacsonyabb, „fizikai” szinten is – a puffermemória oldalszámai alapján.

Az eredeti funkció támogatott a Cage objektumoknál "hibernálás" ("alvó") - "összecsukhatók" (például a kiszolgálókkal való kapcsolat megszakadása esetén, vagy ha az alkalmazás leáll, stb.) egy helyi dump fájlba a kliens oldalon, és gyorsan visszaállíthatók ezt a fájlt (a kommunikáció folytatása után, amikor újraindítja az alkalmazást). Ez lehetővé teszi a forgalom jelentős csökkentését a kliensprogram aktiválásakor, miután ideiglenesen „offline” lett, mivel a gyakran használt fájltöredékek már a gyorsítótárban lesznek.

A ketrec körülbelül 3600 kódsorból áll.

A szerverépítés elvei

A Cageserver fájlszerverek tetszőleges számú porttal futtathatók, amelyek közül az egyik („main”) csak az összes kliens jogosultságára, a többi adatcserére szolgál. A Cage szerver programhoz csak Python szükséges. Ezzel párhuzamosan a fájlkiszolgálóval rendelkező számítógép bármilyen más munkát is végezhet.

A szerver kezdetben két fő folyamat gyűjteményeként indul:

  1. "Kapcsolatok" – a kliensekkel való kommunikáció létrehozásának és a szerver kezdeményezésére történő megszakításának műveleteinek végrehajtási folyamata;
  2. "Tevékenységek" – a kliensek feladatainak (műveleteinek) végrehajtására szolgáló folyamat a fájlokkal való munkavégzéshez, valamint a kommunikációs munkamenetek kliens parancsok alapján történő lezárása.

Mindkét folyamat nincs szinkronizálva, és üzenetek fogadásának és küldésének végtelen hurokba szerveződik, többfolyamatos sorok, proxy objektumok, zárak és socketek alapján.
A Connection folyamat minden ügyfél számára kijelöl egy portot az adatok fogadására és továbbítására. A portok száma a szerver indításakor kerül beállításra. A portok és a kliensek közötti leképezést a folyamatok közötti megosztott proxy-memória tárolja.

A műveleti folyamat támogatja a fájlerőforrások megosztását, így több különböző kliens is megoszthatja (kvázi párhuzamos, mivel a hozzáférést zárak vezérlik) olvassa be az adatokat egy fájlból, ha ez megengedett volt, amikor az "első" kliens megnyitotta.

A fájlok létrehozására/törlésére/megnyitására/bezárására szolgáló parancsok feldolgozása magában a „Műveletek” folyamatban történik, szigorúan egymás után, a kiszolgáló operációs rendszerének fájlalrendszerének használatával.

Az olvasás/írás általános felgyorsítása érdekében ezeket a műveleteket a „Műveletek” folyamat által létrehozott szálakban hajtják végre. A szálak száma általában megegyezik a megnyitott fájlok számával. Az ügyfelek olvasási/írási feladatai az általános sorba kerülnek, és az első szabad szál veszi át a feladatot a fejéből. A speciális logika lehetővé teszi az adatátírási műveletek kiiktatását a szerver RAM-jában.

A műveleti folyamat figyeli az ügyfelek tevékenységét, és leállítja a kiszolgálást akár parancsaikra, akár az inaktivitási időtúllépés túllépése esetén.

A megbízhatóság érdekében a Cageserver minden tranzakcióról naplót vezet. Egy általános napló tartalmazza a kliensektől származó üzenetek másolatait a fájlok létrehozására/megnyitására/átnevezésére/törlésére vonatkozó feladatokkal. Minden munkafájlhoz külön napló készül, amelyben rögzítésre kerülnek az ebbe a munkafájlba történő adatolvasási és -írási feladatokat tartalmazó üzenetek másolatai, valamint az írott (új) adatok és a felülírás (írás) során megsemmisült adatok tömbjei. új adatok „felül” a régiek).

Ezek a naplók lehetővé teszik a biztonsági másolatok új módosításainak visszaállítását és a jelenlegi tartalom visszaállítását egy múltbeli pontra.

A Cageserver körülbelül 3100 kódsorból áll.

Cage Remote File Access System

A Cageserver fájlkiszolgáló program elindítása

Indításkor a párbeszédpanelen meg kell adnia:
— fő engedélyezési kikötő;
— a feljogosított ügyfelekkel történő tranzakciók cseréjére szolgáló portok száma (1-től vagy többtől a számkészlet a fő portszám melletti számtól kezdődik).

A ketrec osztály használata

osztály ketrec.Ketrec( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )

Ebből az osztályból olyan objektumok jönnek létre, amelyek kölcsönhatásba lépnek a fájlkiszolgálókkal és puffermemóriát tartalmaznak.

Paraméterek

  • ketrec_neve(str) - az objektum feltételes neve, amely az ügyfelek azonosítására szolgál a szerver oldalon
  • oldalméret(int) – a puffermemória egy oldalának mérete (byte-ban)
  • számlapok(int) — a puffer memória lapjainak száma
  • maxstrlen(int) - egy bájtkarakterlánc maximális hossza írási és olvasási műveletekben
  • szerver_ip(diktálja) - egy szótár a használt szerverek címeivel, ahol a kulcs a szerver feltételes neve (kiszolgálóazonosító az alkalmazáson belül), az érték pedig egy karakterlánc a következő címmel: „ip address:port” vagy „DNS: port” (a nevek és valós címek összehasonlítása ideiglenes, módosítható)
  • várjon(int) — várakozási idő a szervertől a portok fogadásakor (másodpercben)
  • ébren(logikai) — az objektum létrehozásának jelzője (Hamis - ha új objektum jön létre, Igaz - ha egy objektum egy korábban „összecsukott” objektumból jön létre - a „hibernálás” művelettel, alapértelmezés szerint False)
  • cache_file(str) - hibernált fájlnév

mód

Ketrec.file_create( szerver, elérési út ) – új fájl létrehozása

Ketrec.fájl_átnevezése( szerver, elérési út, új_név ) – nevezze át a fájlt

Ketrec.file_remove( szerver, elérési út) - fájl törlése

Ketrec.nyitva( szerver, elérési út, mod ) - fájl megnyitása

Visszatér fcsatorna csatorna száma. Paraméter mod - ez a fájlmegnyitási mód: "wm" - exkluzív (olvasás/írás), "rs" - csak olvasható, és csak más kliensek számára megosztott, "ws" - olvasás/írás, és megosztás csak olvasásra más ügyfelek.

Ketrec.közel (fcsatorna) – zárja be a fájlt

Ketrec.ír (fchannel, start, data ) – bájt karakterlánc írása egy fájlba

Ketrec.olvas (fchannel, start, len_data ) – bájtkarakterlánc olvasása fájlból

Ketrec.put_pages ( fcsatorna ) – „leküldi” a pufferből a szerverre a megadott csatorna összes módosított oldalát. Az algoritmus azon pontjain használatos, amikor meg kell bizonyosodni arról, hogy a csatornán végrehajtott összes művelet fizikailag el van mentve egy fájlba a szerveren.

Ketrec.push_all () – „leküldi” a pufferből a szerverre az összes csatorna összes oldalát a Cage osztály egy példányához, amely módosult. Akkor használatos, ha meg kell győződnie arról, hogy az összes csatornán minden műveletet elmentett a szerver.

Forrás: will.com

Hozzászólás