KaugsalvestussĂŒsteem Cage

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:

  1. Cageserver — programmifailiserver (funktsioonide komplekt), mis töötab vĂ”rgus arvutites, millele on vajalik kaugjuurdepÀÀs failidele;
  2. 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:

  1. „Ühendused“ – protsess, mis tegeleb ĂŒhenduste loomise ja lĂ”petamisega klientidega serveri algatusel;
  2. „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.

KaugsalvestussĂŒsteem Cage

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

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster