Kaugfailide juurdepÀÀsusĂŒsteem Cage

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:

  1. Cageserver — failiserveri programm (funktsioonide pakett), mis kĂ€ivitatakse vĂ”rgus asuvatel arvutitel, mille failidele on vajalik kaugjuurdepÀÀs;
  2. 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:

  1. Â«Ăœhendused» – protsess, mis tĂ€idab ĂŒhenduse loomise ja selle lĂ”petamise operatsioone klientidega serveri algatusel;
  2. «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.

Kaugfailide juurdepÀÀsusĂŒsteem Cage

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

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster