Cage Remote File Access System

Tilgangur kerfisins

Stuðningur við fjaraðgang að skrám á tölvum á netinu. Kerfið styður „nánast“ allar helstu skráaraðgerðir (gerð, eyðingu, lestur, ritun osfrv.) með því að skiptast á færslum (skilaboðum) með TCP samskiptareglum.

Umsóknir

Virkni kerfisins er skilvirk í eftirfarandi tilvikum:

  • í innfæddum forritum fyrir farsíma og innbyggð tæki (snjallsíma, stýrikerfi um borð, osfrv.) sem krefjast skjóts aðgangs að skrám á ytri netþjónum í ljósi hugsanlegra tímabundinna truflana í samskiptum (með því að fara án nettengingar);
  • í hlaðnum DBMS, ef vinnsla fyrirspurna fer fram á sumum netþjónum og gagnageymsla fer fram á öðrum;
  • í dreifðum fyrirtækjanetum til að safna og vinna úr upplýsingum, sem krefjast háhraðagagnaskipta, offramboðs og áreiðanleika;
  • í flóknum kerfum með örþjónustuarkitektúr, þar sem tafir á upplýsingaskiptum milli eininga eru mikilvægar.

Uppbygging

Cage kerfið (það er útfærsla - beta útgáfa í Python 3.7 á Windows) inniheldur tvo meginhluta:

  1. Búrþjónn — skráaþjónsforrit (pakki af aðgerðum) sem keyrir á tölvum á netinu þar sem skrár þurfa fjaraðgang;
  2. bekknum Búr með bókasafni af aðferðum fyrir viðskiptavinarhugbúnað, sem einfaldar kóðun samskipta við netþjóna.

Notkun kerfisins á viðskiptavinamegin

Aðferðir Cage bekkjarins koma í stað venjulegra, „venjubundinna“ skráakerfisaðgerða: búa til, opna, loka, eyða skrár, svo og að lesa/skrifa gögn á tvíundarsniði (sem gefur til kynna staðsetningu og stærð gagnanna). Hugmyndalega eru þessar aðferðir nálægt skráaraðgerðum C tungumálsins, þar sem opnun/lokun skráa er framkvæmd „á rásum“ inntaks/úttaks.

Með öðrum orðum, forritarinn vinnur ekki með aðferðum við að „skrá“ hluti (class _io í Python), en með aðferðum Cage bekkjarins.

Þegar tilvik af Cage hlut er búið til, kemur það á upphafstengingu við netþjón (eða nokkra netþjóna), er heimilað af auðkenni viðskiptavinarins og fær staðfestingu með sérstöku gáttarnúmeri fyrir allar skráaraðgerðir. Þegar Cage hlut er eytt gefur það þjóninum fyrirmæli um að hætta samskiptum og loka skránum. Lokun samskipta getur einnig komið af stað af netþjónunum sjálfum.

Kerfið bætir lestrar-/skrifafköst með því að setja oft notuð skráarbrot biðlaraforrita í biðminni í skyndiminni (buffer).
Viðskiptavinahugbúnaður getur notað hvaða fjölda Cage-hluta sem er með mismunandi stillingum (stærð biðminnis, stærð blokkar þegar skipt er við netþjóninn, osfrv.).

Einn Cage hlutur getur átt samskipti við margar skrár á mörgum netþjónum. Samskiptafæribreytur (IP tölu eða DNS netþjónn, aðalhöfn fyrir heimild, slóð og skráarheiti) eru tilgreindar þegar hluturinn er búinn til.

Þar sem hver Cage hlutur getur unnið með margar skrár á sama tíma er sameiginlegt minnisrými notað fyrir biðminni. Stærð skyndiminni – fjöldi síðna og stærð þeirra er stillt á virkan hátt þegar búrhlutur er búinn til. Til dæmis, 1 GB skyndiminni er 1000 síður af 1 MB hvor, eða 10 þúsund síður af 100 KB hvor, eða 1 milljón síður af 1 KB hver. Val á stærð og fjölda síðna er sérstakt verkefni fyrir hvert umsóknarmál.

Þú getur notað marga Cage hluti á sama tíma til að skilgreina mismunandi biðminnisstillingar eftir því hvernig aðgangur er að upplýsingum í mismunandi skrám. Sem grundvallaratriði er einfaldasta biðminni reikniritið notað: eftir að tiltekið magn af minni er uppurið, koma nýjar síður í stað gamlar í samræmi við meginregluna um starfslok með lágmarksfjölda aðgangs. Buffun er sérstaklega áhrifarík þegar um er að ræða ójafnan (í tölfræðilegum skilningi) sameiginlegan aðgang, í fyrsta lagi að mismunandi skrám og í öðru lagi að brotum hverrar skráar.

Cage flokkurinn styður I/O ekki aðeins með gagnavistföngum (sem gefur til kynna staðsetningu og lengd fylkisins, „skipta um“ skráarkerfisaðgerðir), heldur einnig á lægra „líkamlegu“ stigi - með blaðsíðunúmerum í biðminni.

Upprunalega aðgerðin er studd fyrir Cage hluti "dvala" ("svefn") - þeir geta verið "hryndir" (til dæmis ef tengingin við netþjóna rofnar, eða þegar forritið er stöðvað osfrv.) í staðbundna dumpskrá á biðlarahlið og endurheimt fljótt frá þessa skrá (eftir að samskipti eru hafin á ný, þegar þú endurræsir forritið). Þetta gerir það mögulegt að draga verulega úr umferð þegar biðlaraforritið er virkjað eftir að hafa verið tímabundið „ótengdur“ þar sem oft notuð skráarbrot verða þegar í skyndiminni.

Cage er um 3600 línur af kóða.

Meginreglur um smíði netþjóna

Hægt er að keyra Cageserver skráaþjóna með handahófskenndum fjölda gátta, þar af ein („aðal“) er aðeins notuð til að heimila öllum viðskiptavinum, restin er notuð til gagnaskipta. Cage miðlaraforritið krefst aðeins Python. Samhliða því getur tölvan með skráaþjóninum framkvæmt hvaða aðra vinnu sem er.

Miðlarinn byrjar upphaflega sem safn af tveimur aðalferlum:

  1. "Tengingar" - ferli til að framkvæma aðgerðir til að koma á samskiptum við viðskiptavini og slíta þeim að frumkvæði þjónsins;
  2. "Aðgerðir" – ferli til að framkvæma verkefni (aðgerðir) viðskiptavina til að vinna með skrár, sem og til að loka samskiptalotum sem byggjast á skipunum viðskiptavina.

Bæði ferlarnir eru ekki samstilltir og eru skipulagðir sem endalausar lykkjur til að taka á móti og senda skilaboð sem byggjast á fjölvinnsluröðum, umboðshlutum, læsingum og innstungum.
Tengingarferlið úthlutar höfn fyrir hvern viðskiptavin til að taka á móti og senda gögn. Fjöldi hafna er stilltur þegar þjónninn byrjar. Kortlagningin milli hafna og viðskiptavina er geymd í samnýtt umboðsminni.

Aðgerðarferlið styður að deila skráaauðlindum þannig að margir mismunandi viðskiptavinir geti deilt (hálf samhliða, þar sem aðgangur er stjórnað af læsingum) lesa gögn úr einni skrá ef þetta var leyft þegar það var upphaflega opnað af "fyrsta" biðlaranum.

Vinnsla skipana til að búa til/eyða/opna/loka skrám á þjóninum fer fram í „Operations“ ferlinu sjálfu í strangri röð með því að nota skráaundirkerfi stýrikerfis netþjónsins.

Til að flýta almennt fyrir lestri/skrifum eru þessar aðgerðir gerðar í þráðum sem koma af stað „Operations“ ferlinu. Fjöldi þráða er venjulega jafn og fjöldi opinna skráa. Lestrar/skrifverkefni frá viðskiptavinum eru send í almennu biðröðina og fyrsti lausi þráðurinn tekur verkefnið úr hausnum. Sérstök rökfræði gerir þér kleift að útrýma endurskrifunaraðgerðum gagna í vinnsluminni miðlarans.

Aðgerðarferlið fylgist með virkni viðskiptavinarins og hættir að þjónusta þá annaðhvort eftir skipunum þeirra eða þegar farið er yfir óvirknitímann.

Til að tryggja áreiðanleika heldur Cageserver skrá yfir öll viðskipti. Ein almenn annál inniheldur afrit af skilaboðum frá viðskiptavinum með verkefni til að búa til/opna/endurnefna/eyða skrám. Sérstakur annál er búinn til fyrir hverja vinnuskrá, þar sem afrit af skilaboðum með verkefnum til að lesa og skrifa gögn í þessa vinnuskrá eru skráð, svo og fylki ritaðra (nýra) gagna og fylki gagna sem eyðilögðust við yfirskrift (skrifun). ný gögn „ofan“ á gömlu). ).

Þessar annálar veita bæði möguleika á að endurheimta nýjar breytingar á öryggisafritum og afturkalla núverandi efni að stað í fortíðinni.

Cageserver er um 3100 línur af kóða.

Cage Remote File Access System

Ræsir Cageserver skráaþjónforritið

Þegar þú byrjar, í glugganum þarftu að skilgreina:
— aðalhöfn fyrir leyfi;
— fjöldi gátta til að skiptast á viðskiptum við viðurkennda viðskiptavini (frá 1 eða fleiri byrjar númerasafnið á þeirri við hlið aðalgáttarnúmersins).

Að nota Cage Class

flokkur búr.Búr( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )

Hlutir eru búnir til úr þessum flokki sem hafa samskipti við skráaþjóna og innihalda biðminni.

Breytur

  • búr_nafn(str) - skilyrt heiti hlutarins, sem er notað til að auðkenna viðskiptavini á miðlarahliðinni
  • síðustærð(int) — stærð einnar síðu biðminni (í bætum)
  • tölublöð(int) — fjöldi biðminni síðna
  • maxstrlen(int) - hámarkslengd bætastrengs í skrif- og lesaðgerðum
  • server_ip(fyrirmæli) - orðabók með vistföngum netþjónanna sem notaðir eru, þar sem lykillinn er skilyrt heiti þjónsins (miðlaraauðkenni inni í forritinu), og gildið er strengur með heimilisfanginu: „ip address:port“ eða „DNS: höfn“ (samanburður á nöfnum og raunverulegum heimilisföngum er tímabundinn, það getur verið breytt)
  • bíða(int) — biðtími eftir svari frá þjóninum þegar hann tekur á móti höfnum (í sekúndum)
  • vakandi(boolískt) — fáni um hvernig hluturinn er búinn til (False - ef nýr hlutur er búinn til, True - ef hlutur er búinn til úr áður "hrunnum" hlut - með því að nota "dvala" aðgerðina, False sjálfgefið)
  • skyndiminni_skrá(str) - skráarheiti fyrir dvala

Aðferðir

Búr.skrá_búa til( þjónn, slóð ) – búðu til nýja skrá

Búr.skrá_endurnefna( þjónn, slóð, nýtt_nafn ) – endurnefna skrána

Búr.file_remove( þjónn, slóð) - eyða skrá

Búr.opna( þjónn, slóð, mod ) - opna skrá

Skilar frás rásnúmer. Parameter unga fólkið - þetta er skráaropnunarstillingin: "wm" - einkarétt (lesa/skrifa), "rs" - skrifvarinn, og aðeins deilt til að lesa af öðrum viðskiptavinum, "ws" - lesa/skrifa, og aðeins deilt til að lesa af öðrum viðskiptavinum.

Búr.nálægt (frás) – lokaðu skránni

Búr.skrifa (fchannel, byrja, gögn ) – skrifaðu bætastreng í skrá

Búr.lesa (fchannel, byrja, len_data ) – lestu bætastreng úr skrá

Búr.setja_síður ( frás ) – „ýtir“ frá biðminni til netþjónsins öllum síðum tilgreindrar rásar sem hefur verið breytt. Það er notað á þeim stöðum í reikniritinu þegar þú þarft að vera viss um að allar aðgerðir á rásinni séu líkamlega vistaðar í skrá á þjóninum.

Búr.ýta_allt () – „ýtir“ frá biðminni til netþjónsins öllum síðum allra rása fyrir tilvik af Cage bekknum sem hefur verið breytt. Notað þegar þú þarft að vera viss um að allar aðgerðir á öllum rásum séu vistaðar á þjóninum.

Heimild: www.habr.com

Bæta við athugasemd