System Mynediad Ffeil o Bell Cawell

Pwrpas y system

Cefnogaeth ar gyfer mynediad o bell i ffeiliau ar gyfrifiaduron ar y rhwydwaith. Mae'r system "bron" yn cefnogi'r holl weithrediadau ffeil sylfaenol (creu, dileu, darllen, ysgrifennu, ac ati) trwy gyfnewid trafodion (negeseuon) gan ddefnyddio'r protocol TCP.

Ceisiadau

Mae swyddogaeth y system yn effeithiol yn yr achosion canlynol:

  • mewn cymwysiadau brodorol ar gyfer dyfeisiau symudol a dyfeisiau wedi'u mewnosod (ffonau clyfar, systemau rheoli ar y bwrdd, ac ati) sy'n gofyn am fynediad cyflym i ffeiliau ar weinyddion o bell yn wyneb ymyriadau dros dro posibl mewn cyfathrebu (gyda mynd all-lein);
  • mewn DBMSs wedi'u llwytho, os yw prosesu ymholiadau yn cael ei wneud ar rai gweinyddwyr, a bod data'n cael ei storio ar eraill;
  • mewn rhwydweithiau corfforaethol gwasgaredig ar gyfer casglu a phrosesu gwybodaeth, sy'n gofyn am gyfnewid data cyflym, dileu swyddi a dibynadwyedd;
  • mewn systemau cymhleth gyda phensaernïaeth microwasanaeth, lle mae oedi wrth gyfnewid gwybodaeth rhwng modiwlau yn hollbwysig.

Strwythur

Mae'r system Cage (mae fersiwn beta ar waith yn Python 3.7 ar Windows) yn cynnwys dwy brif ran:

  1. Cageserver — rhaglen gweinydd ffeiliau (pecyn o swyddogaethau) sy'n rhedeg ar gyfrifiaduron ar y rhwydwaith y mae angen mynediad o bell ar eu ffeiliau;
  2. dosbarth Cage gyda llyfrgell o ddulliau ar gyfer meddalwedd cleient, gan symleiddio'r codio ar ryngweithio â gweinyddwyr.

Defnyddio'r system ar ochr y cleient

Mae dulliau'r dosbarth Cage yn disodli'r gweithrediadau system ffeiliau "arferol" arferol: creu, agor, cau, dileu ffeiliau, yn ogystal â darllen/ysgrifennu data mewn fformat deuaidd (yn nodi lleoliad a maint y data). Yn gysyniadol, mae'r dulliau hyn yn agos at swyddogaethau ffeil yr iaith C, lle mae agor / cau ffeiliau yn cael ei berfformio “ar sianeli” mewnbwn / allbwn.

Mewn geiriau eraill, nid yw'r rhaglennydd yn gweithio gyda dulliau o "ffeil" gwrthrychau (dosbarth _io yn Python), ond gyda dulliau y dosbarth Cage.

Pan fydd enghraifft o wrthrych Cage yn cael ei greu, mae'n sefydlu cysylltiad cychwynnol â gweinydd (neu sawl gweinydd), wedi'i awdurdodi gan yr ID Cleient, ac yn derbyn cadarnhad gyda rhif porthladd pwrpasol ar gyfer pob gweithrediad ffeil. Pan fydd gwrthrych Cage yn cael ei ddileu, mae'n cyfarwyddo'r gweinydd i roi'r gorau i gyfathrebu a chau'r ffeiliau. Gall y gweinyddwyr eu hunain hefyd gychwyn ar y broses o derfynu cyfathrebu.

Mae'r system yn gwella perfformiad darllen/ysgrifennu drwy glustogi darnau ffeil a ddefnyddir yn aml o raglenni cleientiaid yn y storfa RAM (byffer).
Gall meddalwedd cleient ddefnyddio unrhyw nifer o wrthrychau Cage gyda gosodiadau gwahanol (maint cof byffer, maint bloc wrth gyfnewid gyda'r gweinydd, ac ati).

Gall gwrthrych Cawell sengl gyfathrebu â ffeiliau lluosog ar weinyddion lluosog. Pennir paramedrau cyfathrebu (cyfeiriad IP neu weinydd DNS, prif borthladd awdurdodi, llwybr ac enw ffeil) wrth greu'r gwrthrych.

Gan y gall pob gwrthrych Cawell weithio gyda ffeiliau lluosog ar yr un pryd, defnyddir gofod cof a rennir ar gyfer byffro. Maint y storfa - nifer y tudalennau a'u maint, yn cael ei osod yn ddeinamig wrth greu gwrthrych Cawell. Er enghraifft, mae celc 1 GB yn 1000 tudalen o 1 MB yr un, neu 10 mil o dudalennau o 100 KB yr un, neu 1 miliwn o dudalennau o 1 KB yr un. Mae dewis maint a nifer y tudalennau yn dasg benodol ar gyfer pob achos cais.

Gallwch ddefnyddio gwrthrychau Cage lluosog ar yr un pryd i ddiffinio gwahanol osodiadau cof byffer yn dibynnu ar sut y ceir mynediad i wybodaeth mewn gwahanol ffeiliau. Fel un sylfaenol, defnyddir yr algorithm byffro symlaf: ar ôl i'r swm penodedig o gof ddod i ben, mae tudalennau newydd yn disodli hen rai yn unol ag egwyddor ymddeoliad gydag isafswm o fynediadau. Mae byffro yn arbennig o effeithiol yn achos mynediad anwastad (mewn ystyr ystadegol) a rennir, yn gyntaf, i wahanol ffeiliau, ac, yn ail, i ddarnau o bob ffeil.

Mae'r dosbarth Cage yn cefnogi I / O nid yn unig trwy gyfeiriadau data (sy'n nodi lleoliad a hyd yr arae, "disodli" gweithrediadau system ffeiliau), ond hefyd ar lefel is, "corfforol" - yn ôl niferoedd tudalennau mewn cof byffer.

Cefnogir y swyddogaeth wreiddiol ar gyfer gwrthrychau Cage "gaeafgysgu" (“cysgu”) - gallant gael eu “llewygu” (er enghraifft, os bydd cysylltiad â gweinyddwyr yn cael ei golli, neu pan fydd y cais yn cael ei atal, ac ati) i mewn i ffeil dympio leol ar ochr y cleient a'i adfer yn gyflym o y ffeil hon (ar ôl ailddechrau cyfathrebu, pan fyddwch yn ailgychwyn y cais). Mae hyn yn ei gwneud hi'n bosibl lleihau traffig yn sylweddol wrth actifadu'r rhaglen cleient ar ôl mynd “all-lein” dros dro, gan y bydd darnau o ffeiliau a ddefnyddir yn aml eisoes yn y storfa.

Mae cawell tua 3600 llinell o god.

Egwyddorion adeiladu gweinydd

Gellir rhedeg gweinyddwyr ffeiliau Cageserver gyda nifer mympwyol o borthladdoedd, y defnyddir un ohonynt (“prif”) yn unig ar gyfer awdurdodi pob cleient, defnyddir y gweddill ar gyfer cyfnewid data. Dim ond Python sydd ei angen ar y rhaglen gweinydd Cage. Ar yr un pryd, gall y cyfrifiadur gyda'r gweinydd ffeiliau gyflawni unrhyw waith arall.

Mae'r gweinydd yn dechrau i ddechrau fel casgliad o ddwy brif broses:

  1. "Cysylltiadau" - proses ar gyfer cyflawni gweithrediadau sefydlu cyfathrebu â chleientiaid a'i derfynu ar fenter y gweinydd;
  2. "Gweithrediadau" - proses ar gyfer cyflawni tasgau (gweithrediadau) cleientiaid i weithio gyda ffeiliau, yn ogystal ag ar gyfer cau sesiynau cyfathrebu yn seiliedig ar orchmynion cleientiaid.

Nid yw'r ddwy broses wedi'u cysoni ac fe'u trefnir fel dolenni diddiwedd o dderbyn ac anfon negeseuon yn seiliedig ar giwiau amlbroses, gwrthrychau dirprwy, cloeon a socedi.
Mae'r broses Connection yn dyrannu porthladd i bob cleient dderbyn a throsglwyddo data. Mae nifer y porthladdoedd yn cael ei osod pan fydd y gweinydd yn cychwyn. Mae'r mapio rhwng porthladdoedd a chleientiaid yn cael ei storio mewn cof dirprwy a rennir rhwng prosesau.

Mae'r broses Gweithrediadau yn cefnogi rhannu adnoddau ffeil fel y gall nifer o gleientiaid gwahanol rannu (lled-gyfochrog, gan fod mynediad yn cael ei reoli gan gloeon) darllenwch ddata o un ffeil os oedd hyn yn cael ei ganiatáu pan gafodd ei agor i ddechrau gan y cleient "cyntaf".

Mae prosesu gorchmynion i greu/dileu/agor/cau ffeiliau ar y gweinydd yn cael ei wneud yn y broses “Gweithrediadau” ei hun yn llym yn olynol gan ddefnyddio is-system ffeiliau'r gweinydd OS.

Er mwyn cyflymu darllen / ysgrifennu yn gyffredinol, cyflawnir y gweithrediadau hyn mewn edafedd a silio gan y broses “Gweithrediadau”. Mae nifer yr edafedd fel arfer yn hafal i nifer y ffeiliau agored. Mae tasgau darllen/ysgrifennu gan gleientiaid yn cael eu cyflwyno i'r ciw cyffredinol ac mae'r llinyn rhydd cyntaf yn cymryd y dasg o'i phen. Mae rhesymeg arbennig yn caniatáu ichi ddileu gweithrediadau ailysgrifennu data yn RAM y gweinydd.

Mae'r broses Gweithrediadau yn monitro gweithgaredd cleientiaid ac yn peidio â'u gwasanaethu naill ai ar eu gorchmynion neu pan eir y tu hwnt i'r terfyn amser segur.

Er mwyn sicrhau dibynadwyedd, mae Cageserver yn cadw logiau o'r holl drafodion. Mae un log cyffredinol yn cynnwys copïau o negeseuon gan gleientiaid gyda thasgau i greu / agor / ailenwi / dileu ffeiliau. Crëir log ar wahân ar gyfer pob ffeil waith, lle cofnodir copïau o negeseuon gyda thasgau ar gyfer darllen ac ysgrifennu data yn y ffeil waith hon, yn ogystal ag araeau o ddata ysgrifenedig (newydd) ac araeau o ddata a ddinistriwyd yn ystod trosysgrifo (ysgrifennu data newydd “ar ben” yr hen rai). ).

Mae'r logiau hyn yn rhoi'r gallu i adfer newidiadau newydd i gopïau wrth gefn a rholio cynnwys cyfredol yn ôl i bwynt yn y gorffennol.

Mae Cageserver tua 3100 llinell o god.

System Mynediad Ffeil o Bell Cawell

Lansio rhaglen gweinydd ffeiliau Cageserver

Wrth ddechrau, yn yr ymgom mae angen i chi ddiffinio:
— prif borthladd awdurdodi;
- nifer y porthladdoedd ar gyfer cyfnewid trafodion â chleientiaid awdurdodedig (o 1 neu fwy, mae'r gronfa niferoedd yn cychwyn o'r un nesaf at rif y prif borthladd).

Defnyddio'r Dosbarth Cawell

dosbarth cawell.Cage( cage_name = "", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, aros=0, effro=Gau, cache_file="" )

Crëir gwrthrychau o'r dosbarth hwn sy'n rhyngweithio â gweinyddwyr ffeiliau ac sy'n cynnwys cof byffer.

Paramedrau

  • enw_cawell(str) - enw amodol y gwrthrych, a ddefnyddir i adnabod cleientiaid ar ochr y gweinydd
  • maint tudalennau(int) — maint un dudalen o gof byffer (mewn beit)
  • nwmpages(int) — nifer y tudalennau cof byffer
  • maxstrlen(int) - hyd mwyaf llinyn beit mewn gweithrediadau ysgrifennu a darllen
  • gweinydd_ip(dict) - geiriadur gyda chyfeiriadau'r gweinyddwyr a ddefnyddir, lle mai'r allwedd yw enw amodol y gweinydd (id gweinyddwr y tu mewn i'r rhaglen), a'r gwerth yn llinyn gyda'r cyfeiriad: “ip address:port” neu “DNS: porthladd” (dros dro yw cymharu enwau a chyfeiriadau go iawn, gall fod yn newid)
  • aros(int) — amser aros am ymateb gan y gweinydd wrth dderbyn pyrth (mewn eiliadau)
  • effro(boolean) — baner o sut mae'r gwrthrych yn cael ei greu (Anghywir - os yw gwrthrych newydd yn cael ei greu, Cywir - os yw gwrthrych yn cael ei greu o un sydd wedi'i “gwympo” yn flaenorol - gan ddefnyddio'r gweithrediad “gaeafgwsg”, Anghywir yn ddiofyn)
  • storfa_ffeil(str) - enw ffeil ar gyfer gaeafgysgu

Dulliau

Cawell.ffeil_creu( gweinydd, llwybr ) – creu ffeil newydd

Cawell.ffeil_ail-enwi( gweinydd, llwybr, new_name ) - ailenwi'r ffeil

Cawell.ffeil_remove( gweinydd, llwybr) - dileu ffeil

Cawell.agor( gweinydd, llwybr, mod ) - ffeil agored

Dychweliadau fchannel rhif sianel. Paramedr mod - dyma'r modd agor ffeil: "wm" - ecsgliwsif (darllen/ysgrifennu), "rs" - darllen-yn-unig, a'i rhannu'n unig i'w darllen gan gleientiaid eraill, "ws" - darllen/ysgrifennu, a'i rhannu yn unig i'w darllen gan cleientiaid eraill.

Cawell.cau (fchannel) - cau'r ffeil

Cawell.ysgrifennu (fchannel, dechreu, data ) – ysgrifennu llinyn beit i ffeil

Cawell.darllen (fchannel, dechrau, len_data ) – darllen llinyn beit o ffeil

Cawell.rhoi_tudalennau ( fchannel ) – “yn gwthio” o'r byffer i'r gweinydd holl dudalennau'r sianel benodedig sydd wedi'u haddasu. Fe'i defnyddir ar y pwyntiau hynny yn yr algorithm pan fydd angen i chi fod yn siŵr bod yr holl weithrediadau ar y sianel yn cael eu cadw'n gorfforol mewn ffeil ar y gweinydd.

Cawell.gwthio_all () – “gwthio” o'r byffer i'r gweinydd holl dudalennau'r holl sianeli er enghraifft o'r dosbarth Cawell sydd wedi'i addasu. Fe'i defnyddir pan fydd angen i chi fod yn siŵr bod yr holl weithrediadau ar bob sianel yn cael eu cadw ar y gweinydd.

Ffynhonnell: hab.com

Ychwanegu sylw