Cage sustav za udaljeni pristup datotekama

Svrha sustava

Podrška za daljinski pristup datotekama na računalima na mreži. Sustav “virtualno” podržava sve osnovne operacije datoteka (kreiranje, brisanje, čitanje, pisanje itd.) razmjenom transakcija (poruka) korištenjem TCP protokola.

aplikacije

Funkcionalnost sustava je učinkovita u sljedećim slučajevima:

  • u izvornim aplikacijama za mobilne i ugrađene uređaje (pametni telefoni, ugrađeni sustavi upravljanja itd.) koji zahtijevaju brzi pristup datotekama na udaljenim poslužiteljima u slučaju mogućih privremenih prekida komunikacije (uz odlazak izvan mreže);
  • u učitanim DBMS-ovima, ako se obrada upita provodi na nekim poslužiteljima, a pohranjivanje podataka na drugima;
  • u distribuiranim korporativnim mrežama za prikupljanje i obradu informacija, zahtijevaju veliku brzinu razmjene podataka, redundanciju i pouzdanost;
  • u složenim sustavima s mikroservisnom arhitekturom, gdje su kašnjenja u razmjeni informacija između modula kritična.

Struktura

Sustav Cage (postoji implementacija - beta verzija u Python 3.7 na Windowsima) uključuje dva glavna dijela:

  1. Cageserver — program poslužitelja datoteka (paket funkcija) koji radi na računalima na mreži čije datoteke zahtijevaju udaljeni pristup;
  2. razred Kavez s bibliotekom metoda za klijentski softver, pojednostavljujući kodiranje interakcije s poslužiteljima.

Korištenje sustava na strani klijenta

Metode klase Cage zamjenjuju uobičajene, "rutinske" operacije datotečnog sustava: stvaranje, otvaranje, zatvaranje, brisanje datoteke, kao i čitanje/pisanje podataka u binarnom formatu (označavajući položaj i veličinu podataka). Konceptualno, ove metode su bliske datotečnim funkcijama jezika C, gdje se otvaranje/zatvaranje datoteka izvodi “na kanalima” ulaza/izlaza.

Drugim riječima, programer ne radi s metodama objekata "datoteke" (klase _io u Pythonu), ali s metodama klase Cage.

Kada se stvori instanca Cage objekta, ona uspostavlja početnu vezu s poslužiteljem (ili nekoliko poslužitelja), autorizirana je ID-om klijenta i prima potvrdu s namjenskim brojem porta za sve operacije datoteka. Kada se objekt Cage izbriše, on upućuje poslužitelj da prekine komunikaciju i zatvori datoteke. Prekid komunikacije također mogu inicirati sami poslužitelji.

Sustav poboljšava performanse čitanja/pisanja spremanjem često korištenih fragmenata datoteka klijentskih programa u RAM predmemoriju (međuspremnik).
Klijentski softver može koristiti bilo koji broj Cage objekata s različitim postavkama (veličina međuspremnika, veličina bloka pri razmjeni s poslužiteljem itd.).

Jedan Cage objekt može komunicirati s više datoteka na više poslužitelja. Komunikacijski parametri (IP adresa ili DNS poslužitelj, glavni port za autorizaciju, put i naziv datoteke) specificiraju se prilikom kreiranja objekta.

Budući da svaki Cage objekt može raditi s više datoteka u isto vrijeme, dijeljeni memorijski prostor koristi se za međuspremnik. Veličina predmemorije – broj stranica i njihova veličina postavljaju se dinamički prilikom izrade Cage objekta. Na primjer, predmemorija od 1 GB je 1000 stranica od 1 MB svaka, ili 10 tisuća stranica od 100 KB svaka, ili 1 milijun stranica od 1 KB svaka. Odabir veličine i broja stranica poseban je zadatak za svaki slučaj primjene.

Možete koristiti više Cage objekata u isto vrijeme za definiranje različitih postavki međuspremnika ovisno o tome kako se informacijama pristupa u različitim datotekama. Kao osnovni koristi se najjednostavniji algoritam međuspremnika: nakon što se potroši određena količina memorije, nove stranice zamjenjuju stare po principu povlačenja s minimalnim brojem pristupa. Međuspremnik je posebno učinkovit u slučaju neravnomjernog (u statističkom smislu) zajedničkog pristupa, prvo, različitim datotekama, i, drugo, fragmentima svake datoteke.

Klasa Cage podržava I/O ne samo putem adresa podataka (označavajući položaj i duljinu niza, "zamjenjujući" operacije datotečnog sustava), već i na nižoj, "fizičkoj" razini - brojevima stranica u međuspremniku.

Izvorna funkcija podržana je za Cage objekte "hibernacija" (“mirovanje”) - mogu se “sažimati” (na primjer, u slučaju gubitka veze s poslužiteljima, ili kada je aplikacija zaustavljena, itd.) u lokalnu datoteku ispisa na strani klijenta i brzo vratiti iz ovu datoteku (nakon što se komunikacija nastavi, kada ponovno pokrenete aplikaciju). To omogućuje značajno smanjenje prometa prilikom aktiviranja klijentskog programa nakon privremenog odlaska "offline", budući da će često korišteni fragmenti datoteke već biti u predmemoriji.

Cage ima oko 3600 linija koda.

Principi izgradnje poslužitelja

Datotečni poslužitelji Cageserver mogu se izvoditi s proizvoljnim brojem portova, od kojih jedan (“glavni”) služi samo za autorizaciju svih klijenata, a ostali se koriste za razmjenu podataka. Poslužiteljski program Cage zahtijeva samo Python. Paralelno, računalo s poslužiteljem datoteka može obavljati bilo koji drugi posao.

Poslužitelj se u početku pokreće kao zbirka dva glavna procesa:

  1. "Veze" – proces za izvođenje operacija uspostavljanja komunikacije s klijentima i njenog prekida na inicijativu poslužitelja;
  2. "Operacije" – proces za izvršavanje zadataka (operacija) klijenata za rad s datotekama, kao i za zatvaranje komunikacijskih sesija na temelju klijentskih naredbi.

Oba procesa nisu sinkronizirana i organizirana su kao beskonačne petlje primanja i slanja poruka na temelju višeprocesnih redova, proxy objekata, brava i utičnica.
Proces povezivanja dodjeljuje priključak za svakog klijenta za primanje i prijenos podataka. Broj portova postavlja se prilikom pokretanja poslužitelja. Preslikavanje između portova i klijenata pohranjuje se u međuprocesnu proxy memoriju.

Operacijski proces podržava dijeljenje datotečnih resursa tako da više različitih klijenata može dijeliti (kvaziparalelan, budući da je pristup kontroliran bravama) čita podatke iz jedne datoteke ako je to bilo dopušteno kada ju je inicijalno otvorio "prvi" klijent.

Obrada naredbi za stvaranje/brisanje/otvaranje/zatvaranje datoteka na poslužitelju provodi se u samom procesu “Operacije” strogo sekvencijalno korištenjem datotečnog podsustava OS-a poslužitelja.

Kako bi se općenito ubrzalo čitanje/pisanje, ove se operacije izvode u nitima koje je iznjedrio proces "Operacije". Broj niti je obično jednak broju otvorenih datoteka. Zadaci čitanja/pisanja od klijenata šalju se u opći red čekanja i prva slobodna nit preuzima zadatak iz glave. Posebna logika omogućuje eliminiranje operacija prepisivanja podataka u RAM-u poslužitelja.

Operacijski proces nadzire aktivnost klijenta i prestaje ih opsluživati ​​bilo na njihove naredbe ili kada je prekoračeno vrijeme neaktivnosti.

Kako bi se osigurala pouzdanost, Cageserver vodi zapisnike svih transakcija. Jedan opći dnevnik sadrži kopije poruka od klijenata sa zadacima za stvaranje/otvaranje/preimenovanje/brisanje datoteka. Za svaku radnu datoteku kreira se zaseban dnevnik u koji se bilježe kopije poruka sa zadacima za čitanje i upisivanje podataka u ovu radnu datoteku, kao i nizovi upisanih (novih) podataka i nizovi podataka koji su uništeni tijekom prepisivanja (pisanje novi podaci “povrh” starih).

Ovi dnevnici pružaju mogućnost vraćanja novih promjena na sigurnosne kopije i vraćanja trenutnog sadržaja na točku u prošlosti.

Cageserver ima oko 3100 linija koda.

Cage sustav za udaljeni pristup datotekama

Pokretanje programa poslužitelja datoteka Cageserver

Prilikom pokretanja, u dijalogu morate definirati:
— glavna luka za autorizaciju;
— broj portova za razmjenu transakcija s ovlaštenim klijentima (od 1 ili više, skup brojeva počinje od onog pored glavnog broja porta).

Korištenje Cage klase

razred kavez.Kavez( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )

Iz ove klase stvaraju se objekti koji su u interakciji s poslužiteljima datoteka i sadrže međuspremnik.

Parametri

  • ime_kaveza(str) - uvjetni naziv objekta, koji se koristi za identifikaciju klijenata na strani poslužitelja
  • veličina stranice(int) — veličina jedne stranice međuspremnika (u bajtovima)
  • brojčane stranice(int) — broj stranica međuspremnika
  • maxstrlen(int) - najveća duljina niza bajtova u operacijama pisanja i čitanja
  • server_ip(diktat) - rječnik s adresama korištenih poslužitelja, gdje je ključ uvjetni naziv poslužitelja (id poslužitelja unutar aplikacije), a vrijednost niz s adresom: “ip adresa:port” ili “DNS: luka” (usporedba imena i prave adrese je privremena, može se promijeniti)
  • čekati(int) — vrijeme čekanja na odgovor od poslužitelja prilikom primanja portova (u sekundama)
  • budan(boolean) — oznaka načina na koji je objekt stvoren (Lažan - ako se kreira novi objekt, Pravi - ako je objekt kreiran iz prethodno "srušenog" objekta - pomoću operacije "hibernacije", False prema zadanim postavkama)
  • cache_file(str) - naziv datoteke za hibernaciju

metode

Kavez.file_create( poslužitelj, put ) – kreirajte novu datoteku

Kavez.preimenovanje datoteke( poslužitelj, staza, novo_ime ) – preimenujte datoteku

Kavez.datoteka_ukloniti( poslužitelj, put) - brisanje datoteke

Kavez.otvoriti( poslužitelj, put, mod ) - otvorena datoteka

Povrat fkanal broj kanala. Parametar mod - ovo je način otvaranja datoteke: "wm" - ekskluzivno (čitanje/pisanje), "rs" - samo za čitanje, i dijeljeno samo za čitanje od strane drugih klijenata, "ws" - čitanje/pisanje, i dijeljeno samo za čitanje od strane druge klijente.

Kavez.blizu (fkanal) – zatvori datoteku

Kavez.pisati (fkanal, početak, podaci ) – zapisati niz bajtova u datoteku

Kavez.čitati (fkanal, početak, len_data ) – čita niz bajtova iz datoteke

Kavez.stavi_stranice ( fkanal ) – “gura” iz međuspremnika na poslužitelj sve stranice navedenog kanala koje su izmijenjene. Koristi se u onim točkama algoritma kada morate biti sigurni da su sve operacije na kanalu fizički spremljene u datoteku na poslužitelju.

Kavez.gurni_sve () – “gura” iz međuspremnika na poslužitelj sve stranice svih kanala za instancu klase Cage koje su izmijenjene. Koristi se kada morate biti sigurni da su sve operacije na svim kanalima spremljene na poslužitelju.

Izvor: www.habr.com

Dodajte komentar