Systém vzdialeného prístupu k súborom v klietke

Účel systému

Podpora vzdialeného prístupu k súborom na počítačoch v sieti. Systém „virtuálne“ podporuje všetky základné operácie so súbormi (vytváranie, mazanie, čítanie, zápis atď.) výmenou transakcií (správ) pomocou protokolu TCP.

aplikácie

Funkčnosť systému je účinná v nasledujúcich prípadoch:

  • v natívnych aplikáciách pre mobilné a vstavané zariadenia (smartfóny, palubné riadiace systémy atď.), ktoré vyžadujú rýchly prístup k súborom na vzdialených serveroch v prípade možných dočasných prerušení komunikácie (s prechodom do režimu offline);
  • v načítaných DBMS, ak sa spracovanie dotazov vykonáva na niektorých serveroch a ukladanie údajov sa vykonáva na iných;
  • v distribuovaných podnikových sieťach na zber a spracovanie informácií, ktoré si vyžadujú vysokorýchlostnú výmenu dát, redundanciu a spoľahlivosť;
  • v zložitých systémoch s mikroservisnou architektúrou, kde sú oneskorenia vo výmene informácií medzi modulmi kritické.

Štruktúra

Systém Cage (existuje implementácia - beta verzia v Pythone 3.7 na Windows) obsahuje dve hlavné časti:

  1. Cageserver — program súborového servera (balík funkcií), ktorý beží na počítačoch v sieti, ktorých súbory vyžadujú vzdialený prístup;
  2. trieda Klietka s knižnicou metód pre klientsky softvér, čo zjednodušuje kódovanie interakcie so servermi.

Používanie systému na strane klienta

Metódy triedy Cage nahrádzajú obvyklé, „rutinné“ operácie súborového systému: vytváranie, otváranie, zatváranie, mazanie súbory, ako aj čítanie/zápis dát v binárnom formáte (s uvedením polohy a veľkosti údajov). Koncepčne sú tieto metódy blízke súborovým funkciám jazyka C, kde sa otváranie/zatváranie súborov vykonáva „na kanáloch“ vstupu/výstupu.

Inými slovami, programátor nepracuje s metódami „súborových“ objektov (class _io v Pythone), ale s metódami triedy Cage.

Keď sa vytvorí inštancia objektu Cage, vytvorí sa počiatočné spojenie so serverom (alebo niekoľkými servermi), je autorizované ID klienta a dostane potvrdenie s vyhradeným číslom portu pre všetky operácie so súbormi. Keď je objekt Cage vymazaný, dáva serveru pokyn, aby prestal komunikovať a zatvoril súbory. Ukončenie komunikácie môžu iniciovať aj samotné servery.

Systém zlepšuje výkon čítania/zápisu ukladaním často používaných fragmentov súborov klientskych programov do vyrovnávacej pamäte RAM (buffer).
Klientsky softvér môže používať ľubovoľný počet objektov Cage s rôznymi nastaveniami (veľkosť vyrovnávacej pamäte, veľkosť bloku pri výmene so serverom atď.).

Jeden objekt Cage môže komunikovať s viacerými súbormi na viacerých serveroch. Parametre komunikácie (IP adresa alebo DNS server, hlavný port pre autorizáciu, cesta a názov súboru) sa zadávajú pri vytváraní objektu.

Keďže každý objekt Cage môže pracovať s viacerými súbormi súčasne, na ukladanie do vyrovnávacej pamäte sa používa priestor zdieľanej pamäte. Veľkosť vyrovnávacej pamäte – počet strán a ich veľkosť sa nastavuje dynamicky pri vytváraní objektu Cage. Napríklad vyrovnávacia pamäť s veľkosťou 1 GB predstavuje 1000 1 stránok po 10 MB alebo 100 1 stránok po 1 kB alebo XNUMX milión stránok po XNUMX kB. Výber veľkosti a počtu strán je špecifickou úlohou pre každý prípad aplikácie.

Môžete použiť viacero objektov Cage súčasne na definovanie rôznych nastavení vyrovnávacej pamäte v závislosti od spôsobu prístupu k informáciám v rôznych súboroch. Ako základný sa používa najjednoduchší algoritmus vyrovnávacej pamäte: po vyčerpaní daného množstva pamäte nové stránky nahradia staré podľa princípu vyraďovania s minimálnym počtom prístupov. Ukladanie do vyrovnávacej pamäte je obzvlášť účinné v prípade nerovnomerného (v štatistickom zmysle) zdieľaného prístupu, po prvé, k rôznym súborom a po druhé, k fragmentom každého súboru.

Trieda Cage podporuje I/O nielen podľa dátových adries (udávajúce polohu a dĺžku poľa, „nahrádzajúce“ operácie súborového systému), ale aj na nižšej, „fyzickej“ úrovni – číslami stránok vo vyrovnávacej pamäti.

Pôvodná funkcia je podporovaná pre objekty Cage "hibernácia" („spánok“) – možno ich „zbaliť“ (napríklad v prípade straty spojenia so servermi alebo pri zastavení aplikácie atď.) do lokálneho súboru výpisu na strane klienta a rýchlo obnoviť z tento súbor (po obnovení komunikácie, keď reštartujete aplikáciu). To umožňuje výrazne znížiť návštevnosť pri aktivácii klientskeho programu po dočasnom prechode do režimu „offline“, pretože často používané fragmenty súborov už budú vo vyrovnávacej pamäti.

Cage má asi 3600 riadkov kódu.

Zásady konštrukcie servera

Súborové servery Cageserver je možné prevádzkovať s ľubovoľným počtom portov, z ktorých jeden („hlavný“) slúži len na autorizáciu všetkých klientov, ostatné slúžia na výmenu dát. Serverový program Cage vyžaduje iba Python. Súčasne môže počítač so súborovým serverom vykonávať akúkoľvek inú prácu.

Server sa spočiatku spúšťa ako súbor dvoch hlavných procesov:

  1. "spojenia" – proces vykonávania operácií nadviazania komunikácie s klientmi a jej ukončenia z iniciatívy servera;
  2. "operácie" – proces vykonávania úloh (operácií) klientov na prácu so súbormi, ako aj na uzatváranie komunikačných relácií na základe príkazov klienta.

Oba procesy nie sú synchronizované a sú organizované ako nekonečné slučky prijímania a odosielania správ na základe viacprocesových frontov, proxy objektov, zámkov a soketov.
Proces pripojenia prideľuje port pre každého klienta na príjem a prenos údajov. Počet portov sa nastavuje pri spustení servera. Mapovanie medzi portami a klientmi je uložené v medziprocesovo zdieľanej proxy pamäti.

Proces Operations podporuje zdieľanie súborových prostriedkov, takže viacero rôznych klientov môže zdieľať (kvázi-paralelné, keďže prístup je riadený zámkami) čítať údaje z jedného súboru, ak to bolo povolené pri prvom otvorení „prvým“ klientom.

Spracovanie príkazov na vytvorenie/vymazanie/otvorenie/zatvorenie súborov na serveri sa vykonáva v samotnom procese „Operácie“ striktne sekvenčne pomocou súborového subsystému OS servera.

Na všeobecné zrýchlenie čítania/zápisu sa tieto operácie vykonávajú vo vláknach vytvorených procesom „Operácie“. Počet vlákien sa zvyčajne rovná počtu otvorených súborov. Úlohy čítania/zápisu od klientov sú zaradené do všeobecného frontu a prvé voľné vlákno preberá úlohu z hlavy. Špeciálna logika vám umožňuje eliminovať operácie prepisovania údajov v RAM servera.

Proces Operations monitoruje aktivitu klientov a prestane ich obsluhovať buď na základe ich príkazov, alebo po prekročení časového limitu nečinnosti.

Aby bola zaistená spoľahlivosť, Cageserver uchováva záznamy o všetkých transakciách. Jeden všeobecný protokol obsahuje kópie správ od klientov s úlohami vytvoriť/otvoriť/premenovať/vymazať súbory. Pre každý pracovný súbor je vytvorený samostatný protokol, v ktorom sú zaznamenané kópie správ s úlohami na čítanie a zápis údajov do tohto pracovného súboru, ako aj polia zapísaných (nových) údajov a polia údajov, ktoré boli zničené pri prepisovaní (zápise nové údaje „navrch“ starých). ).

Tieto protokoly poskytujú možnosť obnoviť nové zmeny v zálohách a vrátiť aktuálny obsah späť do minulosti.

Cageserver má asi 3100 riadkov kódu.

Systém vzdialeného prístupu k súborom v klietke

Spustenie programu súborového servera Cageserver

Pri spustení musíte v dialógovom okne definovať:
— hlavný prístav na autorizáciu;
— počet portov na výmenu transakcií s autorizovanými klientmi (od 1 alebo viacerých, skupina čísel začína od čísla vedľa hlavného čísla portu).

Použitie triedy Cage

trieda klietka.Klietka( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )

Z tejto triedy sa vytvárajú objekty, ktoré interagujú so súborovými servermi a obsahujú vyrovnávaciu pamäť.

Parametre

  • meno_klietky(str) - podmienený názov objektu, ktorý sa používa na identifikáciu klientov na strane servera
  • veľkosť strán(int) — veľkosť jednej stránky vyrovnávacej pamäte (v bajtoch)
  • numpages(int) — počet stránok vyrovnávacej pamäte
  • maxstrlen(int) - maximálna dĺžka bajtového reťazca pri operáciách zápisu a čítania
  • server_ip(dict) - slovník s adresami použitých serverov, kde kľúčom je podmienený názov servera (ID servera v aplikácii) a hodnota je reťazec s adresou: „ip adresa:port“ alebo „DNS: port“ (porovnanie mien a skutočných adries je dočasné, možno ho zmeniť)
  • počkať(int) — čas čakania na odpoveď zo servera pri prijímaní portov (v sekundách)
  • prebudiť(boolean) — príznak spôsobu vytvorenia objektu (Falošný - ak sa vytvorí nový objekt, Pravdivý - ak je objekt vytvorený z predtým „zbaleného“ objektu – pomocou operácie „hibernácia“, štandardne False)
  • cache_file(str) - názov súboru pre hibernáciu

metódy

Klietka.file_create( server, cesta ) – vytvorte nový súbor

Klietka.file_rename( server, cesta, nový_názov ) – premenovať súbor

Klietka.file_remove( server, cesta) - odstránenie súboru

Klietka.otvoriť( server, cesta, mod ) - otvorený súbor

Vráti sa fchannel číslo kanála. Parameter mod — toto je režim otvárania súboru: „wm“ – exkluzívny (čítanie/zápis), „rs“ – iba na čítanie a zdieľaný iba na čítanie inými klientmi, „ws“ – čítanie/zápis a zdieľaný iba na čítanie len inými klientmi.

Klietka.zavrieť (fchannel) – zatvorte súbor

Klietka.písať (fchannel, begin, data ) – zápis bajtového reťazca do súboru

Klietka.čítať (fchannel, begin, len_data ) – načítanie bajtového reťazca zo súboru

Klietka.put_pages ( fchannel ) – „presunie“ z vyrovnávacej pamäte na server všetky stránky určeného kanála, ktoré boli upravené. Používa sa v tých bodoch algoritmu, keď potrebujete mať istotu, že všetky operácie na kanáli sú fyzicky uložené v súbore na serveri.

Klietka.push_all () – „presunie“ z vyrovnávacej pamäte na server všetky stránky všetkých kanálov pre inštanciu triedy Cage, ktoré boli upravené. Používa sa, keď potrebujete mať istotu, že všetky operácie na všetkých kanáloch sú uložené na serveri.

Zdroj: hab.com

Pridať komentár