Sistemi i aksesit të skedarëve në distancë Cage

Qëllimi i sistemit

Mbështetje për akses të 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ëmbimeve të transaksioneve (mesazheve) në protokollin TCP.

Fushat e aplikimit

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

  • nĂ« aplikacione native pĂ«r pajisje mobile dhe embedded (smartphone, sisteme tĂ« menaxhimit nĂ« bord etj.), qĂ« kĂ«rkojnĂ« qasje tĂ« shpejtĂ« nĂ« skedarĂ«t nĂ« serverat e largĂ«t nĂ« kushte tĂ« mundshme ndĂ«rprerjesh tĂ« pĂ«rkohshme nĂ« lidhje (shkarkimi nĂ« offline);
  • nĂ« DBMS tĂ« ngarkuar, nĂ«se pĂ«rpunimi i kĂ«rkesave kryhet nĂ« serverĂ« tĂ« ndryshĂ«m, ndĂ«rsa ruajtja e tĂ« dhĂ«nave – nĂ« serverĂ« tĂ« tjerĂ«;
  • nĂ« rrjete tĂ« shpĂ«rndara korporative pĂ«r mbledhjen dhe pĂ«rpunimin e informacionit, qĂ« kĂ«rkojnĂ« shpejtĂ«si tĂ« lartĂ« nĂ« shkĂ«mbimin e tĂ« dhĂ«nave, rezervim dhe besueshmĂ«ri;
  • nĂ« sisteme komplekse me arkitekturĂ« mikroshĂ«rbimesh, ku vonesat nĂ« shkĂ«mbimin e informacionit midis moduleve janĂ« kritikisht tĂ« rĂ«ndĂ«sishme.

Struktura

Sistemi Cage (ka njĂ« realizim – beta version nĂ« Python 3.7 nĂ« OS Windows) pĂ«rfshin dy pjesĂ« kryesore:

  1. Cageserver — njĂ« program skedar serveri (paketĂ« funksionesh) qĂ« ekzekutohet nĂ« kompjuterĂ«t nĂ« rrjet, pĂ«r skedarĂ«t e tĂ« cilĂ«ve Ă«shtĂ« i nevojshĂ«m aksesimi i largĂ«t;
  2. klasa Cage me një bibliotekë metodash për softuerin e klientit, që thjeshton kodimin e bashkëpunimit me serverët.

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

Metodat e klasës Cage zëvendësojnë operacionet e zakonshme, "rutinale" të sistemit të skedarëve: krijimi, hapja, mbyllja, fshirja e skedarëve, si dhe leximi/shkrimi i të dhënave në format binar (me përcaktimin e pozitës dhe madhësisë së të dhënave). Konceptualisht, këto metoda janë të afërta me funksionet e skedarëve në gjuhën C, ku hapja/mbyllja e skedarëve kryhet "në kanalet" e hyrje-daljes.

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

Gjatë krijimit të një ekzemplar të objektit Cage, ai vendos lidhjen fillestare me serverin (ose disa serverë), kalon autentifikimin përmes ID-së së klientit dhe merr konfirmimin me numrin e portit të caktuar për kryerjen e të gjitha operacioneve me skedarë. Gjatë fshirjes së objektit Cage, ai lëshon komandën për serverin për të ndaluar lidhjen dhe për të mbyllur skedarët. Ndërprerjen e lidhjes mund ta inicirojnë edhe vetë serverët.

Sistemi rrit performancën e leximit/shkrimit duke bazuar në buferimin e fragmenteve të përdorura shpesh të skedarëve nga programet klient në cache (bufer) të memories operative.
Programi klient mund të përdorë çdo numër objektesh Cage me konfigurime të ndryshme (kapaciteti i memories bufer, madhësia e blloqeve 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 (adresa IP ose DNS e serverit, porta kryesore për autentifikim, rruga dhe emri i skedarit) caktohen gjatë krijimit të objektit.

Pasqyra e secilit objekt Cage mund tĂ« punojĂ« njĂ«kohĂ«sisht me shumĂ« skedare, duke pĂ«rdorur njĂ« hapĂ«sirĂ« tĂ« pĂ«rbashkĂ«t memorie pĂ«r buferimin. MadhĂ«sia e caches – numri dhe madhĂ«sia e faqeve – pĂ«rcaktohet dinamikisht gjatĂ« krijimit tĂ« objektit Cage. PĂ«r shembull, njĂ« cache prej 1 GB Ă«shtĂ« 1000 faqe me nga 1 MB, ose 10 mijĂ« 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 aplikimi.

ËshtĂ« e mundur tĂ« pĂ«rdoren disa objekte Cage njĂ«kohĂ«sisht pĂ«r tĂ« pĂ«rcaktuar cilĂ«sime tĂ« ndryshme tĂ« memorie buferi nĂ« varĂ«si tĂ« veçorive tĂ« aksesit nĂ« informacion nĂ« skedare tĂ« ndryshme. Si bazĂ« aplikohet algoritmi mĂ« i thjeshtĂ« i buferimit: pas shpenzimit tĂ« sasisĂ« sĂ« caktuar tĂ« memories, faqe tĂ« reja zĂ«vendĂ«sojnĂ« tĂ« vjetrat sipas parimit tĂ« eliminimit me numrin minimal tĂ« kĂ«rkesave. Buferimi Ă«shtĂ« veçanĂ«risht efektiv nĂ« rastin e qasjes sĂ« pandershme (nĂ« kuptimin statistik) tĂ« pĂ«rbashkĂ«t, sĂ« pari, nĂ« skedare tĂ« ndryshme dhe, sĂ« dyti, nĂ« fragmente tĂ« çdo skedari.

Klasa Cage mbĂ«shtet hyrje/dalje jo vetĂ«m pĂ«r adresat e tĂ« dhĂ«nave (me specifikimin e pozitĂ«s dhe gjatĂ«si tĂ« vargut, "duke zĂ«vendĂ«suar" operacionet e sistemit tĂ« skedarĂ«ve), por edhe nĂ« njĂ« nivel mĂ« tĂ« ulĂ«t, "fisik" — sipas numrave tĂ« faqeve nĂ« memorie.

PĂ«r objektet Cage mbĂ«shtetet funksioni origjinal "hibernimit" ("gjumit") – ato mund tĂ« "minimizohen" (p.sh., nĂ« rast tĂ« ndĂ«rprerjes sĂ« lidhjes me serverĂ«t, ose kur ndalon aplikacionin, etj.) nĂ« njĂ« skedar lokal dump nĂ« anĂ«n e klientit dhe tĂ« rikuperohen shpejt nga ky skedar (pas rinovimit tĂ« lidhjes, kur aplikacioni fillon pĂ«rsĂ«ri). Kjo e bĂ«n tĂ« mundur reduktimin e konsiderueshĂ«m tĂ« trafikut gjatĂ« aktivizimit tĂ« programit klient pas njĂ« largimi tĂ« pĂ«rkohshĂ«m "offline", pasi fragmentet e zakonshme tĂ« skedarĂ«ve do tĂ« jenĂ« tashmĂ« nĂ« cache.

Cage përmban rreth 3600 rreshta kodi.

Principet e ndërtimit të serverëve

Serverat e skedarëve Cageserver mund të fillojnë me një numër të pakufizuar portesh, një prej të cilëve («principal») përdoret vetëm për të autorizuar të gjithë klientët, ndërsa të tjerët për shkëmbimin e të dhënave. Programi i serverit Cage kërkon vetëm Python. Ndërkohë, kompjuteri me serverin e skedarëve mund të kryejë çdo punë tjetër.

Serveri fillon si një grup i dy proceseve kryesore:

  1. «Lidhjet» – procesi pĂ«r realizimin e operacioneve tĂ« lidhjes me klientĂ«t dhe mbylljes sĂ« saj sipas iniciativĂ«s sĂ« serverit;
  2. «Operacionet» – procesi pĂ«r kryerjen e detyrave (operacioneve) tĂ« klientĂ«ve lidhur me skedarĂ«t, si dhe pĂ«r mbylljen e seancave tĂ« lidhjes sipas komandeve tĂ« klientĂ«ve.

Të dy proceset nuk janë të sinkronizuara dhe janë organizuar si cikle të pafund të pranimit dhe dërgimit të mesazheve mbi bazën e radhëve të shumëproceseve, objekteve proxy, bllokimeve dhe soketeve.
Procesi «Lidhjet» i alokon çdo klienti një port për dërgimin-marrjen e të dhënave. Numri i porteve përcaktohet gjatë fillimit të serverit. Korrespondenca midis porteve dhe klientëve ruhet në një memorie proxy të përbashkët midis proceseve.

Procesi 'Operacione' mbështet ndarjen e burimeve të skedarëve, ndërsa disa klientë të ndryshëm mund të lexojnë të dhëna nga një skedar të njëkohshëm (quasi-paralelisht, pasi aksesin e menaxhon bllokimi) nëse kjo është lejuar gjatë hapjes fillestare 'nga' klienti i parë.

Përpunimi i komandave për krijimin/fshirjen/hapjen/mbylljen e skedarëve në serveri kryhet në vetë procesin 'Operacione' në mënyrë rigoroze radhazi duke përdorur sistemin e skedarëve të OS-së së serverit.

Për të përshpejtuar të lexuarit/shkruarit, këto operacione realizohen nëThreads, të krijuara nga procesi 'Operacione'. Numri i Threads, zakonisht, është i barabartë me numrin e skedarëve të hapur. Detyrat për lexim/shkrim nga klientët paraqiten në një radhë të përbashkët dhe Threads i lirë parë merr detyrën nga kreu i saj. Logjika speciale lejon përjashtimin e operacioneve të ripërsëritjes së të dhënave në memorien operative të serverit.

Procesi 'Operacione' monitoron aktivitetin e klientëve dhe ndalon shërbimin e tyre si sipas komandave të tyre ashtu edhe kur kalon kohën e pritjes për mosveprim.

Për të siguruar besueshmërinë, Cageserver mban regjistrat e të gjitha transaksioneve. Një regjistër i përgjithshëm përmban kopje të mesazheve nga klientët me porosi për krijimin/hapjen/riemërimin/fshirjen e skedave. Për secilën skedë pune krijohet një regjistër i veçantë, në të cilin regjistrohen kopje të mesazheve me porosi për leximin dhe shkrimin e të dhënave në këtë skedë pune, si dhe masat e të dhënave të shkruara (të reja) dhe masat e të dhënave që janë shkatërruar gjatë mbivendosjes (shkrimi i të dhënave të reja "mbi" të vjetrat).

Këto regjistra sigurojnë mundësinë si për rikuperimin e ndryshimeve të reja në kopjet rezervë, ashtu edhe për "kthimin" nga përmbajtja aktuale në momentin e dëshiruar në të kaluarën.

Cageserver është rreth 3100 rreshta kodi.

Sistemi i aksesit të skedarëve në distancë Cage

Nisja e programit të serverit të skedave Cageserver

Gjatë nisjes në dialog duhet të përcaktohen:
— porti kryesor pĂ«r autorizimin;
— numri i porteve pĂ«r shkĂ«mbimin e transaksioneve me klientĂ«t e autorizuar (nga 1 apo mĂ« shumĂ«, grupi i numrave fillon nga numri pas atij tĂ« portit kryesor).

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 që ndërveprojnë me serverët e skedarëve dhe përmbajnë memorie ndërmjetëse.

Parametrat

  • cage_name(str) — emri konvencional i objektit qĂ« pĂ«rdoret pĂ«r identifikimin e klientĂ«ve nĂ« anĂ«n e serverit.
  • pagesize(int) — madhĂ«sia e njĂ« faqeje nĂ« memorien ndĂ«rmjetĂ«se (nĂ« byte).
  • numpages(int) — numri i faqeve nĂ« memorien ndĂ«rmjetĂ«se.
  • maxstrlen(int) — gjatĂ«sia maksimale e vargut nĂ« operacionet e shkruarjes dhe leximit.
  • server_ip(dict) — fjalori me adresat e pĂ«rdorura, ku çelĂ«si Ă«shtĂ« emri konvencional i serverit (id e serverit brenda aplikacionit), ndĂ«rsa vlera Ă«shtĂ« njĂ« varg me adresen: “ip adresa:port” ose “DNS:port” (pĂ«rputhja e emrave dhe adresave reale Ă«shtĂ« pĂ«rkohshme, mund tĂ« ndryshohet). servera, ku çelĂ«si Ă«shtĂ« emri konvencional i serverit (id e serverit brenda aplikacionit), dhe vlera Ă«shtĂ« njĂ« string me adresĂ«n: “adresa ip:port” ose “DNS:port” (korrigjimi i emrave dhe adresave reale — pĂ«rkohĂ«sor, mund tĂ« ndryshohet)
  • wait(int) — koha e pritjes pĂ«r pĂ«rgjigje nga serveri gjatĂ« marrjes sĂ« porteve (nĂ« sekonda).
  • awake(boolean) — flamuri i mĂ«nyrĂ«s sĂ« krijimit tĂ« objektit (False — nĂ«se krijohet njĂ« objekt i ri, True — nĂ«se objekti krijohet nga njĂ« "shkurtuar" i mĂ«parshĂ«m — duke pĂ«rdorur operacionin e "hibernimit", e cila Ă«shtĂ« e paracaktuar False).
  • cache_file(str) — emri i skedarit pĂ«r hibernim.

Metodat

Cage.file_create( server, path ) – krijo njĂ« skedar tĂ« ri.

Cage.file_rename( server, path, new_name ) – riemĂ«ro skedarin.

Cage.file_remove( server, path) – fshi skedarin.

Cage.open( server, path, mod ) – hap skedarin.

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

Cage.close (fchannel) – mbyll skedarin

Cage.shkruaj (fchannel, fillim, tĂ« dhĂ«na ) – shkruan njĂ« varg bajtĂ«sh nĂ« skedar

Cage.read (fchannel, fillim, len_data ) – lexon njĂ« varg bajtĂ«sh nga skedari

Cage.put_pages ( fchannel ) – «shtyn» nga buferi nĂ« server tĂ« gjithĂ« faqet e kanalit tĂ« specifikuar qĂ« janĂ« modifikuar. PĂ«rdoret nĂ« ato pika tĂ« algoritmit kur duhet tĂ« jesh i sigurt se tĂ« gjitha operacionet nĂ« kanal janĂ« ruajtur fizikisht nĂ« skedarin nĂ« server.

Cage.push_all () – «shtyn» nga buferi 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Ă« jesh i sigurt se tĂ« gjitha operacionet nĂ« tĂ« gjitha kanalet janĂ« ruajtur nĂ« server.

Burimi: habr.com

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