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

Úč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í operace se soubory (vytváření, mazání, čtení, zápis atd.) výměnou transakcí (zpráv) pomocí protokolu TCP.

Aplikace

Funkčnost systému je účinná v následujících případech:

  • v nativních aplikacích pro mobilní a vestavěná zařízení (smartphony, palubní řídicí systémy atd.), které vyžadují rychlý přístup k souborům na vzdálených serverech při možném dočasném přerušení komunikace (s přechodem do režimu offline);
  • v načtených DBMS, pokud se na některých serverech provádí zpracování dotazů a na jiných se provádí ukládání dat;
  • v distribuovaných podnikových sítích pro sběr a zpracování informací, které vyžadují vysokorychlostní výměnu dat, redundanci a spolehlivost;
  • ve složitých systémech s architekturou mikroslužeb, kde jsou kritická zpoždění ve výměně informací mezi moduly.

Struktura

Systém Cage (existuje implementace - beta verze v Pythonu 3.7 na Windows) obsahuje dvě hlavní části:

  1. Cageserver — program souborového serveru (balíček funkcí), který běží na počítačích v síti, jejichž soubory vyžadují vzdálený přístup;
  2. třída Klec s knihovnou metod pro klientský software, což zjednodušuje kódování interakce se servery.

Používání systému na straně klienta

Metody třídy Cage nahrazují obvyklé, „rutinní“ operace souborového systému: vytvoření, otevření, uzavření, mazání soubory, stejně jako čtení/zápis dat v binárním formátu (s uvedením polohy a velikosti dat). Koncepčně jsou tyto metody blízké souborovým funkcím jazyka C, kde se otevírání/zavírání souborů provádí „na kanálech“ vstupu/výstupu.

Jinými slovy, programátor nepracuje s metodami objektů „file“ (class _io v Pythonu), ale s metodami třídy Cage.

Když je vytvořena instance objektu Cage, naváže počáteční spojení se serverem (nebo několika servery), je autorizován pomocí ID klienta a obdrží potvrzení s přiděleným číslem portu pro všechny operace se soubory. Když je objekt Cage odstraněn, dá serveru pokyn, aby přestal komunikovat a uzavřel soubory. Ukončení komunikace mohou také iniciovat samotné servery.

Systém zlepšuje výkon čtení/zápisu ukládáním často používaných fragmentů souborů klientských programů do mezipaměti RAM (buffer).
Klientský software může používat libovolný počet objektů Cage s různým nastavením (velikost vyrovnávací paměti, velikost bloku při výměně se serverem atd.).

Jeden objekt Cage může komunikovat s více soubory na více serverech. Parametry komunikace (IP adresa nebo DNS server, hlavní port pro autorizaci, cesta a název souboru) se zadávají při vytváření objektu.

Protože každý objekt Cage může pracovat s více soubory současně, používá se pro ukládání do vyrovnávací paměti sdílený paměťový prostor. Velikost cache – počet stránek a jejich velikost se nastavuje dynamicky při vytváření objektu Cage. Například mezipaměť 1 GB je 1000 stránek po 1 MB nebo 10 tisíc stránek po 100 kB nebo 1 milion stránek po 1 kB. Výběr velikosti a počtu stránek je specifickým úkolem pro každý případ použití.

Můžete použít více objektů Cage současně k definování různých nastavení vyrovnávací paměti v závislosti na způsobu přístupu k informacím v různých souborech. Jako základní je použit nejjednodušší vyrovnávací algoritmus: po vyčerpání zadaného množství paměti nové stránky nahrazují staré podle principu vyřazení s minimálním počtem přístupů. Ukládání do vyrovnávací paměti je zvláště účinné v případě nerovnoměrného (ve statistickém smyslu) sdíleného přístupu za prvé k různým souborům a za druhé k fragmentům každého souboru.

Třída Cage podporuje I/O nejen pomocí datových adres (uvádějících polohu a délku pole, „nahrazující“ operace souborového systému), ale také na nižší, „fyzické“ úrovni – podle čísel stránek ve vyrovnávací paměti.

Původní funkce je podporována pro objekty Cage "hibernace" („uspání“) – lze je „sbalit“ (například v případě ztráty spojení se servery nebo při zastavení aplikace atd.) do souboru místního výpisu na straně klienta a rychle obnovit z tento soubor (po obnovení komunikace, když restartujete aplikaci). To umožňuje výrazně snížit provoz při aktivaci klientského programu po dočasném přechodu do režimu „offline“, protože často používané fragmenty souborů již budou v mezipaměti.

Cage má asi 3600 řádků kódu.

Principy konstrukce serveru

Souborové servery Cageserver lze provozovat s libovolným počtem portů, z nichž jeden („hlavní“) slouží pouze pro autorizaci všech klientů, zbytek slouží k výměně dat. Serverový program Cage vyžaduje pouze Python. Paralelně může počítač se souborovým serverem vykonávat jakoukoli jinou práci.

Server se zpočátku spouští jako soubor dvou hlavních procesů:

  1. "Spojení" – proces provádění operací navázání komunikace s klienty a její ukončení z iniciativy serveru;
  2. "operace" – proces provádění úloh (operací) klientů pro práci se soubory a také pro uzavírání komunikačních relací na základě příkazů klienta.

Oba procesy nejsou synchronizovány a jsou organizovány jako nekonečné smyčky přijímání a odesílání zpráv na základě víceprocesových front, proxy objektů, zámků a soketů.
Proces připojení přiděluje každému klientovi port pro příjem a přenos dat. Počet portů se nastavuje při spuštění serveru. Mapování mezi porty a klienty je uloženo v meziprocesově sdílené proxy paměti.

Proces Operations podporuje sdílení prostředků souborů, takže více různých klientů může sdílet (kvaziparalelní, protože přístup je řízen zámky) číst data z jednoho souboru, pokud to bylo povoleno při prvním otevření "prvním" klientem.

Zpracování příkazů k vytvoření/smazání/otevření/zavření souborů na serveru se provádí v samotném procesu „Operace“ přísně sekvenčně pomocí souborového subsystému OS serveru.

Pro obecné urychlení čtení/zápisu se tyto operace provádějí ve vláknech vytvořených procesem „Operace“. Počet vláken se obvykle rovná počtu otevřených souborů. Úlohy čtení/zápisu od klientů jsou odeslány do obecné fronty a první volné vlákno převezme úlohu z hlavy. Speciální logika umožňuje eliminovat operace přepisování dat v paměti RAM serveru.

Proces Operations monitoruje aktivitu klientů a přestane je obsluhovat buď na základě jejich příkazů, nebo po překročení časového limitu nečinnosti.

Pro zajištění spolehlivosti Cageserver uchovává záznamy o všech transakcích. Jeden obecný protokol obsahuje kopie zpráv od klientů s úkoly vytvořit/otevřít/přejmenovat/mazat soubory. Pro každý pracovní soubor je vytvořen samostatný protokol, ve kterém jsou zaznamenány kopie zpráv s úkoly pro čtení a zápis dat v tomto pracovním souboru, dále pole zapsaných (nových) dat a pole dat, která byla zničena při přepisování (zápisu nová data „navrch“ starých). ).

Tyto protokoly poskytují možnost jak obnovit nové změny v zálohách, tak vrátit aktuální obsah do minulosti.

Cageserver má asi 3100 řádků kódu.

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

Spuštění programu souborového serveru Cageserver

Při spouštění musíte v dialogu definovat:
— hlavní přístav pro autorizaci;
— počet portů pro výměnu transakcí s autorizovanými klienty (od 1 nebo více, skupina čísel začíná od jednoho vedle čísla hlavního portu).

Použití třídy Cage

třída klec.Klec( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )

Z této třídy jsou vytvořeny objekty, které komunikují se souborovými servery a obsahují vyrovnávací paměť.

Parametry

  • jméno_klece(str) - podmíněný název objektu, který se používá k identifikaci klientů na straně serveru
  • velikost stránky(int) — velikost jedné stránky vyrovnávací paměti (v bajtech)
  • numpages(int) — počet stránek vyrovnávací paměti
  • maxstrlen(int) - maximální délka bajtového řetězce při operacích zápisu a čtení
  • server_ip(dict) - slovník s adresami použitých serverů, kde klíč je podmíněný název serveru (ID serveru uvnitř aplikace) a hodnota je řetězec s adresou: „ip adresa:port“ nebo „DNS: port“ (porovnání jmen a skutečných adres je dočasné, lze jej změnit)
  • počkat(int) — doba čekání na odpověď ze serveru při příjmu portů (v sekundách)
  • probudit(boolean) — příznak způsobu vytvoření objektu (Falešný - pokud je vytvořen nový objekt, Pravdivý - pokud je objekt vytvořen z dříve „sbaleného“ objektu – pomocí operace „hibernace“, ve výchozím nastavení False)
  • cache_file(str) - název souboru pro hibernaci

Metody

Klec.file_create( server, cesta ) – vytvořit nový soubor

Klec.file_rename( server, cesta, nový_název ) – přejmenovat soubor

Klec.file_remove( server, cesta) - smazat soubor

Klec.otevřít( server, cesta, mod ) - otevřít soubor

Vrací se fkanál číslo kanálu. Parametr mod - toto je režim otevírání souboru: "wm" - exkluzivní (čtení/zápis), "rs" - pouze pro čtení a sdílené pouze pro čtení jinými klienty, "ws" - čtení/zápis a sdílené pouze pro čtení ostatní klienti.

Klec.zavřít (fkanál) – zavře soubor

Klec.zapsat (fchannel, start, data ) – zápis bajtového řetězce do souboru

Klec.číst (fchannel, begin, len_data ) – čtení bajtového řetězce ze souboru

Klec.put_pages ( fkanál ) – „posune“ z vyrovnávací paměti na server všechny stránky zadaného kanálu, které byly změněny. Používá se v těch bodech algoritmu, kdy potřebujete mít jistotu, že všechny operace na kanálu jsou fyzicky uloženy v souboru na serveru.

Klec.push_all () – „posune“ z vyrovnávací paměti na server všechny stránky všech kanálů pro instanci třídy Cage, které byly změněny. Používá se, když potřebujete mít jistotu, že všechny operace na všech kanálech jsou uloženy na serveru.

Zdroj: www.habr.com

Přidat komentář