SĂŒsteemi eesmĂ€rk
Kaugtöölaual juurdepÀÀsu toetamine arvutites, mis on vĂ”rgus. SĂŒsteem toetab "virtuaalselt" kĂ”iki pĂ”hifailioperatsioone (loomine, kustutamine, lugemine, kirjutamine jne), vahetades tehingute (sĂ”numite) kaudu andmeid TCP protokolli jĂ€rgi.
Rakendusvaldkonnad
SĂŒsteemi funktsionaalsus on efektiivne jĂ€rgmistel juhtudel:
- natiivsetes rakendustes mobiilsete ja embedded seadmete jaoks (nutitelefonid, laevanduse juhtimissĂŒsteemid jne), mis vajavad kiiret juurdepÀÀsu failidele kaugserverites, olukordades, kus on tĂ”enĂ€oliselt ajaliselt katkestusi (offline minnes);
- koormatud andmebaasides, kus pĂ€ringute töötlemine toimub ĂŒhel serveril, samas kui andmete salvestamine toimub teistel;
- jaotatud ettevÔtte andmekogumiste ja töötlemise vÔrkudes, mis nÔuavad suurt andmevahetuse kiirus, varu ja usaldusvÀÀrsus;
- keerulistes sĂŒsteemides, millel on mikroteenuste arhitektuur, kus teabe vahetuse viivitused moodulite vahel on kriitilise tĂ€htsusega.
Struktuur
SĂŒsteem Cage (sealhulgas Python 3.7 beta versioon Windowsi operatsioonisĂŒsteemis) koosneb kahest pĂ”hiosast:
- Cageserver â failiserveri programm (funktsioonide pakett), mis kĂ€ivitatakse vĂ”rgus asuvatel arvutitel, mille failidele on vajalik kaugjuurdepÀÀs;
- klass Cage klienditarkvara jaoks mÔeldud meetodite teek, mis lihtsustab serveritega suhtlemise kodeerimist.
SĂŒsteemi kasutamine kliendi poolel
Cage klassi meetodid asendavad tavalised, "rutinoossed" failisĂŒsteemi operatsioonid: failide loomine, avamine, sulgemine, kustutamine ja ka andmete lugemine/kirjutamine binaarses formaadis (andmete asukoha ja suuruse mÀÀramisega). Kontseptuaalselt on need meetodid sarnased C keele failifunktsioonidega, kus failide avamine/sulgemine toimub âsisendi-vĂ€ljundi kanaliteâ kaudu.
TeisisÔnu, programmeerija ei tööta "faili" objektide (klassi _io Pythonis) meetodite, vaid Cage klassi meetoditega.
Objekti Cage loomisel luuakse algne side serveriga (vĂ”i mitme serveriga), toimub autoriseerimine kliendi ID kaudu ja saadakse kinnitamine eraldatud sadama numbri kohta kĂ”igi failitehingute teostamiseks. Objekti Cage eemaldamisel annab see serverile kĂ€su ĂŒhenduse lĂ”petamiseks ja failide sulgemiseks. Ăhenduse lĂ”petamist vĂ”ivad algatada ka serverid ise.
SĂŒsteem suurendab lugemise/kirjutamise kiirusel pĂ”hinevat andmete vahetuses kasutatavate failifragmentide vahemĂ€lu (vahemĂ€lu) kasutamist kliendiprogrammide hulgas.
Klienditarkvara vÔib kasutada suvalist arvu Cage objekte erinevate seadistustega (vahemÀlu suurus, plokkide suurus serveriga suhtlemisel jne).
Ăks Cage objekt vĂ”ib vahetada andmeid mitme faili vahel mitmetes serverites. Ăhendusparameetrid (serveri IP-aadress vĂ”i DNS, autoriseerimise peaport, faili tee ja nimi) mÀÀratakse objekti loomisel.
Kuna iga Cage objekt vĂ”ib samal ajal töötada paljude failidega, kasutatakse vahemĂ€lu jaoks ĂŒhist mĂ€luruumi. VahemĂ€lu suurus â lehekĂŒlgede arv ja nende suurus â mÀÀratakse dĂŒnaamiliselt Cage objekti loomise kĂ€igus. NĂ€iteks 1 GB vahemĂ€lu on 1000 lehekĂŒlge suuruses 1 MB, vĂ”i 10 000 lehekĂŒlge suuruses 100 KB, vĂ”i 1 miljon lehekĂŒlge suuruses 1 KB. LehekĂŒlgede suuruse ja arvu valik on iga rakenduse puhul spetsiifiline ĂŒlesanne.
Samaaegselt vĂ”ib kasutada mitut Cage objekti, et mÀÀrata erinevaid vahemĂ€lu seadistusi sĂ”ltuvalt info juurdepÀÀsu eripĂ€rast erinevates failides. Ahnas pĂ”hialgoritmimeetodina rakendatakse lihtsalt vahemĂ€lu: pĂ€rast mÀÀratud mĂ€lumahtude tĂ€itumist tĂ”rjutakse uued lehekĂŒljed vanade arvelt, jĂ€rgides minimaalse pöördumise pĂ”himĂ”tet. VahemĂ€lu on eriti efektiivne ebaĂŒhtlase (statistiliselt) ĂŒhise juurdepÀÀsu korral, esiteks erinevatele failidele ja teiseks iga faili fragmentidele.
Cage klass toetab andmete sisendi/vĂ€ljundi töötlemist mitte ainult andmeaadresside kaudu (tĂ€psustades positsiooni ja massiivi pikkuse, "asendades" failisĂŒsteemi toimingud), vaid ka madalamal, "fĂŒĂŒsilisel" tasemel â vahemĂ€lu lehekĂŒlje numbrite kaudu.
Cage objektide jaoks toetatakse originaalset funktsiooni "hibernatsioon" («samm») â neid saab «kokku kerida» (nĂ€iteks, kui serveritega on ĂŒhendus katkenud vĂ”i rakendus on peatatud jne) kliendi poolel paiknevasse kohalikku dump-faili ning kiiresti taastada see fail (pĂ€rast ĂŒhenduse taastamist, rakenduse uuesti kĂ€ivitamist). See vĂ”imaldab mĂ€rkimisvÀÀrselt vĂ€hendada liiklust kliendi programmi töötamise aktiveerimisel pĂ€rast ajutist «offline» viibimist, kuna sageli kasutatavad failifragmendid on juba vahemĂ€lus.
Cage â see on umbes 3600 koodi rida.
Serverite ehitamise pÔhimÔtted
Cageserveri failiserverid saab kĂ€ivitada suvalise sadamate arvuga, millest ĂŒks («peamine») kasutatakse ainult kĂ”igi klientide autentimiseks, ĂŒlejÀÀnud - andmevahetuseks. Cage serveri programmi jaoks on vajalik vaid Python. Samal ajal vĂ”ib failiserveriga arvuti tĂ€ita ka muid ĂŒlesandeid.
Server kÀivitub esmalt kahel peamisel protsessil:
- «Ăhendused» â protsess, mis tĂ€idab ĂŒhenduse loomise ja selle lĂ”petamise operatsioone klientidega serveri algatusel;
- «Operatsioonid» â protsess, mis tĂ€idab klientide poolt failidega töötamiseks ettenĂ€htud ĂŒlesandeid (operatsioone) ning samuti sulgeb sideseansid klientide korralduste jĂ€rgi.
MĂ”lemad protsessid ei ole sĂŒnkroniseeritud ja on struktureeritud kui lĂ”pmatud sĂ”numite vastuvĂ”tmise ja saatmise tsĂŒklid, mis pĂ”hinevad multiprocess-Queues, vaheobjektidel, lukustustel ja socket'itel.
Protsess «Ăhendused» mÀÀrab igale kliendile andmete edastamiseks ja vastuvĂ”tmiseks sadama. Sadamate arvu mÀÀrab serveri kĂ€ivitamisel. Sadamate ja klientide vaheline vastavus salvestatakse protsesside vahel jagatud proxy-mĂ€lu.
Protsess «Operatsioonid» toetab failide ressursside jagamist, vĂ”imaldades mitmel erineval kliendil koos (kvasiparalleelselt, kuna juurdepÀÀsu hallatakse lukustuste abil) lugeda andmeid ĂŒhest failist, kui see on selle algse avamise ajal «esimese» kliendi poolt lubatud.
Failide loomiseks / kustutamiseks / avamiseks / sulgemiseks esitatud kĂ€sud serveris töödeldakse «Operatsioonid» protsessis rangelt jĂ€rjestikku, kasutades serveri opsĂŒsteemi failialust.
Ăldise lugemise/kirjutamise kiirusestamiseks toimuvad need tegevused protsessis "Operatsioonid" genereeritud lĂ”imedes (threads). LĂ”imede arv on tavaliselt vĂ”rdne avatud failide arvuga. Klientide lugemis-/kirjutamisĂŒlesanded esitatakse ĂŒhisjĂ€rjekorda ja esimene vabanev lĂ”im vĂ”tab ĂŒlesande selle algusest. Eriline loogika vĂ”imaldab vĂ€listada andmete ĂŒlekirjutamise operatsioonid serveri mĂ€lus.
Protsess "Operatsioonid" jĂ€lgib klientide aktiivsust ja lĂ”petab nende teenindamise nii nende kĂ€skudest kui ka mitteaktiivsuse ĂŒletamise tĂ”ttu.
UsaldusvÀÀrsuse tagamiseks jĂ€lgib Cageserver kĂ”iki tehingute logisid. Ăks ĂŒhine logi sisaldab klientide sĂ”numite koopiaid, millel on ĂŒlesanded failide loomise/, avamise/, ĂŒmbernimetamise/ ja kustutamise kohta. Iga tööfaili jaoks luuakse eraldi logi, kuhu kantakse koopiaid sĂ”numitest lugemis- ja kirjutamisĂŒlesannete kohta selle tööfaili sees, samuti kirjutatud (uute) andmete massiivid ja andmete massiivid, mis hĂ€vitati ĂŒle kirjutamise kĂ€igus (uute andmete "peale" kirjutamine vanadele).
Need logid vÔimaldavad taastada uusi muudatusi varukoopiatest ning "tagasi pöörduda" jooksva sisu juurest vajalikku hetke minevikus.
Cageserveri kood sisaldab umbes 3100 rida.

Cageserveri faili serveri programmi kÀivitamine
KÀivitamisel tuleb dialoogis mÀÀrata:
â peamine port autentimiseks;
â autoriseeritud klientidega tehingute vahetamiseks portide arv (alates 1 ja rohkem, nummerdamise jooks algab jĂ€rgmisel pĂ€rast peamise pordi numbrit).
Klassi Cage kasutamine
class cage.Cage( cage_name=», pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file=» )
Selle klassi abil luuakse objekte, mis suhtlevad faili serveritega ja sisaldavad puhvri mÀlu.
Parameetrid
- cage_name(str) â objekti tingimuslik nimetus, mida kasutatakse klientide tuvastamiseks serveri poolel
- pagesize(int) â ĂŒhe puhvri lehe suurus (baitides)
- numpages(int) â puhvri lehtede arv
- maxstrlen(int) â maksimaalne baitide stringi pikkus kirjutamis- ja lugemisoperatsioonides
- server_ip(dict) â sĂ”nastik kasutatavate aadressidega serverid, kus vĂ”ti on serveri tinglik nimi (serveri id rakenduses), ja vÀÀrtus on teekonna string: âip address:portâ vĂ”i âDNS:portâ (nimede ja tegelike aadresside vastavus on ajutine, seda saab muuta)
- ootama(int) â ooteaeg serveri vastuse saamiseks portide saamisel (sekundites)
- Ă€rka ĂŒles(boolean) â objekti loomise meetodi lipp (Vale â kui luuakse uus objekt, TĂ”si â kui objekt luuakse varem âminimeeritudâ olekust - kasutades operatsiooni âhibernatsioonâ, vaikimisi False)
- cache_file(str) â failinimi hibernatsiooni jaoks
Meetodid
Kaitse.file_create( server, tee ) â loo uus fail
Kaitse.file_rename( server, tee, new_name ) â nimeta fail ĂŒmber
Kaitse.file_remove( server, tee) â kustuta fail
Kaitse.open( server, tee, mod ) â avada fail
Tagastab fchannel kanali number. Parameeter mod â see on faili avamise reĆŸiim: âwmâ â monopol, (lugemine/kirjutamine), ârsâ â ainult lugemine, ja teistele klientidele ainult lugemiseks jagatud, âwsâ â lugemine/kirjutamine, ja teistele klientidele ainult lugemiseks jagatud.
Kaitse.sulgeda (fchannel) â sulge fail
Kaitse.kirjutama (fchannel, algus, andmed ) â kirjutada baitstring faili
Kaitse.lugema (fchannel, algus, len_data ) â lugeda baitstring faili
Kaitse.put_pages ( fchannel ) â âpuudutabâ serverilt kĂ”ik antud kanali lehed, mis on muudetud. Kasutatakse algoritmi punktides, kus on oluline, et kĂ”ik operatsioonid kanalil oleksid fĂŒĂŒsiliselt serveris salvestatud.
Kaitse.push_all () â âpuudutabâ serverilt kĂ”ik antud klassi Cage eksemplari kanalite lehed, mis on muudetud. Kasutatakse, kui on oluline, et kĂ”ik operatsioonid kĂ”igil kanalitel oleksid serveris salvestatud.
Allikas: habr.com
