SĂŒsteemi otstarve
Toetab kaugjuurdepÀÀsu failidele arvutites vĂ”rgus. SĂŒsteem toetab 'virtuaalselt' kĂ”iki peamisi failihalduse operatsioone (loomine, kustutamine, lugemine, kirjutamine jne) tehingute (sĂ”numite) vahetamise kaudu TCP-protokolli abil.
Rakendusvaldkonnad
SĂŒsteemi funktsionaalsus on efektiivne jĂ€rgmistel juhtudel:
- natiivsetes rakendustes mobiilsetes ja sisse ehitatud seadmetes (nutitelefonid, pardajuhtimisseadmed jne), mis vajavad kiiret juurdepÀÀsu failidele kaugserverites tĂ”enĂ€oliste sidekatkestuste olukordades (offline reĆŸiimil);
- koormatud andmebaasides, kus pĂ€ringute töötlemine toimub ĂŒhel serveril, kuid andmete salvestamine teisel;
- jaotatud ettevÔtte vÔrkudes andmete kogumiseks ja töötlemiseks, mis nÔuab kiiret andmevahetust, varundamist ja usaldusvÀÀrsust;
- keerulistes sĂŒsteemides, millel on mikroteenuste arhitektuur, kus teabe vahetuse viivitused moodulite vahel on kriitilise tĂ€htsusega.
Struktuur
Cage sĂŒsteem (toimiv beta-versioon Python 3.7 operatsioonisĂŒsteemis Windows) sisaldab kahte peamist osa:
- Cageserver â programmifailiserver (funktsioonide komplekt), mis töötab vĂ”rgus arvutites, millele on vajalik kaugjuurdepÀÀs failidele;
- klass Cage koos kliendi tarkvara meetodite teegiga, mis lihtsustab serveritega suhtlemise kodeerimist.
SĂŒsteemi kasutamine kliendi poolt
Klassi Cage meetodid asendavad tavalised, "rutiinsed" failisĂŒsteemi toimingud: failide loomine, avamine, sulgemine, kustutamine ja, samuti andmete lugemine/kirjutamine binaarses formaadis (andmete positsiooni ja suuruse nĂ€itamisega). Kontseptuaalselt 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 (klassi _io Pythonis) meetoditega, vaid klassi Cage meetoditega.
Objekti Cage loomisel luuakse algne side serveriga (vÔi mitme serveriga), toimub kliendi ID kaudu autoriseerimine ja saadakse kinnituskood eraldatud sadama numbri jaoks, mis on vajalik kÔigi failitehingute teostamiseks. Cage objekti eemaldamisel saadetakse serverile kÀsk side lÔpetamiseks ja failide sulgemiseks. Side katkestamist vÔivad algatada ka serverid.
SĂŒsteem suurendab lugemise/kirjutamise jĂ”udlust, pĂ”hinedes kliendiprogrammide sageli kasutatavate failifragmendi vahemĂ€lu (mĂ€lu) baasil.
Klienditarkvara vÔib kasutada suvalist arvu Cage objekte erinevate seadistustega (vahemÀlu suurus, plokkide suurus serveriga vahetamisel jne).
Ăks Cage objekt vĂ”ib vahetada andmeid mitme faili ja mitme serveriga. Ăhenduse parameetrid (serveri IP-aadress vĂ”i DNS, autoriseerimise pĂ”hikaabel, faili tee ja nimi) mÀÀratakse objekti loomisel.
Kuna iga Cage objekt vĂ”ib samal ajal töötada mitme failiga, kasutatakse vahemĂ€lu jaoks ĂŒhist mĂ€luressursi. VahemĂ€lu suurus â lehtede arv ja nende suurus â mÀÀratakse dĂŒnaamiliselt Cage objekti loomisel. NĂ€iteks 1 GB vahemĂ€lu on 1000 lehte, igaĂŒhe suurus 1 MB, vĂ”i 10 000 lehte, igaĂŒhe suurus 100 KB, vĂ”i 1 miljon lehte, igaĂŒhe suurus 1 KB. Suure ja lehtede arvu valik on konkreetne ĂŒlesanne iga rakenduse puhul.
Saab samaaegselt kasutada mitut Cage objekti, et mÀÀrata erinevaid vahemĂ€lu seadeid, mis sĂ”ltuvad erinevate failide teabele juurde pÀÀsemise omadustest. Alusena kasutatakse lihtsaimat vahemĂ€lumehhanismi: kui mÀÀratud mĂ€lu maht on ammendatud, tĂ”ukavad uued lehed vĂ€lja vanad minimaalsete juurdepÀÀsude arvu alusel. VahemĂ€lu on eriti efektiivne ebaĂŒhtlase (statistilisest vaatepunktist) koosjuhtimise korral, esiteks erinevate failidega ja teiseks iga faili fragmentidega.
Klasse Cage toetab andmete sisendit/ vĂ€ljundit mitte ainult andmeaadresside kaudu (mÀÀrates massiivi asukoha ja pikkuse, "asendades" failisĂŒsteemi toimingud), vaid ka madalamal, "fĂŒĂŒsilisel" tasemel nagu mĂ€lulehtede numbrite kaudu.
Cage objektide jaoks toetatakse originaalset funktsiooni "hibernatsiooni" ("une") â neid saab "kokku voltida" (nĂ€iteks serveritega ĂŒhenduse katkemisel vĂ”i rakenduse peatamisel jne) kohalikku dump-faili kliendi poolel ja kiiresti taastada sellest failist (pĂ€rast ĂŒhenduse taastamist, rakenduse uuesti kĂ€ivitamisel). See vĂ€hendab oluliselt liiklust, kui kliendiprogramm aktiveeritakse pĂ€rast ajutist "offline" viibimist, kuna sagedasti kasutatavad failifragmentide osad on juba vahemĂ€lu salvestatud.
Cage koosneb umbes 3600 koodireast.
Serverite ehitamise pÔhimÔtted
Cageserveri failiserverid saavad töötada suvalise arvu portidega, millest ĂŒks (âpĂ”hiportâ) kasutatakse ainult kĂ”igi klientide autoriseerimiseks, ĂŒlejÀÀnud aga andmevahetuseks. Cage'i serveri programm vajab ainult Pythonit. Failiserveriga arvuti saab samal ajal tĂ€ita ka muid ĂŒlesandeid.
Server algab esmalt kahe pÔhiprotsessi kogumina:
- âĂhendusedâ â protsess, mis tegeleb ĂŒhenduste loomise ja lĂ”petamisega klientidega serveri algatusel;
- âOperatsioonidâ â protsess, mis tegeleb klientide failide töötlemise ĂŒlesannete tĂ€itmise ja ĂŒhenduste sulgemisega klientide kĂ€sul.
MĂ”lemad protsessid ei ole sĂŒnkroniseeritud ning on korraldatud lĂ”puteks spĂ€mmerimiste ja sĂ”numite saatmise tsĂŒkliteks mitme protsessi jĂ€rjekordade, puhversalvamise, lukustuste ja socket'ite alusel.
âĂhenduseâ protsess mÀÀrab igale kliendile andmevahetuse porti. Portide arv mÀÀratakse serveri kĂ€ivitamisel. Portide ja klientide vastavus hoitakse protsesside vahel jagatud puhversalves.
Protsess "Operatsioonid" toetab failide ressursside jagamist, vĂ”imaldades mitmel erineval kliendil koos (kvasiparaalselt, kuna juurdepÀÀs on hallatav lukustuste kaudu) lugeda andmeid ĂŒhest failist, kui see on esialgse avamise ajal "esimese" kliendi poolt lubatud.
KĂ€skluste töötlemine failide loomise / kustutamise / avamise / sulgemise kohta serveril toimub protsessis "Operatsioonid" rangelt jĂ€rjestikuselt serveri OS failisĂŒsteemi kasutades.
Ăhise lugemise / kirjutamise kiirendamiseks toimuvad need toimingud voogudes (threads), mille loob protsess "Operatsioonid". Tavaliselt on voogude arv vĂ”rdsed avatud failide arvuga. Kliendilt saadetud lugemise / kirjutamise ĂŒlesanded esitatakse ĂŒhisesse jĂ€rjekorda ning esimene vabanev voog haarab ĂŒlesande selle algusest. Eriline loogika vĂ€listab andmete ĂŒle kirjutamise operatiivmĂ€lu serveris.
Protsess "Operatsioonid" jĂ€lgib klientide tegevust ja lĂ”petab nende teenindamise nii nende kĂ€skluste alusel kui ka mitteaktiivsuse ajast ĂŒletamisel.
UsaldusvÀÀrsuse tagamiseks Cageserver peab kĂ”iki tehingute logisid. Ăks ĂŒhine logi sisaldab klientide sĂ”numite koopiaid, mis kĂ€sitlevad failide loomist/avatust/ĂŒmbernimetamist/kustutamist. Iga tööfaili jaoks luuakse eraldi logi, kuhu kantakse koopiaid sĂ”numitest, mis kĂ€sitlevad seadistusi andmete lugemiseks ja kirjutamiseks selles tööfailis, samuti salvestatud (uus) andmete massiivid ja andmete massiivid, mis said kustutatud kirjutamise ajal (uute andmete âkirjutamiselâ vanadele).
Need logid vĂ”imaldavad nii uute muudatuste taastamist varukoopiatest kui ka âtagasi kerimistâ praegusest sisust soovitud aega minevikus.
Cageserveri kood hÔlmab umbes 3100 rida.

Cageserveri failiserveri programmi kÀivitamine
KÀivitamisel tuleb dialoogis mÀÀrata:
â peamine port autoriseerimiseks;
â portide arv tehingute vahetamiseks autoriseeritud klientidega (alates 1-st ja rohkem, numbrite vahemik algab jĂ€rgmisega 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=»» )
Sellest klassist luuakse objekte, mis suhtlevad failiserveritega ja sisaldavad puhvri mÀlu.
Parameetrid
- cage_name(str) â objekti tingimuslik nimi, mida kasutatakse klientide identifitseerimiseks serveri poolel
- pagesize(int) â ĂŒhe puhvri mĂ€lulehe suurus (baitides)
- numpages(int) â puhvri mĂ€lu lehtede arv
- maxstrlen(int) â maksimaalne baitide stringi pikkus kirjutamise ja lugemise operatsioonides
- server_ip(dict) â sĂ”nastik kasutatavate aadressidega serverite, kus vĂ”tmena on objekti tingimuslik nimi (serveri id rakenduses) ja vÀÀrtuseks on aadressi string: âip address:portâ vĂ”i âDNS:portâ (nimede ja tegelike aadresside sidumine on ajutine, seda saab muuta)
- wait(int) â vastuse ootamisaja kestus serverilt sadamate saamisel (sekundites)
- awake(boolean) â objekti loomise meetodi lipp (False â kui luuakse uus objekt, True â kui objekt luuakse varasemalt âjustitudâ olekust â kasutades âhibernatsiooniâ operatsiooni, vaikevÀÀrtus on vale)
- cache_file(str) â hibernateerimise failinimi
Meetodid
Kehav.file_create( server, path ) â loo uus fail
Kehav.file_rename( server, path, new_name ) â muuda faili nime
Kehav.file_remove( server, path) â kustuta fail
Kehav.open( server, path, mod ) â avamine fail
Tagastab fchannel kanali number. Parameeter mod â see fail avamise reĆŸiim: âwmâ â monopolne (lugemine/kirjutamine), ârsâ â ainult lugemine ja teiste klientide poolt jagatud lugemine, âwsâ â lugemine/kirjutamine ning teistele klientidele jagatud ainult lugemiseks.
Kehav.close (fchannel) â sulge fail
Kehav.write (fchannel, begin, data ) â kirjuta baitide string faili
Kehav.read (fchannel, begin, len_data ) â loe baitide string faili
Kehav.put_pages ( fchannel ) â âvabastabâ serverisse kĂ”ik mÀÀratud kanali muudetud lehed puhvrist. Kasutatakse nendes algoritmi punktides, kus on oluline olla kindel, et kĂ”ik toimingud kanalil on fĂŒĂŒsiliselt salvestatud failis serveris.
Kehav.push_all () â âvabastabâ serverisse kĂ”ik mÀÀratud klassi Cage instantsi kĂ”igi kanalite muudetud lehed puhvrist. Kasutatakse, kui on oluline olla kindel, et kĂ”ik toimingud kĂ”ikidel kanalitel on serveris salvestatud.
Allikas: habr.com
