„Cage“ nuotolinės failų prieigos sistema

Sistemos paskirtis

Nuotolinės prieigos prie failų tinkle kompiuteriuose palaikymas. Sistema „virtualiai“ palaiko visas pagrindines failų operacijas (kūrimą, trynimą, skaitymą, rašymą ir kt.), keisdamasi transakcijomis (pranešimais) TCP protokolu.

Programos

Sistemos funkcionalumas yra veiksmingas šiais atvejais:

  • vietinėse programose, skirtose mobiliesiems ir įterptiesiems įrenginiams (išmaniesiems telefonams, integruotoms valdymo sistemoms ir kt.), kurioms reikalinga greita prieiga prie failų nuotoliniuose serveriuose esant galimiems laikiniems ryšio pertrūkiams (atsijungus);
  • įkeltose DBVS, jei vienuose serveriuose vykdomas užklausų apdorojimas, o kituose – duomenų saugojimas;
  • paskirstytuose įmonių tinkluose informacijai rinkti ir apdoroti, kai reikalingas didelis duomenų mainų greitis, dubliavimas ir patikimumas;
  • sudėtingose ​​sistemose su mikro paslaugų architektūra, kur vėlavimai keičiantis informacija tarp modulių yra labai svarbūs.

Struktūra

„Cage“ sistema (yra įdiegta - beta versija Python 3.7 sistemoje Windows) susideda iš dviejų pagrindinių dalių:

  1. Cageserveris — failų serverio programa (funkcijų paketas), kuri veikia tinklo kompiuteriuose, kurių failams reikalinga nuotolinė prieiga;
  2. klasė Narvas su klientų programinės įrangos metodų biblioteka, supaprastinanti sąveikos su serveriais kodavimą.

Sistemos naudojimas kliento pusėje

Cage klasės metodai pakeičia įprastas, „įprastas“ failų sistemos operacijas: kūrimas, atidarymas, uždarymas, trynimas failus, taip pat duomenų skaitymas/rašymas dvejetainiu formatu (nurodant duomenų vietą ir dydį). Konceptualiai šie metodai yra artimi C kalbos failų funkcijoms, kai failų atidarymas/uždarymas atliekamas įvesties/išvesties „kanaluose“.

Kitaip tariant, programuotojas neveikia su „failų“ objektų metodais (klasė _io Python), bet su Cage klasės metodais.

Kai sukuriamas Cage objekto egzempliorius, jis užmezga pradinį ryšį su serveriu (ar keliais serveriais), yra įgaliotas kliento ID ir gauna patvirtinimą su tam skirtu prievado numeriu visoms failo operacijoms. Kai Cage objektas yra ištrintas, jis nurodo serveriui nutraukti ryšį ir uždaryti failus. Ryšio nutraukimą gali inicijuoti ir patys serveriai.

Sistema pagerina skaitymo/rašymo našumą buferiuodama dažnai naudojamus klientų programų failų fragmentus RAM talpykloje (buferyje).
Kliento programinė įranga gali naudoti bet kokį „Cage“ objektų skaičių su skirtingais parametrais (buferinės atminties dydis, bloko dydis keičiantis su serveriu ir kt.).

Vienas Cage objektas gali susisiekti su keliais failais keliuose serveriuose. Kuriant objektą nurodomi ryšio parametrai (IP adresas arba DNS serveris, pagrindinis prievadas autorizacijai, kelias ir failo pavadinimas).

Kadangi kiekvienas „Cage“ objektas gali dirbti su keliais failais vienu metu, bendra atminties vieta naudojama buferiui. Talpyklos dydis – puslapių skaičius ir jų dydis nustatomas dinamiškai kuriant Cage objektą. Pavyzdžiui, 1 GB talpykloje yra 1000 puslapių po 1 MB arba 10 tūkstančių puslapių po 100 KB, arba 1 milijonas puslapių po 1 KB. Puslapių dydžio ir skaičiaus pasirinkimas yra konkreti užduotis kiekvienu atveju.

Galite naudoti kelis Cage objektus vienu metu, kad apibrėžtumėte skirtingus buferinės atminties parametrus, priklausomai nuo to, kaip informacija pasiekiama skirtinguose failuose. Kaip pagrindinis, naudojamas paprasčiausias buferio algoritmas: išnaudojus tam tikrą atminties kiekį, nauji puslapiai išstumia senus pagal pašalinimo principą su minimaliu prieigų skaičiumi. Buferis ypač efektyvus tuo atveju, kai yra nevienoda (statistine prasme) bendra prieiga, pirma, prie skirtingų failų ir, antra, prie kiekvieno failo fragmentų.

„Cage“ klasė palaiko I/O ne tik pagal duomenų adresus (nurodant masyvo padėtį ir ilgį, „pakeičiant“ failų sistemos operacijas), bet ir žemesniu, „fiziniu“ lygiu – puslapių numeriais buferinėje atmintyje.

Pradinė funkcija palaikoma Cage objektams "žiemos miegas" („Sleep“) – juos galima „sutraukti“ (pavyzdžiui, nutrūkus ryšiui su serveriais arba sustabdžius programą ir pan.) į vietinį iškelties failą kliento pusėje ir greitai atkurti iš šį failą (atnaujinus ryšį, kai iš naujo paleidžiate programą). Tai leidžia žymiai sumažinti srautą aktyvuojant kliento programą, laikinai atsijungus nuo interneto, nes dažnai naudojami failų fragmentai jau bus talpykloje.

Cage yra apie 3600 kodo eilučių.

Serverio konstravimo principai

Cageserver failų serveriai gali būti paleisti su savavališku skaičiumi prievadų, iš kurių vienas („pagrindinis“) naudojamas tik visų klientų autorizacijai, o kiti naudojami duomenų mainams. Cage serverio programai reikalingas tik Python. Lygiagrečiai kompiuteris su failų serveriu gali atlikti bet kokį kitą darbą.

Iš pradžių serveris paleidžiamas kaip dviejų pagrindinių procesų rinkinys:

  1. „Ryšiai“ – ryšio su klientais užmezgimo ir jo nutraukimo serverio iniciatyva operacijų atlikimo procesas;
  2. "Operacijos" – klientų užduočių (operacijų) darbo su failais atlikimo, taip pat komunikacijos seansų, pagrįstų kliento komandomis, uždarymo procesas.

Abu procesai nėra sinchronizuoti ir yra organizuoti kaip nesibaigiančios pranešimų priėmimo ir siuntimo kilpos, pagrįstos kelių procesų eilėmis, tarpinio serverio objektais, užraktais ir lizdais.
Prisijungimo procesas kiekvienam klientui paskiria prievadą duomenims priimti ir perduoti. Prievadų skaičius nustatomas paleidus serverį. Prievadų ir klientų susiejimas saugomas tarpprocesų bendrinamoje tarpinio serverio atmintyje.

Operacijų procesas palaiko failų išteklių bendrinimą, kad keli skirtingi klientai galėtų bendrinti (beveik lygiagretus, nes prieigą valdo užraktai) skaityti duomenis iš vieno failo, jei tai buvo leidžiama, kai jį iš pradžių atidarė „pirmasis“ klientas.

Komandų, skirtų kurti/trinti/atidaryti/uždaryti failus serveryje, apdorojimas atliekamas pačiame procese „Operacijos“ griežtai nuosekliai, naudojant serverio OS failų posistemį.

Norint apskritai paspartinti skaitymą / rašymą, šios operacijos atliekamos gijomis, kurias sukuria procesas „Operacijos“. Gijų skaičius paprastai yra lygus atidarytų failų skaičiui. Skaitymo / rašymo užduotys iš klientų pateikiamos į bendrą eilę ir pirmoji nemokama gija paima užduotį iš savo galvos. Speciali logika leidžia pašalinti duomenų perrašymo operacijas serverio RAM atmintyje.

Operacijų procesas stebi kliento veiklą ir nustoja juos aptarnauti pagal jų komandas arba kai viršijamas neveiklumo laikas.

Siekiant užtikrinti patikimumą, Cageserver saugo visų operacijų žurnalus. Viename bendrame žurnale yra pranešimų iš klientų kopijos su užduotimis kurti / atidaryti / pervardyti / ištrinti failus. Kiekvienam darbiniam failui sukuriamas atskiras žurnalas, kuriame įrašomos pranešimų kopijos su užduotimis nuskaityti ir įrašyti duomenis šiame darbiniame faile, taip pat rašytinių (naujų) duomenų masyvai ir duomenų masyvai, kurie buvo sunaikinti perrašymo (rašymo) metu. nauji duomenys „ant senų“).

Šie žurnalai suteikia galimybę atkurti naujus atsarginių kopijų pakeitimus ir grąžinti dabartinį turinį į praeitį.

Cageserver yra apie 3100 kodo eilučių.

„Cage“ nuotolinės failų prieigos sistema

Cageserver failų serverio programos paleidimas

Pradėdami dialogo lange turite apibrėžti:
— pagrindinis leidimo uostas;
— prievadų, skirtų apsikeisti operacijomis su įgaliotais klientais, skaičius (nuo 1 ar daugiau numerių telkinys prasideda nuo esančio šalia pagrindinio prievado numerio).

Narvo klasės naudojimas

klasė narvas.Narvas( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, wake=False, cache_file="" )

Iš šios klasės sukuriami objektai, kurie sąveikauja su failų serveriais ir turi buferinę atmintį.

Parametrai

  • narvelio_pavadinimas(g) – sąlyginis objekto pavadinimas, naudojamas serverio pusėje esantiems klientams identifikuoti
  • puslapio dydis(int) – vieno buferinės atminties puslapio dydis (baitais)
  • numpages(int) — buferinės atminties puslapių skaičius
  • maxstrlen(int) – didžiausias baitų eilutės ilgis atliekant rašymo ir skaitymo operacijas
  • serverio_ip(diktuoti) - žodynas su naudojamų serverių adresais, kur raktas yra sąlyginis serverio pavadinimas (serverio ID programoje), o reikšmė yra eilutė su adresu: „ip address:port“ arba „DNS: uostas“ (vardų ir tikrųjų adresų palyginimas laikinas, jį galima keisti)
  • laukti(int) — atsakymo iš serverio laukimo laikas, kai gaunami prievadai (sekundėmis)
  • budrus(boolean) — vėliava, kaip objektas sukuriamas (Klaidingas - jei sukuriamas naujas objektas, Tiesa - jei objektas sukurtas iš anksčiau „sugriauto“ - naudojant „užmigdymo“ operaciją, pagal numatytuosius nustatymus klaidinga)
  • cache_file(g) – sulaikytosios veiksenos failo pavadinimas

Metodai

Narvas.file_create( serveris, kelias ) – sukurti naują failą

Narvas.failo_pervardyti( serveris, kelias, naujas_vardas ) – pervardykite failą

Narvas.file_remove( serveris, kelias) - ištrinti failą

Narvas.atidaryti( serveris, kelias, mod ) - atidaryti failą

Grįžta fchannel kanalo numeris. Parametras mod - tai failo atidarymo režimas: "wm" - išskirtinis (skaityti / rašyti), "rs" - tik skaityti ir bendrinamas tik skaityti kitiems klientams, "ws" - skaityti / rašyti ir bendrinamas tik skaitymui kiti klientai.

Narvas.close (fchannel) – uždarykite failą

Narvas.rašyti (fchannel, pradžia, duomenys ) – į failą įrašyti baitų eilutę

Narvas.skaityti (fchannel, pradžia, len_data ) – nuskaityti baitų eilutę iš failo

Narvas.įdėti_puslapiai ( fchannel ) – „perkelia“ iš buferio į serverį visus pakeistus nurodyto kanalo puslapius. Jis naudojamas tuose algoritmo taškuose, kai reikia įsitikinti, kad visos kanalo operacijos yra fiziškai išsaugotos faile serveryje.

Narvas.push_all () – „perkelia“ iš buferio į serverį visus modifikuotų Cage klasės egzempliorių kanalų puslapius. Naudojamas, kai reikia įsitikinti, kad visos operacijos visuose kanaluose yra išsaugotos serveryje.

Šaltinis: www.habr.com

Добавить комментарий