Cage Urruneko Fitxategietarako Sarbide Sistema

Sistemaren xedea

Sareko ordenagailuetan fitxategietara urruneko sarbidea izateko laguntza. Sistemak "ia" onartzen ditu oinarrizko fitxategien eragiketa guztiak (sortzea, ezabatzea, irakurtzea, idaztea, etab.) TCP protokoloa erabiliz transakzioak (mezuak) trukatuz.

aplikazioetan

Sistemaren funtzionaltasuna eraginkorra da kasu hauetan:

  • gailu mugikor eta txertatuetarako jatorrizko aplikazioetan (smartphones, board-eko kontrol-sistemak, etab.) urruneko zerbitzarietako fitxategietara sarbide azkarra eskatzen duten komunikazioan aldi baterako etenaldi posibleen aurrean (offlinearekin);
  • kargatutako DBMSetan, kontsultaren prozesamendua zerbitzari batzuetan egiten bada, eta beste batzuetan datuak biltegiratzea;
  • Informazioa biltzeko eta prozesatzeko sare korporatibo banatuetan, abiadura handiko datu-trukea, erredundantzia eta fidagarritasuna eskatzen dutenak;
  • mikrozerbitzuen arkitektura duten sistema konplexuetan, non moduluen arteko informazio-trukearen atzerapenak funtsezkoak diren.

Egitura

Cage sistemak (inplementazio bat dago - Windows-en Python 3.7-en beta bertsioa) bi zati nagusi ditu:

  1. Cageserver — fitxategi-zerbitzariaren programa (funtzio pakete bat) sareko ordenagailuetan exekutatzen dena, zeinen fitxategiak urruneko sarbidea behar duten;
  2. class Cage bezero-softwarerako metodoen liburutegi batekin, zerbitzariekin elkarrekintzaren kodeketa erraztuz.

Bezeroaren aldetik sistema erabiltzea

Cage klaseko metodoek ohiko fitxategi sistemaren eragiketak ordezkatzen dituzte: sortzea, irekitzea, ixtea, ezabatzea fitxategiak, baita datuak formatu bitarrean irakurtzea/idaztea (datuen posizioa eta tamaina adieraziz). Kontzeptuki, metodo hauek C lengoaiaren fitxategi-funtzioetatik hurbil daude, non fitxategiak irekitzea/itxitzea sarrera/irteerako kanaletan egiten den.

Beste era batera esanda, programatzaileak ez du lan egiten "fitxategi" objektuen metodoekin (klase _io Python-en), baina Cage klaseko metodoekin.

Cage objektu baten instantzia bat sortzen denean, zerbitzari batekin (edo hainbat zerbitzari batekin) hasierako konexioa ezartzen du, Bezeroaren IDak baimentzen du eta fitxategi-eragiketa guztietarako ataka-zenbaki bat duen berrespena jasotzen du. Cage objektu bat ezabatzen denean, zerbitzariari komunikatzeari uzteko eta fitxategiak ixteko agintzen dio. Komunikazioa amaitzea zerbitzariek beraiek ere has dezakete.

Sistemak irakurketa/idazketa errendimendua hobetzen du, maiz erabiltzen diren bezero-programen fitxategi-zatiak RAM cachean (bufferra) gordez.
Bezeroaren softwareak Cage objektu kopuru bat erabil dezake ezarpen ezberdinekin (buffer memoria-tamaina, bloke-tamaina zerbitzariarekin trukatzean, etab.).

Cage objektu bakar bat hainbat fitxategirekin komunika daiteke hainbat zerbitzarietan. Objektua sortzean komunikazio-parametroak (IP helbidea edo DNS zerbitzaria, baimenerako ataka nagusia, bidea eta fitxategi-izena) zehazten dira.

Cage objektu bakoitzak hainbat fitxategirekin aldi berean lan egin dezakeenez, memoria partekatuko espazioa buffererako erabiltzen da. Cachearen tamaina: orrialde kopurua eta haien tamaina dinamikoki ezartzen dira Cage objektu bat sortzean. Esate baterako, 1 GB-ko cache batek 1000 MB-ko 1 orrialde ditu, edo 10 KB-ko 100 mila orrialde, edo 1 KB-ko milioi bat orrialde. Orrialdeen tamaina eta kopurua hautatzea aplikazio kasu bakoitzerako zeregin zehatza da.

Hainbat Cage objektu aldi berean erabil ditzakezu buffer memoria-ezarpen desberdinak definitzeko, fitxategi ezberdinetan informazioa atzitzeko moduaren arabera. Oinarrizko gisa, buffering-algoritmorik errazena erabiltzen da: memoria kopuru jakin bat agortu ondoren, orrialde berriek zaharrak desplazatzen dituzte erretiro-printzipioaren arabera, sarbide minimo batekin. Buffering-a bereziki eraginkorra da partekatutako sarbide irregularrean (zentzu estatistikoan), lehenik, fitxategi desberdinetara eta, bigarrenik, fitxategi bakoitzaren zatietara.

Cage klaseak I/O onartzen du datu-helbideen bidez ez ezik (matrizearen posizioa eta luzera adieraziz, fitxategi-sistemaren eragiketak "ordeztuz"), baita maila "fisiko" txikiagoan ere - buffer memoriako orrialde-zenbakien arabera.

Jatorrizko funtzioa Cage objektuetarako onartzen da "hibernazioa" ("loa") - "tolestu" daitezke (adibidez, zerbitzariekin konexioa galtzen bada, edo aplikazioa gelditzen denean, etab.) bezeroaren aldean dagoen tokiko iraulketa fitxategi batean eta azkar leheneratu. fitxategi hau (komunikazioa berriro hasi ondoren, aplikazioa berrabiarazten duzunean). Horrek trafikoa nabarmen murriztea ahalbidetzen du bezeroaren programa aktibatzen denean aldi baterako "konexiorik gabe" joan ondoren, maiz erabiltzen diren fitxategi-zatiak dagoeneko cachean egongo baitira.

Cage 3600 kode lerro ingurukoa da.

Zerbitzariaren eraikuntzaren printzipioak

Cageserver fitxategi-zerbitzariak ataka kopuru arbitrario batekin exekutatu daitezke, horietako bat ("nagusia") bezero guztien baimenerako soilik erabiltzen da, gainerakoak datuak trukatzeko erabiltzen dira. Cage zerbitzariaren programak Python bakarrik behar du. Aldi berean, fitxategi-zerbitzaria duen ordenagailuak beste edozein lan egin dezake.

Zerbitzaria hasieran bi prozesu nagusiren bilduma gisa hasten da:

  1. "Konexioak" – bezeroekin komunikazioa ezartzeko eta zerbitzariaren ekimenez amaitzeko eragiketak egiteko prozesua;
  2. "Eragiketak" – fitxategiekin lan egiteko bezeroen zereginak (eragiketak) egiteko prozesua, baita bezeroen aginduetan oinarritutako komunikazio saioak ixteko ere.

Bi prozesuak ez daude sinkronizatuta eta mezuak jaso eta bidaltzeko amaigabeko begizta gisa antolatuta daude prozesu anitzeko ilaretan, proxy objektuetan, blokeoetan eta socketetan oinarrituta.
Konexio-prozesuak ataka bat esleitzen dio bezero bakoitzari datuak jaso eta transmititzeko. Portu kopurua zerbitzaria abiarazten denean ezartzen da. Portuen eta bezeroen arteko mapak prozesuen arteko partekatutako proxy memorian gordetzen dira.

Eragiketak prozesuak fitxategi-baliabideak partekatzea onartzen du, hainbat bezero ezberdin parteka ditzaten (ia-paraleloa, sarbidea blokeoen bidez kontrolatzen denez) fitxategi bateko datuak irakurtzen ditu hasiera batean "lehen" bezeroak ireki zuenean baimenduta badago.

Zerbitzarian fitxategiak sortzeko / ezabatzeko / irekitzeko / ixteko komandoak prozesatzea "Eragiketak" prozesuan bertan egiten da zorrozki sekuentzialki zerbitzariaren sistema eragilearen fitxategi azpisistema erabiliz.

Orokorrean irakurketa/idazketa bizkortzeko, eragiketa hauek “Eragiketak” prozesuak sortutako harietan egiten dira. Hari kopurua irekitako fitxategi kopuruaren berdina izan ohi da. Bezeroen irakurketa/idazketa zereginak ilara orokorrera bidaltzen dira eta doako lehen hariak zeregina burutik hartzen du. Logika bereziak zerbitzariaren RAMan datuak berridazteko eragiketak ezabatzeko aukera ematen du.

Eragiketa-prozesuak bezeroaren jarduera kontrolatzen du eta haiek zerbitzatzeari uzten dio beren aginduen arabera edo jarduerarik gabeko denbora-muga gainditzen denean.

Fidagarritasuna bermatzeko, Cageserver-ek transakzio guztien erregistroak gordetzen ditu. Erregistro orokor batek bezeroen mezuen kopiak ditu fitxategiak sortzeko/ireki/berriendatzeko/ezabatzeko zereginak dituztenak. Lan-fitxategi bakoitzeko erregistro bereizi bat sortzen da, eta bertan lan-fitxategi honetan datuak irakurtzeko eta idazteko zereginak dituzten mezuen kopiak grabatzen dira, baita gainidazketan (idazketan) suntsitu ziren datu idatzien (berriak) eta datu-matrizeak ere. datu berriak zaharren “gainean”.).

Erregistro hauek babeskopietan aldaketa berriak leheneratzeko eta uneko edukia iraganeko puntu batera itzultzeko aukera ematen dute.

Cageserver 3100 kode lerro ingurukoa da.

Cage Urruneko Fitxategietarako Sarbide Sistema

Cageserver fitxategi-zerbitzariaren programa abiarazten

Hasteko, elkarrizketa-koadroan zehaztu behar duzu:
— baimena lortzeko portu nagusia;
— baimendutako bezeroekin transakzioak trukatzeko ataken kopurua (1etik edo gehiagotik, zenbaki multzoa ataka nagusiaren ondoan dagoenetik hasten da).

Cage Class erabiliz

klase kaiola.Cage( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, wake=False, cache_file="" )

Fitxategi-zerbitzariekin elkarreragin eta buffer memoria duten objektuak sortzen dira klase honetatik.

Parametroak

  • kaiola_izena(str) - objektuaren baldintza baldintzatua, zerbitzariaren aldean bezeroak identifikatzeko erabiltzen dena
  • orrialdeen tamaina(int) - Buffer memoriako orrialde baten tamaina (bytetan)
  • zenbakiak(int) - buffer memoria-orrialde kopurua
  • maxstrlen(int) - byte-kate baten gehienezko luzera idazketa eta irakurketa eragiketetan
  • zerbitzari_ip(dikt) - erabilitako zerbitzarien helbideak dituen hiztegia, non gakoa zerbitzariaren baldintza baldintzatua den (aplikazioaren barneko zerbitzariaren IDa) eta balioa helbidea duen kate bat den: “ip helbidea:portua” edo “DNS: portua” (izenen eta benetako helbideen konparaketa aldi baterakoa da, alda daiteke)
  • itxaron(int) - zerbitzariaren erantzunaren itxaron denbora portuak jasotzean (segundotan)
  • esna(boolean) - objektua nola sortzen den adierazten duen bandera (False - Objektu berri bat sortzen bada, Egia - objektu bat aldez aurretik "toleratutako" batetik sortzen bada - "hibernazio" eragiketa erabiliz, faltsua lehenespenez)
  • cache_fitxategia(str) - hibernaziorako fitxategiaren izena

metodoak

Kaiola.fitxategi_sortu( zerbitzari, bide ) - fitxategi berri bat sortu

Kaiola.fitxategi_berriendatu( zerbitzaria, bidea, izen_berria ) - izena aldatu fitxategiari

Kaiola.fitxategia_kendu( zerbitzari, bide) - fitxategi bat ezabatu

Kaiola.ireki( zerbitzari, bide, mod ) - ireki fitxategia

Itzultzeak fkanala kanalaren zenbakia. Parametroa mod - Hau da fitxategia irekitzeko modua: "wm" - esklusiboa (irakurketa/idazketa), "rs" - irakurtzeko soilik eta beste bezeroek irakurtzeko soilik partekatzen dute, "ws" - irakurtzeko/idatzi eta irakurtzeko soilik partekatua beste bezero batzuk.

Kaiola.itxi (fkanala) – itxi fitxategia

Kaiola.idatzi (fchannel, hasi, datuak ) – idatzi byte kate bat fitxategi batean

Kaiola.irakurri (fchannel, hasi, len_data ) – irakurri fitxategi batetik byte-kate bat

Kaiola.jarri_orriak ( fkanala ) – Bufferretik zerbitzarira "bultzatzen" dira aldatu diren zehaztutako kanaleko orrialde guztiak. Algoritmoko puntu horietan erabiltzen da kanaleko eragiketa guztiak fisikoki zerbitzarian fitxategi batean gordeta daudela ziurtatu behar duzunean.

Kaiola.bultzatu_guztiak () – Bufferetik zerbitzarira “bultzatzen” ditu aldatu den Cage klaseko instantzia baterako kanal guztietako orrialde guztiak. Kanal guztietako eragiketa guztiak zerbitzarian gordeta daudela ziurtatu behar duzunean erabiltzen da.

Iturria: www.habr.com

Gehitu iruzkin berria