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:
- Cageserver ā failu servera programma (funkciju pakete), kas darbojas tÄ«kla datoros, kuru failiem nepiecieÅ”ama attÄla piekļuve;
- 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:
- "Savienojumi" ā komunikÄcijas ar klientiem izveides un tÄs pÄrtraukÅ”anas operÄciju veikÅ”anas process pÄc servera iniciatÄ«vas;
- "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.
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