Systém vzdáleného přístupu k souborům Cage

Účel systému

Podpora vzdáleného přístupu k souborům na počítačích v síti. Systém "virtuálně" podporuje všechny základní souborové operace (vytváření, odstraňování, čtení, zápis a další) prostřednictvím výměny transakcí (zpráv) podle protokolu TCP.

Oblasti použití

Funkcionalita systému je efektivní v následujících případech:

  • v nativních aplikacích pro mobilní a embedded zařízení (smartphony, palubní řídicí systémy atd.), které vyžadují rychlý přístup k souborům na vzdálených serverech za podmínek pravděpodobných dočasných výpadků spojení (při odpojení);
  • v zatížených databázových systémech, pokud je zpracování dotazů prováděno na jedněch serverech, zatímco ukládání dat – na jiných;
  • ve distribuovaných firemních sítích sběru a zpracování informací, které vyžadují vysokou rychlost výměny dat, zálohování a spolehlivost;
  • v komplikovaných systémech s microservices architekturou, kde zpoždění v výměně informací mezi moduly má zásadní význam.

Struktura

Systém Cage (je k dispozici implementace – beta verze na Python 3.7 v OS Windows) zahrnuje dvě hlavní části:

  1. Cageserver – program souborového serveru (balíček funkcí), který je spuštěn na počítačích v síti, k souborům, k nimž je potřebný vzdálený přístup;
  2. třída Cage s knihovnou metod pro klientské softwary, která usnadňuje kódování interakce se servery.

Použití systému na straně klientů

Metody třídy Cage nahrazují běžné, "rutinní" operace souborového systému: vytváření, otevírání, zavírání, odstraňování souborů, jakož i čtení/zápis dat v binárním formátu (s uvedením pozice a velikosti dat). Konceptuálně jsou tyto metody přiblíženy k souborovým funkcím jazyka C, kde se otevírání/zavírání souborů provádí "na kanálech" vstupu a výstupu.

Jinými slovy, programátor pracuje ne s metodami "souborových" objektů (třída _io v Pythonu), ale s metodami třídy Cage.

Pri vytváraní inštancie objektu Cage sa nadviaže počiatočné spojenie so serverom (alebo viacerými servermi), prejde autorizáciou podľa ID klienta a získa potvrdenie s číslom prideleného portu pre vykonávanie všetkých súborových operácií. Pri odstraňovaní objektu Cage sa serveru vydáva príkaz na ukončenie spojenia a zatvorenie súborov. Ukončenie spojenia môžu iniciovať aj samotné servery.

Systém zvyšuje výkon čítania/zápisu na základe vyrovnávacej pamäte často používaných fragmentov súborov v klientských programoch v cache (vyrovnávacej pamäti) operačnej pamäte.
Klientský softvér môže používať akýkoľvek počet objektov Cage s rôznymi nastaveniami (objem vyrovnávacej pamäte, veľkosť blokov pri výmene so serverom atď.).

Jeden objekt Cage môže vymieňať dáta s viacerými súbormi na viacerých serveroch. Parametre pre spojenie (IP adresa alebo DNS server, primárny port pre autorizáciu, cesta a názov súboru) sú nastavené pri vytváraní objektu.

Keďže každý objekt Cage môže súčasne pracovať s mnohými súbormi, pre vyrovnávaciu pamäť sa používa spoločný priestor pamäte. Veľkosť cache – počet strán a ich veľkosť, sa určuje dynamicky pri vytváraní objektu Cage. Napríklad, cache s veľkosťou 1 GB je 1000 strán po 1 MB alebo 10 000 strán po 100 KB alebo 1 milión strán po 1 KB. Výber veľkosti a počtu strán je konkrétnou úlohou pre každý aplikačný prípad.

Môže sa súčasne používať viacero objektov Cage, aby sa určili rôzne nastavenia vyrovnávacej pamäte v závislosti od charakteristík prístupu k informáciám v rôznych súboroch. Ako základný algoritmus sa aplikuje najjednoduchší algoritmus vyrovnávacej pamäte: po vyčerpaní zadaného objemu pamäte, nové stránky nahrádzajú staré na princípe vyraďovania s minimálnym počtom prístupov. Vyrovnávanie pamäte je obzvlášť efektívne v prípade nerovnomerného (v štatistickom zmysle) spoločne prístupu, jednak k rôznym súborom, a jednak k fragmentom každého súboru.

Trieda Cage podporuje vstup/výstup nielen podľa adries dát (s určením pozície a dĺžky poľa, „nahrádzajúc“ operácie súborového systému), ale aj na nižšej, „fyzickej“ úrovni – podľa čísel strán v vyrovnávacej pamäti.

Pre objekty Cage sa podporuje originálna funkcia „hibernácie“ («suspend») – it can be «collapsed» (for example, in case of connection loss with the servers, or when stopping the application, etc.) to a local dump file on the client side and quickly restored from this file (after reconnecting, when re-launching the application). This allows for significant traffic reduction when reactivating the client program after a temporary «offline» state, as frequently used file fragments will already be in cache.

Cage is about 3600 lines of code.

Principles of server construction

Cageserver file servers can be launched with any number of ports, one of which (the «main» one) is used only for authorizing all clients, while the others are for data exchange. The Cage server program requires only Python. Simultaneously, the computer with the file server can perform any other tasks.

The server starts as a combination of two main processes:

  1. «Connections» – a process for establishing connections with clients and terminating them at the server's initiative;
  2. «Operations» – a process for executing tasks (operations) for clients working with files, as well as for closing communication sessions upon client commands.

Both processes are not synchronized and are organized as endless loops for receiving and sending messages based on multiprocess queues, proxy objects, locks, and sockets.
The «Connections» process allocates a port for each client for data transmission. The number of ports is specified when starting the server. The correspondence between ports and clients is stored in shared proxy memory between processes.

The «Operations» process supports the division of file resources, allowing multiple different clients to jointly (quasi-parallel, as access is managed by locks) read data from a single file, if this was permitted when it was initially opened by the «first» client.

Command processing for creating/deleting/opening/closing files on serveri is performed in the «Operations» process strictly sequentially using the server's OS file subsystem.

Pre zvýšenie rýchlosti čítania/zápisu sa tieto operácie vykonávajú v vláknach (threads), ktoré generuje proces „Operácie“. Počet vlákien je zvyčajne rovný počtu otvorených súborov. Zadania na čítanie/zápis od klientov sú odosielané do spoločnej fronty a prvé uvoľnené vlákno preberá úlohu z jej hlavy. Špeciálna logika umožňuje vylúčiť operácie prepísania údajov v operačnej pamäti servera.

Proces „Operácie“ sleduje aktivitu klientov a zastavuje ich obsluhu buď na ich povely, alebo pri prekročení časového limitu neaktivity.

Na zabezpečenie spoľahlivosti Cageserver vedie záznamy všetkých transakcií. Jeden spoločný záznam obsahuje kópie správ od klientov so zadaním na vytvorenie/otvorenie/prezmenu/odstránenie súborov. Pre každý pracovný súbor sa vytvorí samostatný záznam, v ktorom sú zaznamenané kópie správ so zadaním na čítanie a zápis údajov v tomto pracovnom súbore, ako aj polia zapisovaných (nových) údajov a polia údajov, ktoré boli zničené pri prepise (zápise nových údajov „nad“ starými).

Tieto záznamy umožňujú ako obnovu nových zmien v zálohovaní, tak aj „návrat“ od aktuálneho obsahu k požadovanému okamihu v minulosti.

Cageserver má približne 3100 riadkov kódu.

Systém vzdáleného přístupu k souborům Cage

Spustenie programu súborového servera Cageserver

Pri spustení v dialógu je potrebné určiť:
— hlavný port pre autorizáciu;
— počet portov na výmenu transakcií s autorizovanými klientmi (od 1 a viac, pool čísel začína s ďalším po čísle hlavného portu).

Použitie triedy Cage

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

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

Parametre

  • cage_name(str) — podmienené meno objektu, ktoré sa používa pri identifikácii klientov na strane servera
  • pagesize(int) — veľkosť jednej stránky vyrovnávacej pamäte (v bajtoch)
  • numpages(int) — počet strán 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žívanými serverov, kde je kľúčom podmienené meno servera (id servera v aplikácii), a hodnotou je reťazec s adresou: “ip adresa:port” alebo “DNS:port” (mapovanie mien a reálnych adries je dočasné, je možné ho meniť)
  • čakať(int) — čas čakania na odpoveď zo servera pri získavaní portov (v sekundách)
  • prebudiť(boolean) — flag spôsobu vytvárania objektu (False — ak sa vytvára nový objekt, Pravda — ak sa objekt vytvára zo skôr „zbaleného“ — použitím operácie „hibernácia“, predvolene Nepravda)
  • cache_file(str) — názov súboru pre hibernáciu

Metódy

Cage.file_create( server, cesta ) – vytvoriť nový súbor

Cage.file_rename( server, cesta, nové_meno ) – premenovať súbor

Cage.file_remove( server, cesta) – odstrániť súbor

Cage.open( server, cesta, mod ) – otvoriť súbor

Vracia fchannel číslo kanála. Parametr mod — je režim otvorenia súboru: „wm“ — monopolný (čítanie/zápis), „rs“ — len na čítanie, a zdieľaný len na čítanie inými klientami, „ws“ — čítanie/zápis, a zdieľaný len pre čítanie inými klientmi.

Cage.zatvoriť (fchannel) – zavrieť súbor

Cage.write (fchannel, začiatok, dáta ) – zapísať bajtový reťazec do súboru

Cage.read (fchannel, začiatok, dĺžka_dát ) – prečítať bajtový reťazec zo súboru

Cage.put_pages ( fchannel ) – „vytiahne“ z bufferu na server všetky stránky určeného kanála, ktoré boli modifikované. Používa sa v tých bodoch algoritmu, keď je potrebné byť si istý, že všetky operácie na kanáli sú fyzicky uložené v súbore na serveri.

Cage.push_all () – „vytiahne“ z bufferu na server všetky stránky všetkých kanálov pre inštanciu triedy Cage, ktoré boli modifikované. Používa sa, keď je potrebné byť si istý, že všetky operácie na všetkých kanáloch sú uložené na serveri.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster