Cage távoli fájl hozzáférési rendszer

A rendszer célja

Támogatja a fájlok távoli elérését a hálózatban lévő számítógépeken. A rendszer "virtuálisan" támogatja az összes alapvető fájlműveletet (létrehozás, törlés, olvasás, írás stb.) tranzakciók (üzenetek) csere révén TCP protokollon keresztül.

Alkalmazási területek

A rendszer funkcionalitása hatékony az alábbi esetekben:

  • natív mobil és beágyazott alkalmazásokban (okostelefonok, fedélzeti irányító rendszerek stb.), amelyek gyors hozzáférést igényelnek távoli szervereken lévő fájlokhoz, várható ideiglenes hálózati megszakítások mellett;
  • terhelt adatbázisokban, amikor a lekérdezések feldolgozása egyes szervereken, míg az adatok tárolása másokon történik;
  • elosztott vállalati hálózatokban információgyűjtéshez és feldolgozáshoz, ahol magas sebességű adatcsere, redundancia és megbízhatóság szükséges;
  • komplex mikroszerviz architektúrával rendelkező rendszerekben, ahol az információ modulok közötti cseréjének késleltetése kritikus fontosságú.

Struktúra

A Cage rendszer (elérhető egy Python 3.7 beta verzióban Windows operációs rendszeren) két fő részből áll:

  1. Cageserver – egy fájlszerver program (funkciókészlet), amely a hálózatban lévő számítógépeken fut, amelyekhez távoli hozzáférés szükséges a fájlokhoz;
  2. osztály Cage egy kliensoldali szoftver metódus könyvtára, amely megkönnyíti a szerverekkel való együttműködés kódolását.

A rendszer használata a kliensoldalon

A Cage osztály metódusai felváltják a hagyományos "rutinszerű" fájlrendszeri műveleteket: létrehozás, megnyitás, bezárás, törlés fájlok, valamint adatok bináris formátumban való olvasása/írása (az adatok pozíciójának és méretének megadásával). Koncepcionálisan ezek a metódusok közel állnak a C nyelv fájlkezelő funkcióihoz, ahol a fájlok megnyitása/bezárása "bemenet-kimeneti csatornákon" történik.

Más szavakkal, a programozó nem a "fájl" objektumok metódusaival (a _io Pythonban), hanem a Cage osztály metódusaival dolgozik.

Amikor egy Cage objektum példányt létrehoz, kezdeti kapcsolatot létesít a szerverrel (vagy több szerverrel), kliensazonosítóval hitelesít és megerősítést kap az összes fájlművelet végrehajtásához szükséges portszámról. Amikor a Cage objektum eltűnik, megparancsolja a szervernek a kapcsolat megszüntetését és a fájlok lezárását. A kapcsolatok megszüntetését a szerverek is kezdeményezhetik.

A rendszer a gyakran használt fájlfragmentumok programok általi gyorsításán alapuló olvasás/írási teljesítmény növelésére szolgál, amely a memóriában (cache-ben) tárolódik.
A kliensprogram bármennyi Cage objektumot használhat, különböző beállításokkal (cache méret, blokkok mérete a szerverrel való kommunikációban stb.).

Egy Cage objektum egyszerre több fájllal is adatot cserélhet több szerveren. A kapcsolati paraméterek (IP-cím vagy DNS, a fő port az azonosításhoz, a fájl elérési útja és neve) az objektum létrehozásakor kerülnek megadásra.

Mivel minden Cage objektum egyszerre több fájllal is működik, a cache-eléshez közös memóriahasználat szükséges. A cache mérete — az oldalak száma és mérete — dinamikusan, a Cage objektum létrehozásakor van beállítva. Például 1 GB cache 1000 db 1 MB-os vagy 10 000 db 100 kB-os oldalt vagy 1 millió 1 kB-os oldalt jelent. Az oldalak méretének és számának megválasztása az egyes alkalmazásesetekhez kapcsolódó konkrét feladat.

Több Cage objektum egyidejű használatával különböző cache-beállításokat határozhatunk meg attól függően, hogy hogyan férünk hozzá az információkhoz különböző fájlokban. Alapértelmezettként a legegyszerűbb cache-elési algoritmus alkalmazásra kerül: a megadott memória kapacitás kimerülése után az új oldalak a régiakat helyettesítik a lehető legkevesebb hívás elve alapján. A cache-elés különösen hatékony, ha statisztikai szempontból egyenetlen a hozzáférés, egyrészt a különböző fájlokhoz, másrészt pedig minden fájl fragmentumához.

A Cage osztály nemcsak a data címeken végzi a be- és kiírást (a pozíció és a tömb hossza megadásával, „helyettesítve” a fájlrendszer műveleteit), hanem alacsonyabb, „fizikai” szinten is — az oldalak száma alapján a memóriában.

A Cage objektumok számára támogatott az eredeti funkció „hibernálás” («álom») – ezeket „össze lehet hajtani” (például, ha megszakad a kapcsolat a szerverekkel, vagy az alkalmazás leáll, stb.) egy helyi dump fájlba az ügyfél oldalán, és gyorsan vissza lehet állítani ebből a fájlból (a kapcsolat helyreállítása után, az alkalmazás újraindításakor). Ez jelentős forgalommegtakarítást tesz lehetővé az ügyfélszoftver működésbe lépésekor ideiglenes „offline” állapot után, mivel a gyakran használt fájlfragmentumok már a gyorsítótárban lesznek.

A Cage körülbelül 3600 sor kódot tartalmaz.

Szerverek felépítésének alapelvei

A Cageserver fájl-szerverek tetszőleges számú porttal indíthatók, ebből az egyik (a „fő”) kizárólag az összes ügyfél hitelesítésére szolgál, a többi pedig az adatok cseréjére. A Cage szerverprogramhoz csupán Python szükséges. Ezenkívül a fájl-szerver számítógép bármilyen egyéb munkát is végezhet.

A szerver elsőként két fő folyamat összességeként indul:

  1. „Kapcsolatok” – folyamat az ügyfelekkel való kapcsolat létrehozására és megszüntetésére a szerver kezdeményezésével;
  2. „Műveletek” – folyamat az ügyfelek fájlokkal kapcsolatos feladatainak (műveleteinek) végrehajtására, valamint a kapcsolat lezárására az ügyfelek parancsai alapján.

Mindkét folyamat nincs szinkronizálva, és végtelen üzenetküldési és -fogadási ciklusokként szerveződnek multiprocesszós sorok, proxy-objektumok, zárolások és socketek alapján.
A „Kapcsolatok” folyamat minden ügyfél számára portot rendel az adatátvitelhez. A portok számát a szerver indításakor kell megadni. A portok és ügyfelek közötti megfeleltetés a folyamatok közötti megosztott proxy-memóriában tárolódik.

A „Műveletek” folyamat támogatja a fájlforrások megosztását, így több különböző ügyfél közösen (kvázi párhuzamosan, mivel a hozzáférést zárolások kezelik) olvashatja ugyanazt a fájlt, ha ezt az kezdeti megnyitáskor az „első” ügyfél engedélyezte.

A fájlok létrehozására/eltávolítására/megnyitására/lezárására vonatkozó parancsok szerveren a „Műveletek” folyamatban szigorúan sorban, a szerver operációs rendszerének fájlrendszerével együttműködve dolgozódnak fel.

Az olvasási/írási műveletek általános felgyorsítása érdekében ezek a műveletek szálakban (threads) valósulnak meg, amelyeket az „Operációk” folyamat hoz létre. A szálak száma jellemzően megegyezik a megnyitott fájlok számával. Az ügyfelektől érkező olvasási/írási feladatok egy közös sorba kerülnek, és az első felszabaduló szál veszi el a feladatot a sor elejéről. Egy speciális logika lehetővé teszi a szerver memóriájában a megírt adatok visszaírásának elkerülését.

Az „Operációk” folyamat figyelemmel kíséri az ügyfelek aktivitását, és megszünteti a kiszolgálásukat, ha úgy parancsolják, vagy ha túllépik a tétlen időkorlátot.

A megbízhatóság biztosítása érdekében a Cageserver naplózza az összes tranzakciót. Egy közös napló tartalmazza az ügyfelektől érkező üzenetek másolatait létrehozási/megnyitási/átnevezési/törlési feladatokkal kapcsolatban. Minden egyes munka fájlhoz külön napló készül, amelyben az adott fájl olvasási és írási feladatainak üzenetei, valamint az írt (új) adathalmazok és a felülírás során megsemmisült adathalmazok találhatók.

Ezek a naplók lehetővé teszik a legújabb módosítások helyreállítását a biztonsági másolatokból, valamint lehetőséget adnak a „visszaállásra” a jelenlegi tartalomról egy korábbi időpontra.

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

Cage távoli fájl hozzáférési rendszer

A Cageserver fájl szerver program indítása

Indításkor a párbeszédpanelben meg kell határozni:
— az alapport az azonosításhoz;
— a tranzakciók hivatalos ügyfeleikkel való cseréjéhez szükséges portok számát (1 vagy több, a számok áramlása az alapport következő számával kezdődik).

A Cage osztály használata

class cage.Cage( cage_name=», pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file=»» )

Ebből az osztályból objektumok születnek, amelyek interakciót valósítanak meg a fájl szerverekkel és tartalmaznak puffer memóriát.

Beállítások

  • cage_name(str) — az objektum azonosításához használt feltételes név, amely az ügyfelek azonosításában segít a szerver oldalán
  • pagesize(egész) — a puffer memória egy oldalának mérete (bájtokban)
  • numpages(egész) — a puffer memória oldalainak száma
  • maxstrlen(egész) — a byte string maximális hossza írási és olvasási műveletek során
  • server_ip(dict) — a használt címek szótára szerverek, ahol a kulcs a szerver feltételes neve (a szerver azonosítója az alkalmazáson belül), az érték pedig egy cím: “ip cím:port” vagy “DNS:port” (a nevek és a valódi címek összehangolása ideiglenes, változtatható)
  • várakozás(egész) — a válasz várakozási ideje a szervertől kapott portok esetében (másodpercben)
  • ébren(boolean) — a objektum létrehozásának módjára vonatkozó zászló (False — ha új objektumot hozunk létre, Igaz — ha az objektum egy korábban «összeomlott» állapotból áll helyre a „hibernálás” művelet segítségével, alapértelmezés szerint Hamis)
  • cache_file(str) — a hibernáláshoz használt fájl neve

Módszerek

Börtön.file_create( szerver, útvonal ) – új fájl létrehozása

Börtön.file_rename( szerver, útvonal, új_név ) – fájl átnevezése

Börtön.file_remove( szerver, útvonal) – fájl törlése

Börtön.open( szerver, útvonal, mod ) – fájl megnyitása

Visszaadja fchannel csatorna száma. A paraméter mod — a fájl megnyitásának módja: „wm” — kizárólagos (olvasás/írás), „rs” — csak olvasás, és más kliensek által megosztott csak olvasásra, „ws” — olvasás/írás, és más kliensek által megosztott csak olvasásra.

Börtön.close (fchannel) – fájl bezárása

Börtön.write (fchannel, kezdet, adat ) – bájt-sorozat írása a fájlba

Börtön.read (fchannel, kezdet, len_data ) – bájt-sorozat olvasása a fájlból

Börtön.put_pages ( fchannel ) – „kiüríti” a pufferből a szerverre az összes módosított oldalt a megadott csatornából. Akkor használatos, ha biztosra akarunk menni, hogy az összes művelet a csatornán fizikailag elmentésre került a fájlban a szerveren.

Börtön.push_all () – „kiüríti” a pufferből a szerverre az összes módosított oldalt minden csatornából a Cage osztály példányához. Akkor használatos, amikor biztosra akarunk menni, hogy az összes művelet az összes csatornán elmentésre került a szerveren.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster