Cage attālās failu piekļuves sistēma

Sistēmas mērķis

Atbalsts attālai piekļuvei failiem tÄ«klā datoros. Sistēma ā€œvirtuāliā€ atbalsta visas pamata datņu darbÄ«bas (izveide, dzÄ“Å”ana, lasÄ«Å”ana, rakstÄ«Å”ana utt.), apmainoties ar transakcijām (ziņojumiem), izmantojot TCP protokolu.

Pieteikumi

Sistēmas funkcionalitāte ir efektÄ«va Ŕādos gadÄ«jumos:

  • vietējās lietojumprogrammās mobilajām un iegultajām ierÄ«cēm (viedtālruņi, iebÅ«vētās vadÄ«bas sistēmas utt.), kurām nepiecieÅ”ama ātra piekļuve failiem attālos serveros, saskaroties ar iespējamiem Ä«slaicÄ«giem sakaru pārtraukumiem (ar pāreju bezsaistē);
  • ielādētās DBVS, ja dažos serveros tiek veikta vaicājumu apstrāde, bet citos - datu glabāŔana;
  • izplatÄ«tajos korporatÄ«vajos tÄ«klos informācijas vākÅ”anai un apstrādei, kam nepiecieÅ”ama liela datu apmaiņa, dublÄ“Å”ana un uzticamÄ«ba;
  • sarežģītās sistēmās ar mikropakalpojumu arhitektÅ«ru, kur kavÄ“Å”anās informācijas apmaiņā starp moduļiem ir kritiska.

Struktūra

Cage sistēma (ir ievieÅ”ana - beta versija Python 3.7 operētājsistēmā Windows) ietver divas galvenās daļas:

  1. Cageserver ā€” failu servera programma (funkciju pakete), kas darbojas tÄ«kla datoros, kuru failiem nepiecieÅ”ama attāla piekļuve;
  2. klase BÅ«ris ar klientu programmatÅ«ras metožu bibliotēku, kas vienkārÅ”o mijiedarbÄ«bas ar serveriem kodÄ“Å”anu.

Sistēmas izmantoÅ”ana klienta pusē

Cage klases metodes aizstāj parastās, ā€œparastāsā€ failu sistēmas darbÄ«bas: izveide, atvērÅ”ana, aizvērÅ”ana, dzÄ“Å”ana failus, kā arÄ« datu lasÄ«Å”ana/rakstÄ«Å”ana binārā formātā (norādot datu atraÅ”anās vietu un lielumu). Konceptuāli Ŕīs metodes ir tuvas C valodas failu funkcijām, kur failu atvērÅ”ana/aizvērÅ”ana tiek veikta ievades/izvades ā€œkanālosā€.

Citiem vārdiem sakot, programmētājs nedarbojas ar ā€œfailuā€ objektu metodēm (klase _io Python), bet ar Cage klases metodēm.

Kad tiek izveidots Cage objekta gadÄ«jums, tas izveido sākotnējo savienojumu ar serveri (vai vairākiem serveriem), tiek autorizēts ar klienta ID un saņem apstiprinājumu ar Ä«paÅ”u porta numuru visām faila darbÄ«bām. Kad Cage objekts tiek dzēsts, tas uzdod serverim pārtraukt saziņu un aizvērt failus. Sakaru pārtraukÅ”anu var iniciēt arÄ« paÅ”i serveri.

Sistēma palielina lasÄ«Å”anas/rakstÄ«Å”anas veiktspēju, buferizējot RAM keÅ”atmiņā (buferÄ«) bieži izmantotos klientu programmu failu fragmentus.
Klienta programmatūra var izmantot neierobežotu skaitu Cage objektu ar dažādiem iestatījumiem (buferatmiņas lielums, bloka lielums apmaiņā ar serveri utt.).

Viens Cage objekts var sazināties ar vairākiem failiem vairākos serveros. Sakaru parametri (IP adrese vai DNS serveris, galvenais ports autorizācijai, ceļŔ un faila nosaukums) tiek norādīti, veidojot objektu.

Tā kā katrs Cage objekts var strādāt ar vairākiem failiem vienlaikus, koplietojamā atmiņas vieta tiek izmantota buferizācijai. KeÅ”atmiņas lielums ā€“ lappuÅ”u skaits un to lielums tiek iestatÄ«ts dinamiski, veidojot Cage objektu. Piemēram, 1 GB keÅ”atmiņa ir 1000 lappuÅ”u, katra pa 1 MB, vai 10 tÅ«kstoÅ”i lappuÅ”u pa 100 KB vai 1 miljons lappuÅ”u ar 1 KB. Izmēra un lappuÅ”u skaita izvēle ir Ä«paÅ”s uzdevums katram pieteikumam.

Varat izmantot vairākus Cage objektus vienlaikus, lai definētu dažādus buferatmiņas iestatÄ«jumus atkarÄ«bā no tā, kā informācijai tiek piekļūts dažādos failos. Kā pamata tiek izmantots vienkārŔākais buferizācijas algoritms: pēc tam, kad ir iztērēts noteikts atmiņas apjoms, jaunas lapas izspiež vecās pēc aizieÅ”anas principa ar minimālu piekļūŔanu. Buferizācija ir Ä«paÅ”i efektÄ«va nevienmērÄ«gas (statistikas nozÄ«mē) koplietotas piekļuves gadÄ«jumā, pirmkārt, dažādiem failiem un, otrkārt, katra faila fragmentiem.

Cage klase atbalsta I/O ne tikai pēc datu adresēm (norādot masÄ«va pozÄ«ciju un garumu, ā€œaizvietojotā€ failu sistēmas darbÄ«bas), bet arÄ« zemākā, ā€œfiziskāā€ lÄ«menÄ« ā€“ pēc lappuÅ”u numuriem buferatmiņā.

Sākotnējā funkcija tiek atbalstÄ«ta Cage objektiem "ziemas guļas" (ā€œmiegsā€) ā€” tos var ā€œsakļautā€ (piemēram, ja tiek zaudēts savienojums ar serveriem vai kad lietojumprogramma tiek apturēta utt.) lokālā izgāztuves failā klienta pusē un ātri atjaunoti no Å”o failu (pēc saziņas atsākÅ”anas, kad restartējat lietojumprogrammu). Tas ļauj ievērojami samazināt trafiku, aktivizējot klienta programmu pēc Ä«slaicÄ«gas pārejas bezsaistē, jo bieži izmantotie failu fragmenti jau bÅ«s keÅ”atmiņā.

Cage ir aptuveni 3600 koda rindiņas.

Serveru uzbūves principi

Cageserver failu serverus var darbināt ar patvaļīgu skaitu portu, no kuriem viens (ā€œgalvenaisā€) tiek izmantots tikai visu klientu autorizācijai, pārējie tiek izmantoti datu apmaiņai. Cage servera programmai ir nepiecieÅ”ams tikai Python. Paralēli dators ar failu serveri var veikt jebkuru citu darbu.

Serveris sākotnēji sākas kā divu galveno procesu kolekcija:

  1. "Savienojumi" ā€“ komunikācijas ar klientiem izveides un tās pārtraukÅ”anas operāciju veikÅ”anas process pēc servera iniciatÄ«vas;
  2. "Operācijas" ā€“ process klientu uzdevumu (operāciju) veikÅ”anai darbam ar failiem, kā arÄ« komunikācijas sesiju slēgÅ”anai, pamatojoties uz klienta komandām.

Abi procesi nav sinhronizēti un tiek organizēti kā bezgalÄ«gas ziņojumu saņemÅ”anas un nosÅ«tÄ«Å”anas cilpas, kuru pamatā ir vairāku procesu rindas, starpniekservera objekti, slēdzenes un ligzdas.
Savienojuma process katram klientam pieŔķir portu datu saņemÅ”anai un pārsÅ«tÄ«Å”anai. Portu skaits tiek iestatÄ«ts, kad serveris startē. Portu un klientu kartÄ“Å”ana tiek saglabāta starpprocesu koplietotajā starpniekservera atmiņā.

DarbÄ«bu process atbalsta failu resursu koplietoÅ”anu, lai vairāki dažādi klienti varētu koplietot (gandrÄ«z paralēli, jo piekļuvi kontrolē slēdzenes) lasÄ«t datus no viena faila, ja tas bija atļauts, kad to sākotnēji atvēra "pirmais" klients.

Failu izveides/dzÄ“Å”anas/atvērÅ”anas/aizvērÅ”anas komandu apstrāde serverÄ« tiek veikta paŔā ā€œOperācijasā€ procesā stingri secÄ«gi, izmantojot servera OS failu apakÅ”sistēmu.

Lai vispārÄ«gi paātrinātu lasÄ«Å”anu/rakstÄ«Å”anu, Ŕīs darbÄ«bas tiek veiktas pavedienos, ko radÄ«jis process ā€œDarbÄ«basā€. Pavedienu skaits parasti ir vienāds ar atvērto failu skaitu. Klientu lasÄ«Å”anas/rakstÄ«Å”anas uzdevumi tiek iesniegti vispārējā rindā, un pirmais brÄ«vais pavediens paņem uzdevumu no galvas. ÄŖpaÅ”a loÄ£ika ļauj novērst datu pārrakstÄ«Å”anas operācijas servera operatÄ«vajā atmiņā.

Operāciju process uzrauga klienta darbÄ«bu un pārtrauc to apkalpoÅ”anu vai nu pēc viņu komandām, vai arÄ« tad, kad tiek pārsniegts neaktivitātes taimauts.

Lai nodroÅ”inātu uzticamÄ«bu, Cageserver saglabā visu darÄ«jumu žurnālus. Viens vispārÄ«gs žurnāls satur ziņojumu kopijas no klientiem ar uzdevumiem izveidot/atvērt/pārdēvēt/dzēst failus. Katram darba failam tiek izveidots atseviŔķs žurnāls, kurā tiek ierakstÄ«tas ziņojumu kopijas ar uzdevumiem datu lasÄ«Å”anai un rakstÄ«Å”anai Å”ajā darba failā, kā arÄ« rakstÄ«to (jauno) datu masÄ«vi un datu masÄ«vi, kas tika iznÄ«cināti pārrakstÄ«Å”anas (rakstÄ«Å”anas) laikā. jauni dati ā€œpa virsuā€ vecajiem).

Å ie žurnāli nodroÅ”ina iespēju gan atjaunot jaunas izmaiņas dublējumkopijās, gan atjaunot paÅ”reizējo saturu uz pagātni.

Cageserver ir aptuveni 3100 koda rindiņas.

Cage attālās failu piekļuves sistēma

Cageserver failu servera programmas palaiŔana

Sākot, dialoglodziņā ir jādefinē:
ā€” galvenā ostas atļaujas saņemÅ”anai;
ā€” portu skaits darÄ«jumu apmaiņai ar autorizētiem klientiem (no 1 vai vairāk, numuru kopums sākas no tā, kas atrodas blakus galvenajam porta numuram).

Būra klases izmantoŔana

klase būris.Būris( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )

No Ŕīs klases tiek izveidoti objekti, kas mijiedarbojas ar failu serveriem un satur buferatmiņu.

Parametrus

  • bÅ«ra_nosaukums(str) - objekta nosacÄ«ts nosaukums, ko izmanto, lai identificētu klientus servera pusē
  • lapas izmērs(int) ā€” vienas buferatmiņas lapas lielums (baitos)
  • numpages(int) ā€” buferatmiņas lapu skaits
  • maxstrlen(int) - maksimālais baitu virknes garums rakstÄ«Å”anas un lasÄ«Å”anas darbÄ«bās
  • servera_ip(dict) - vārdnÄ«ca ar izmantoto serveru adresēm, kur atslēga ir servera nosacÄ«juma nosaukums (servera ID lietojumprogrammā), bet vērtÄ«ba ir virkne ar adresi: ā€œip adrese: portsā€ vai ā€œDNS: ostaā€ (vārdu un Ä«sto adreÅ”u salÄ«dzinājums ir Ä«slaicÄ«gs, to var mainÄ«t)
  • pagaidiet(int) ā€” atbildes gaidÄ«Å”anas laiks no servera, saņemot portus (sekundēs)
  • nomodā(bÅ«la) ā€” objekta izveides karodziņŔ (Nepatiess - ja tiek izveidots jauns objekts, Patiess - ja objekts ir izveidots no iepriekÅ” ā€œsakļautaā€ objekta - izmantojot ā€œhibernācijasā€ darbÄ«bu, pēc noklusējuma False)
  • cache_file(str) - hibernācijas faila nosaukums

Metodes

BÅ«ris.file_create( serveris, ceļŔ ) ā€“ izveidojiet jaunu failu

BÅ«ris.faila_pārdēvÄ“Å”ana( serveris, ceļŔ, jaunais_nosaukums ) ā€“ pārdēvējiet failu

BÅ«ris.file_remove( serveris, ceļŔ) - izdzēst failu

BÅ«ris.atvērt( serveris, ceļŔ, mod ) - atver failu

Atgriežas fkanāls kanāla numurs. Parametrs mod - Å”is ir faila atvērÅ”anas režīms: "wm" - ekskluzÄ«vs (lasÄ«Å”ana/rakstÄ«Å”ana), "rs" - tikai lasāms un koplietots tikai lasÄ«Å”anai citiem klientiem, "ws" - lasÄ«Å”anai/rakstÄ«Å”anai un koplietots tikai lasÄ«Å”anai citiem klientiem.

BÅ«ris.aizvērt (fkanāls) ā€“ aizveriet failu

BÅ«ris.rakstÄ«t (fkanāls, sākums, dati ) ā€“ ierakstiet failā baitu virkni

BÅ«ris.lasÄ«t (fchannel, start, len_data ) ā€“ nolasÄ«t baitu virkni no faila

BÅ«ris.ielikt_lapas ( fkanāls ) ā€“ ā€œnospiežā€ no bufera uz serveri visas norādÄ«tā kanāla lapas, kas ir modificētas. Tas tiek izmantots tajos algoritma punktos, kad jums ir jāpārliecinās, ka visas kanāla darbÄ«bas tiek fiziski saglabātas servera failā.

BÅ«ris.push_all () ā€“ ā€œnospiežā€ no bufera uz serveri visas modificētās Cage klases gadÄ«juma kanālu lapas. Izmanto, ja jums ir jāpārliecinās, ka visas darbÄ«bas visos kanālos tiek saglabātas serverÄ«.

Avots: www.habr.com

Pievieno komentāru