Sistemi i aksesit të largët të skedarëve Cage

Qëllimi i sistemit

Mbështetje për aksesin e largët në skedarët në kompjuterët në rrjet. Sistemi "virtualisht" mbështet të gjitha operacionet kryesore të skedarëve (krijimi, fshirja, leximi, shkrimi etj.) përmes shkëmbimit të transaksioneve (mesazheve) përmes protokollit TCP.

Fushat e aplikimit

Funksionaliteti i sistemit është efikas në rastet e mëposhtme:

  • nĂ« aplikacionet nativ pĂ«r pajisje mobile dhe embedded (smartphone, sisteme tĂ« menaxhimit tĂ« bordit etj.), qĂ« kĂ«rkojnĂ« qasje tĂ« shpejtĂ« nĂ« skedarĂ«t nĂ« serverat e largĂ«t nĂ« kushte tĂ« prirjes pĂ«r ndĂ«rprerje tĂ« mundshme tĂ« lidhjes (duke u shkĂ«putur nĂ« offline);
  • nĂ« TDB tĂ« ngarkuara, nĂ«se pĂ«rpunimi i kĂ«rkesave bĂ«het nĂ« servera tĂ« njĂ«jtĂ«, ndĂ«rsa ruajtja e tĂ« dhĂ«nave - nĂ« tĂ« tjerĂ«;
  • nĂ« rrjetet korporate tĂ« shpĂ«rndara pĂ«r mbledhjen dhe pĂ«rpunimin e informacioneve, qĂ« kĂ«rkojnĂ« shpejtĂ«si tĂ« lartĂ« nĂ« shkĂ«mbimin e tĂ« dhĂ«nave, rezervimin dhe besueshmĂ«rinĂ«;
  • nĂ« sisteme komplekse me arkitekturĂ« mikroshĂ«rbimi, ku vonesat nĂ« shkĂ«mbimin e informacionit midis moduleve kanĂ« njĂ« rĂ«ndĂ«si kritikisht tĂ« madhe.

Struktura

Sistemi Cage (ka një implementim - beta-version në Python 3.7 në sistemin operativ Windows) përfshin dy pjesë kryesore:

  1. Cageserver — programi i serverit tĂ« skedarĂ«ve (paketa e funksioneve) qĂ« aktivizohet nĂ« kompjuterĂ«t nĂ« rrjet, tĂ« cilĂ«ve u nevojitet qasje e largĂ«t nĂ« skedarĂ«;
  2. klasa Cage me një bibliotekë metodash për softuerin klient, që thjeshton kodimin e ndërveprimit me serverët.

Përdorimi i sistemit në anën e klientëve

Metodat e klasës Cage zëvendësojnë operacionet "rutinale" të zakonshme të sistemit të skedarëve: kreu, hapja, mbyllja, fshirja e skedarëve, si dhe leximin/shkrimin e të dhënave në format binar (me përcaktimin e pozicionit dhe madhësisë së të dhënave). Konceptualisht këto metoda janë të afërta me funksionet e skedarëve të gjuhës C, ku apertura/mbyllja e skedarëve bëhet "në kanalet" e hyrjes dhe daljes.

Me fjalë të tjera, programuesi punon jo me metodat e objekteve "skedare" (klasa _io në Python), por me metodat e klasës Cage.

Kur krijohet një instancë e objektit Cage, ai vendos lidhjen fillestare me serverin (ose me disa serverë), kalon autorizimin me Id e klientit dhe merr një konfirmim me numrin e portit të dedikuar për të kryer të gjitha operacionet e skedarëve. Kur objekti Cage fshihet, ai i jep serverit një urdhër për të ndërprerë lidhjen dhe për të mbyllur skedarët. Ndërprerja e lidhjes mund të inicirohet edhe nga vetë serverët.

Sistemi rrit shpejtësinë e leximit/shkrimit duke u bazuar në buffers të fragmenteve të skedarëve që përdoren shpesh nga programet klient në memorie (buffer) RAM.
Programi klient mund të përdorë çdo numër objektesh Cage me cilësime të ndryshme (kapaciteti i memories bufer, madhësia e bllokut gjatë shkëmbimit me serverin etj.).

Një objekt Cage mund të shkëmbejë të dhëna me disa skedarë në disa serverë. Parametrat për lidhjen (adresem IP ose DNS serveri, porta kryesore për autorizimin, rruga dhe emri i skedarit) vendosen gjatë krijimit të objektit.

Duke qenĂ« se çdo objekt Cage mund tĂ« punojĂ« gjithashtu me shumĂ« skedarĂ«, pĂ«r buferizimin pĂ«rdoret njĂ« hapĂ«sirĂ« e pĂ«rbashkĂ«t e memories. MadhĂ«sia e caches – numri i faqeve dhe madhĂ«sia e tyre, caktohet dinamikisht gjatĂ« krijimit tĂ« objektit Cage. PĂ«r shembull, njĂ« cache prej 1 GB Ă«shtĂ« 1000 faqe me nga 1 MB, ose 10,000 faqe me nga 100 KB, ose 1 milion faqe me nga 1 KB. Zgjedhja e madhĂ«sisĂ« dhe numrit tĂ« faqeve Ă«shtĂ« njĂ« detyrĂ« specifike pĂ«r çdo rast aplikativ.

Mund të përdoren njëkohësisht disa objekte Cage, për të përcaktuar cilësime të ndryshme të memories bufer në varësi të karakteristikave të aksesit në informacion në skedarë të ndryshëm. Si bazë përdoret algoritmi më i thjeshtë i buferizimit: pas shterimit të sasisë së caktuar të memories, faqet e reja zëvendësojnë ato të vjetra sipas parimit të përjashtimit me numrin minimal të aksesimeve. Buferizimi është veçanërisht i efektshëm në rastin e aksesit të pandërprerë (në kuptimin statistik) nga ana e ndryshme e skedarëve dhe, nga ana tjetër, e fragmenteve të çdo skedari.

Klasa Cage mbĂ«shtet hyrjen/daljen jo vetĂ«m pĂ«r adresat e tĂ« dhĂ«nave (me pĂ«rcaktimin e pozicionit dhe gjatĂ«si tĂ« masĂ«s, "duke zĂ«vendĂ«suar" operacionet e sistemit tĂ« skedarĂ«ve), por edhe nĂ« njĂ« nivel mĂ« tĂ« ulĂ«t, "fisik" — pĂ«rmes numrave tĂ« faqeve nĂ« memorien bufer.

PĂ«r objektet Cage mbĂ«shtetet funksioni origjinal "hibernimi" («sna») – ato mund tĂ« «mbĂ«shtillen» (p.sh., nĂ« rastin e ndĂ«rprerjes sĂ« lidhjes me serverat, ose kur aplikacioni ndalet etj.) nĂ« njĂ« skedar dump lokal nga ana e klientit dhe shpejt tĂ« rikuperohen nga ky skedar (pas rinovimit tĂ« lidhjes, kur aplikacioni radohidhet). Kjo ofron mundĂ«sinĂ« e reduktimit tĂ« rĂ«ndĂ«sishĂ«m tĂ« trafikĂ«ve kur aktivizohet puna e programit tĂ« klientit pas njĂ« pushimi tĂ« pĂ«rkohshĂ«m «offline», duke qenĂ« se segmentet e shpeshta tĂ« skedarĂ«ve tashmĂ« do tĂ« jenĂ« nĂ« cache.

Cage — janĂ« rreth 3600 rreshta kodi.

Principet e ndërtimit të serverëve

Skedar-serverĂ«t Cageserver mund tĂ« nisen me njĂ« numĂ«r tĂ« rastĂ«sishĂ«m portesh, njĂ« prej tĂ« cilave («nĂ«ntë»), pĂ«rdoret vetĂ«m pĂ«r autorizimin e tĂ« gjithĂ« klientĂ«ve, ndĂ«rsa tĂ« tjerat — pĂ«r shkĂ«mbimin e tĂ« dhĂ«nave. PĂ«r programin e serverit Cage nevojitet vetĂ«m Python. NĂ« tĂ« njĂ«jtĂ«n kohĂ«, kompjuteri me serverin e skedarĂ«ve mund tĂ« kryejĂ« çdo punĂ« tjetĂ«r.

Serveri nishet në fillim si një grup dy procesesh kryesore:

  1. «Lidhjet» – procesi pĂ«r tĂ« kryer operacione lidhjeje me klientĂ«t dhe pĂ«r ta ndĂ«rprerĂ« atĂ« me iniciativĂ«n e serverit;
  2. «Operacione» – procesi pĂ«r tĂ« kryer detyra (operacione) tĂ« klientĂ«ve pĂ«r punĂ«n me skedarĂ«t, si dhe pĂ«r tĂ« mbyllur seancat e lidhjes sipas komandave tĂ« klientĂ«ve.

Të dy proceset nuk janë të sinkronizuara dhe organizohen si cikle të pafundme të pranimit dhe dërgimit të mesazheve mbi bazën e radhëve multi-proces, objekteve proxy, bllokimeve dhe socket-eve.
Procesi «Lidhjes» ndan një port për pranimin dhe dërgimin e të dhënave për secilin klient. Numri i porteve përcaktohet në fillim të serverit. Përputhshmëria midis porteve dhe klientëve ruhet në memorien proxy të ndarë ndërmjet proceseve.

Procesi «Operacione» mbështet ndarjen e burimeve skedare, kurse disa klientë të ndryshëm mund të lexojnë së bashku (kvasiparalelisht, pasi qasja menaxhohet nga bllokimet) të dhëna nga një skedar, nëse kjo është lejuar gjatë hapjes fillestare nga «klienti» i parë.

Punimi i komandave për krijimin/zhbllokimin/hapjen/mbylljen e skedarëve server kryhet në vetë procesin e «Operacioneve» në mënyrë të rreptë, duke përdorur sistemin e skedarëve të OS-të së serverit.

Për të përshpejtuar leximin/shkrimin, këto operacione kryhen në thread-e që krijohen nga procesi "Operacione". Numri i thread-eve është zakonisht i barabartë me numrin e skedarëve të hapur. Detyrat për lexim/shkrim nga klientët dorëzohen në një radhë të përbashkët dhe thread-i i parë që çlirohet merr detyrën nga fillimi i saj. Logjika e veçantë lejon përjashtimin e operacioneve të rimarrjes së të dhënave në memorien e përhershme të serverit.

Procesi "Operacione" ndjek aktivitetin e klientëve dhe ndalon shërbimin e tyre si sipas urdhrave të tyre, ashtu edhe kur kalon koha e pritjes për pasivitet.

Për të siguruar besueshmërinë, Cageserver mban ditarë të të gjitha transaksioneve. Një ditar i përbashkët përmban kopje të mesazheve nga klientët me detyrat për krijimin/ hapjen/ rinovimin/ fshirjen e skedarëve. Për çdo skedar në punë krijohet një ditar i veçantë, në të cilin regjistrohen kopjet e mesazheve me detyrat për lexim dhe shkrim të të dhënave në këtë skedar, si dhe masat e të dhënave që janë shkruar (të reja) dhe masat e të dhënave që janë shkatërruar gjatë rimarrjes (shkrimit të të dhënave të reja "në sipër të" atyre të vjetra).

Këta ditarë ofrojnë mundësinë për restaurimin e ndryshimeve të reja në kopje rezervë si dhe për "rikthimin" nga përmbajtja aktuale në një moment të caktuar në të kaluarën.

Cageserver ka rreth 3100 rreshta kodi.

Sistemi i aksesit të largët të skedarëve Cage

Fillimi i programit të serverit të skedarëve Cageserver

Gjithashtu, gjatë fillimit në dialog duhet të përcaktohet:
— porta kryesore pĂ«r autorizim;
— numri i porteve pĂ«r shkĂ«mbimin e transaksioneve me klientĂ«t e autorizuar (nga 1 dhe mĂ« shumĂ«, grupi numrave fillon nga numri pas numrit kryesor tĂ« portĂ«s).

Përdorimi i klasës Cage

class cage.Cage( cage_name=», pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file=»» )

Nga kjo klasë krijohen objekte, të cilat kryejnë ndërveprimin me serverët e skedarëve dhe përmbajnë memorien bufer.

Parametrat

  • cage_name(str) — emri i kushtĂ«zuar i objektit, i cili pĂ«rdoret gjatĂ« identifikimit tĂ« klientĂ«ve nĂ« anĂ«n e serverit
  • pagesize(int) — madhĂ«sia e njĂ« faqe tĂ« memories bufer (nĂ« byte)
  • numpages(int) — numri i faqeve tĂ« memories bufer
  • maxstrlen(int) — maksimalja e gjatĂ«si sĂ« vargut nĂ« operacionet e shkrimit dhe leximit
  • server_ip(dict) — njĂ« fjalor me adresat e pĂ«rdorura serverĂ«sh, ku çelĂ«si Ă«shtĂ« emri kushtor i serverit (id e serverit brenda aplikacionit), dhe vlera Ă«shtĂ« njĂ« string me adresĂ«n: “ip address:port” ose “DNS:port” (pĂ«rputhja e emrave me adresat reale Ă«shtĂ« pĂ«rkohshme, mund tĂ« ndryshohet)
  • prisni(int) — koha e pritjes pĂ«r pĂ«rgjigje nga serveri gjatĂ« marrjes sĂ« porteve (nĂ« sek.)
  • zgjohem(boolean) — flamuri i mĂ«nyrĂ«s sĂ« krijimit tĂ« objektit (False — nĂ«se krijohet njĂ« objekt i ri, E vĂ«rtetĂ« — nĂ«se objekti krijohet nga njĂ« ‘hibernuar’ mĂ« parĂ« — duke aplikuar operacionin ‘hibernimi’, pĂ«r nga e drejta False)
  • cache_file(str) — emri i skedarit pĂ«r hibernimin

Metodat

Kapsula.file_create( server, rruga ) – krijo njĂ« skedar tĂ« ri

Kapsula.file_rename( server, rruga, emri_i_ridhen ) – ndrysho emrin e skedarit

Kapsula.file_remove( server, rruga) – fshi skedarin

Kapsula.open( server, rruga, mod ) – hap skedarin

Kthen fchannel numri i kanalit. Parametri mod — ky Ă«shtĂ« regjimi i hapjes sĂ« skedarit: ‘wm’ — monopol (lexim/shkrim), ‘rs’ — vetĂ«m leximi, dhe e ndarĂ« vetĂ«m pĂ«r lexim nga klientĂ«t e tjerĂ«, ‘ws’ — lexim/shkrim, dhe e ndarĂ« vetĂ«m pĂ«r lexim nga klientĂ«t e tjerĂ«.

Kapsula.close (fchannel) – mbyll skedarin

Kapsula.write (fchannel, fillim, tĂ« dhĂ«na ) – shkruaj njĂ« varg byte nĂ« skedar

Kapsula.read (fchannel, fillim, len_data ) – lexoj njĂ« varg byte nga skedari

Kapsula.put_pages ( fchannel ) – ‘shtyn’ nga buffer nĂ« server tĂ« gjitha faqet e kanalit tĂ« specifikuar, qĂ« janĂ« modifikuar. PĂ«rdoret nĂ« pikat e algoritmit, kur duhet tĂ« jemi tĂ« sigurt se tĂ« gjitha operacionet nĂ« kanal janĂ« ruajtur fizikisht nĂ« skedar nĂ« server.

Kapsula.push_all () – ‘shtyn’ nga buffer nĂ« server tĂ« gjitha faqet e tĂ« gjitha kanaleve pĂ«r instancĂ«n e klasĂ«s Cage, qĂ« janĂ« modifikuar. PĂ«rdoret kur duhet tĂ« jemi tĂ« sigurt se tĂ« gjitha operacionet nĂ« tĂ« gjitha kanalet janĂ« ruajtur nĂ« server.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster