Cage Remote File Access System

Süsteemi eesmärk

Võrgus olevate arvutite failidele kaugjuurdepääsu tugi. Süsteem toetab "virtuaalselt" kõiki põhilisi failioperatsioone (loomine, kustutamine, lugemine, kirjutamine jne), vahetades TCP protokolli kasutades tehinguid (sõnumeid).

Taotlused

Süsteemi funktsionaalsus on efektiivne järgmistel juhtudel:

  • mobiilsete ja sisseehitatud seadmete (nutitelefonid, sisseehitatud juhtimissüsteemid jne) natiivsetes rakendustes, mis nõuavad kiiret juurdepääsu kaugserverites olevatele failidele, pidades silmas võimalikke ajutisi sidekatkestusi (koos võrguühenduseta lülitumisega);
  • laaditud DBMS-ides, kui mõnes serveris töödeldakse päringuid ja teistes toimub andmete salvestamine;
  • ettevõtte hajutatud võrkudes teabe kogumiseks ja töötlemiseks, mis nõuavad kiiret andmevahetust, liiasust ja töökindlust;
  • keerulistes mikroteenuste arhitektuuriga süsteemides, kus moodulitevahelise teabevahetuse viivitused on kriitilised.

Struktuur

Cage süsteem (on Windowsi Python 3.7 beetaversioon) sisaldab kahte põhiosa:

  1. Puuriserver — failiserveri programm (funktsioonide pakett), mis töötab võrgus olevates arvutites, mille failid vajavad kaugjuurdepääsu;
  2. klass Puur klienditarkvara meetodite raamatukoguga, mis lihtsustab serveritega suhtlemise kodeerimist.

Süsteemi kasutamine kliendi poolel

Klassi Cage meetodid asendavad tavapäraseid "rutiinseid" failisüsteemi toiminguid: loomine, avamine, sulgemine, kustutamine failid, samuti andmete lugemine/kirjutamine binaarvormingus (märkides ära andmete asukoha ja suuruse). Põhimõtteliselt on need meetodid lähedased C-keele failifunktsioonidele, kus failide avamine/sulgemine toimub sisendi/väljundi "kanalitel".

Teisisõnu, programmeerija ei tööta "faili" objektide meetoditega (klass _io Pythonis), kuid klassi Cage meetoditega.

Kui luuakse Cage'i objekti eksemplar, loob see esialgse ühenduse serveriga (või mitme serveriga), volitatakse kliendi ID-ga ja saab kinnituse spetsiaalse pordinumbriga kõigi failitoimingute jaoks. Kui Cage'i objekt kustutatakse, annab see serverile korralduse side katkestada ja failid sulgeda. Side lõpetamise võivad algatada ka serverid ise.

Süsteem parandab lugemise/kirjutamise jõudlust, puhverdades sageli kasutatavad kliendiprogrammide failifragmendid RAM-i vahemälus (puhvris).
Klienditarkvara saab kasutada suvalist arvu erinevate seadistustega (puhvermälu suurus, ploki suurus serveriga vahetamisel jne) Cage'i objekte.

Üks Cage'i objekt võib suhelda mitme failiga mitmes serveris. Sideparameetrid (IP-aadress või DNS-server, autoriseerimise põhiport, tee ja failinimi) määratakse objekti loomisel.

Kuna iga Cage'i objekt saab korraga töötada mitme failiga, kasutatakse puhverdamiseks jagatud mäluruumi. Vahemälu suurus – lehekülgede arv ja suurus määratakse dünaamiliselt Cage objekti loomisel. Näiteks 1 GB vahemälu on 1000 lehte, igaüks 1 MB või 10 tuhat lehekülge, igaüks 100 KB, või 1 miljon lehekülge, igaüks 1 KB. Lehekülgede suuruse ja arvu valimine on iga rakenduse puhul spetsiifiline ülesanne.

Saate kasutada mitut puuriobjekti korraga, et määratleda erinevad puhvermälu sätted olenevalt sellest, kuidas erinevates failides teabele juurde pääsetakse. Põhilisena kasutatakse lihtsaimat puhverdusalgoritmi: pärast etteantud mälumahu ammendumist tõrjuvad uued lehed vanad välja vastavalt pensionile jäämise põhimõttele minimaalse juurdepääsuga. Puhverdamine on eriti tõhus ebaühtlase (statistilises mõttes) jagatud juurdepääsu korral, esiteks erinevatele failidele ja teiseks iga faili fragmentidele.

Klass Cage toetab I/O-d mitte ainult andmeaadresside kaudu (näitades massiivi asukohta ja pikkust, "asendades" failisüsteemi toiminguid), vaid ka madalamal, "füüsilisel" tasemel - puhvermälus oleva leheküljenumbrite järgi.

Puuriobjektide puhul toetatakse algset funktsiooni "talveunestus" (“unerežiim”) – need saab “ahendada” (näiteks serveritega ühenduse katkemise või rakenduse peatamise korral jne) kliendi poolel asuvasse kohalikku tõmmisfaili ja kiiresti taastada seda faili (pärast suhtluse jätkamist, kui rakenduse taaskäivitate). See võimaldab klientprogrammi aktiveerimisel pärast ajutist võrguühenduseta minekut liiklust märkimisväärselt vähendada, kuna sageli kasutatavad failifragmendid on juba vahemälus.

Cage on umbes 3600 koodirida.

Serveri ehitamise põhimõtted

Cageserveri failiservereid saab käivitada suvalise arvu portidega, millest ühte (“peamist”) kasutatakse ainult kõigi klientide autoriseerimiseks, ülejäänud kasutatakse andmevahetuseks. Cage'i serveriprogramm nõuab ainult Pythonit. Paralleelselt saab failiserveriga arvuti teha mis tahes muid töid.

Server käivitub esialgu kahe peamise protsessi kogumina:

  1. "Ühendused" – protsess klientidega side loomise ja serveri algatusel lõpetamise toimingute tegemiseks;
  2. "Operatsioonid" – protsess klientide ülesannete (toimingute) täitmiseks failidega töötamiseks, samuti kliendikäskude alusel suhtlusseansside sulgemiseks.

Mõlemad protsessid ei ole sünkroonitud ja on organiseeritud lõputute sõnumite vastuvõtmise ja saatmise ahelatena, mis põhinevad mitmeprotsessilistel järjekordadel, puhverserveri objektidel, lukkude ja pistikupesadel.
Ühendusprotsess eraldab igale kliendile pordi andmete vastuvõtmiseks ja edastamiseks. Portide arv määratakse serveri käivitumisel. Portide ja klientide vaheline vastendus salvestatakse protsessidevahelise jagatud puhverserveri mällu.

Toimingute protsess toetab failiressursside jagamist, et mitu erinevat klienti saaksid jagada (kvaasiparalleelne, kuna juurdepääsu kontrollivad lukud) lugege andmeid ühest failist, kui see oli lubatud, kui see "esimene" klient selle algselt avas.

Serveris failide loomise / kustutamise / avamise / sulgemise käskude töötlemine toimub protsessis "Toimingud" rangelt järjestikku, kasutades serveri OS-i faili alamsüsteemi.

Lugemise/kirjutamise üldiseks kiirendamiseks tehakse need toimingud lõimedes, mille on loonud protsess „Operatsioonid”. Lõimede arv on tavaliselt võrdne avatud failide arvuga. Klientide lugemis-/kirjutusülesanded esitatakse üldjärjekorda ja esimene vaba lõim võtab ülesande peast. Spetsiaalne loogika võimaldab serveri RAM-is välistada andmete ümberkirjutamise toimingud.

Toimingute protsess jälgib kliendi tegevust ja lõpetab nende teenindamise kas nende käskude alusel või kui tegevusetuse ajalõpp on ületatud.

Usaldusväärsuse tagamiseks peab Cageserver kõigi tehingute kohta logisid. Üks üldine logi sisaldab klientide sõnumite koopiaid failide loomise/avamise/ümbernimetamise/kustutamise ülesannetega. Iga tööfaili jaoks luuakse eraldi logi, kuhu salvestatakse teadete koopiad selles tööfailis olevate andmete lugemise ja kirjutamise ülesannetega, samuti kirjutatud (uute) andmete massiivid ja ülekirjutamise (kirjutamise) käigus hävinud andmete massiivid uued andmed vanade peal).

Need logid võimaldavad nii taastada varukoopiate uusi muudatusi kui ka taastada praeguse sisu minevikku.

Cageserver on umbes 3100 koodirida.

Cage Remote File Access System

Cageserveri failiserveri programmi käivitamine

Alustamisel peate dialoogiaknas määratlema:
— peamine loa andmise sadam;
— volitatud klientidega tehingute vahetamise pordide arv (alates 1-st või enamast, algab numbrikogum põhipordi numbri kõrval olevast).

Puuriklassi kasutamine

klass puuri.Puur( puuri_nimi="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )

Sellest klassist luuakse objektid, mis suhtlevad failiserveritega ja sisaldavad puhvermälu.

Parameetrid

  • puuri_nimi(str) - objekti tingimuslik nimi, mida kasutatakse klientide tuvastamiseks serveri poolel
  • lehe suurus(int) — puhvermälu ühe lehekülje suurus (baitides)
  • numpages(int) — puhvermälu lehekülgede arv
  • maxstrlen(int) – baidistringi maksimaalne pikkus kirjutamis- ja lugemisoperatsioonides
  • serveri_ip(dikteerima) - kasutatud serverite aadressidega sõnastik, kus võtmeks on serveri tingimuslik nimi (serveri ID rakenduse sees) ja väärtuseks string aadressiga: “ip-aadress:port” või “DNS: port” (nimede ja tegelike aadresside võrdlus on ajutine, seda saab muuta)
  • ootama(int) — serveri vastuse ooteaeg portide vastuvõtmisel (sekundites)
  • ärkvel(loogiline) — objekti loomise lipp (Vale - kui luuakse uus objekt, Tõsi - kui objekt luuakse varem "ahendatud" objektist - "talveunerežiimi" toiminguga, vaikimisi Väär)
  • vahemälu_fail(str) - talveunerežiimi failinimi

Meetodid

Puur.file_create( server, tee ) – looge uus fail

Puur.faili_ümbernimetamine( server, tee, uus_nimi ) – nimetage fail ümber

Puur.file_remove( server, tee) - faili kustutamine

Puur.avatud( server, tee, mod ) - avatud fail

Tagastab fchannel kanali number. Parameeter mod - see on faili avamise režiim: "wm" - eksklusiivne (lugemine/kirjutamine), "rs" - kirjutuskaitstud ja jagatud ainult lugemiseks teistele klientidele, "ws" - lugemine/kirjutamine ja jagatud ainult lugemiseks teised kliendid.

Puur.lähedal (fchannel) – sulgege fail

Puur.kirjutama (fchannel, algus, andmed ) – kirjutage faili baidist string

Puur.lugenud (fchannel, start, len_data ) – failist baidistringi lugemine

Puur.put_pages ( fchannel ) – "tõukab" puhvrist serverisse kõik määratud kanali lehed, mida on muudetud. Seda kasutatakse algoritmi nendes punktides, kui peate olema kindel, et kõik kanali toimingud salvestatakse füüsiliselt serveris olevasse faili.

Puur.push_all () – "tõukab" puhvrist serverisse kõik muudetud Cage-klassi eksemplari kanalite lehed. Kasutatakse siis, kui peate olema kindel, et kõik toimingud kõigis kanalites salvestatakse serverisse.

Allikas: www.habr.com

Lisa kommentaar