Cage Remote File Access System

Համակարգի նպատակը

Աջակցություն ցանցում գտնվող համակարգիչների վրա ֆայլերի հեռակա մուտքի համար: Համակարգը «վիրտուալ» աջակցում է ֆայլի բոլոր հիմնական գործողություններին (ստեղծում, ջնջում, ընթերցում, գրում և այլն)՝ փոխանակելով գործարքներ (հաղորդագրություններ) TCP արձանագրության միջոցով:

Դիմումները

Համակարգի ֆունկցիոնալությունը արդյունավետ է հետևյալ դեպքերում.

  • շարժական և ներկառուցված սարքերի (սմարթֆոններ, ներկառուցված կառավարման համակարգեր և այլն) բնիկ հավելվածներում, որոնք պահանջում են արագ մուտք դեպի հեռավոր սերվերների ֆայլեր՝ հաղորդակցության հնարավոր ժամանակավոր ընդհատումների դեպքում (անցանց ռեժիմում);
  • բեռնված DBMS-ներում, եթե հարցումների մշակումն իրականացվում է որոշ սերվերների վրա, իսկ տվյալների պահպանումն իրականացվում է մյուսների վրա.
  • բաշխված կորպորատիվ ցանցերում տեղեկատվության հավաքման և մշակման համար, որոնք պահանջում են տվյալների բարձր արագության փոխանակում, ավելորդություն և հուսալիություն.
  • միկրոսերվիսային ճարտարապետությամբ բարդ համակարգերում, որտեղ մոդուլների միջև տեղեկատվության փոխանակման հետաձգումները կարևոր են:

Կառուցվածք

Cage համակարգ (կա իրականացում՝ բետա տարբերակ Python 3.7-ում օպերացիոն համակարգում) Windows) ներառում է երկու հիմնական մաս՝

  1. Cageserver — ֆայլերի սերվերի ծրագիր (գործառույթների փաթեթ), որն աշխատում է ցանցի համակարգիչների վրա, որոնց ֆայլերը պահանջում են հեռավոր մուտք.
  2. դաս Վանդակ հաճախորդի ծրագրային ապահովման մեթոդների գրադարանով, պարզեցնելով սերվերների հետ փոխգործակցության կոդավորումը:

Օգտագործելով համակարգը հաճախորդի կողմից

Cage դասի մեթոդները փոխարինում են սովորական, «սովորական» ֆայլային համակարգի գործողությունները. ստեղծում, բացում, փակում, ջնջում ֆայլեր, ինչպես նաև տվյալների ընթերցում/գրում երկուական ձևաչափով (նշելով տվյալների դիրքը և չափը): Հայեցակարգային առումով այս մեթոդները մոտ են C լեզվի ֆայլային ֆունկցիաներին, որտեղ ֆայլերի բացումը/փակումը կատարվում է մուտքի/ելքի «ալիքների վրա»:

Այլ կերպ ասած, ծրագրավորողը չի աշխատում «ֆայլի» օբյեկտների մեթոդներով (դաս _io Python-ում), բայց Cage դասի մեթոդներով։

Երբ ստեղծվում է Cage օբյեկտի օրինակ, այն սկզբնական կապ է հաստատում սերվերի (կամ մի քանի սերվերների) հետ, լիազորված է Client Id-ի կողմից և ստանում է հաստատում հատուկ պորտի համարով բոլոր ֆայլերի գործողությունների համար: Երբ Cage օբյեկտը ջնջվում է, այն հրահանգում է սերվերին դադարեցնել հաղորդակցությունը և փակել ֆայլերը: Կապի դադարեցումը կարող է նախաձեռնվել նաև հենց սերվերների կողմից:

Համակարգը բարելավում է կարդալու/գրելու աշխատանքը՝ հաճախորդի ծրագրերի հաճախ օգտագործվող ֆայլերի բեկորները բուֆերավորելով RAM-ի քեշում (բուֆեր):
Հաճախորդի ծրագրակազմը կարող է օգտագործել ցանկացած քանակությամբ Cage օբյեկտներ տարբեր կարգավորումներով (բուֆերային հիշողության չափ, բլոկի չափ սերվերի հետ փոխանակելիս և այլն):

Մեկ Cage օբյեկտը կարող է շփվել մի քանի ֆայլերի հետ մի քանի սերվերների վրա: Օբյեկտը ստեղծելիս նշվում են հաղորդակցման պարամետրերը (IP հասցե կամ DNS սերվեր, թույլտվության հիմնական պորտ, ուղի և ֆայլի անվանումը):

Քանի որ Cage-ի յուրաքանչյուր օբյեկտ կարող է միաժամանակ աշխատել մի քանի ֆայլերի հետ, ընդհանուր հիշողության տարածությունն օգտագործվում է բուֆերացման համար: Քեշի չափը – էջերի քանակը և դրանց չափը, դինամիկ կերպով սահմանվում է Cage օբյեկտ ստեղծելիս: Օրինակ, 1 ԳԲ քեշը կազմում է 1000 էջ՝ յուրաքանչյուրը 1 ՄԲ, կամ 10 հազար էջ՝ յուրաքանչյուրը 100 ԿԲ, կամ 1 միլիոն էջ՝ յուրաքանչյուրը 1 ԿԲ: Էջերի չափի և քանակի ընտրությունը հատուկ խնդիր է յուրաքանչյուր դիմումի դեպքի համար:

Դուք կարող եք օգտագործել մի քանի Cage օբյեկտներ միաժամանակ՝ տարբեր բուֆերային հիշողության կարգավորումներ սահմանելու համար՝ կախված այն բանից, թե ինչպես է տեղեկատվության հասանելիությունը տարբեր ֆայլերում: Որպես հիմնական, օգտագործվում է ամենապարզ բուֆերային ալգորիթմը. հիշողության որոշակի քանակի սպառվելուց հետո նոր էջերը տեղահանում են հինները՝ ըստ կենսաթոշակի սկզբունքի՝ նվազագույն մուտքերի քանակով: Բուֆերավորումը հատկապես արդյունավետ է անհավասար (վիճակագրական իմաստով) ընդհանուր հասանելիության դեպքում, նախ՝ տարբեր ֆայլեր, և երկրորդ՝ յուրաքանչյուր ֆայլի հատվածներ։

Cage դասը աջակցում է I/O ոչ միայն տվյալների հասցեներով (նշելով զանգվածի դիրքը և երկարությունը, ֆայլային համակարգի «փոխարինող» գործառնությունները), այլև ավելի ցածր, «ֆիզիկական» մակարդակում՝ բուֆերային հիշողության մեջ էջերի համարներով:

Բնօրինակ գործառույթը աջակցվում է Cage օբյեկտների համար «ձմեռում» («քուն») - դրանք կարող են «փլուզվել» (օրինակ՝ սերվերների հետ կապի կորստի դեպքում, կամ երբ հավելվածը դադարեցվում է և այլն) հաճախորդի կողմում գտնվող տեղական աղբանոց ֆայլի մեջ և արագ վերականգնվել այնտեղից։ այս ֆայլը (հաղորդակցությունը վերսկսելուց հետո, երբ վերագործարկեք հավելվածը): Սա հնարավորություն է տալիս զգալիորեն նվազեցնել երթևեկությունը հաճախորդի ծրագիրը ժամանակավորապես «օֆլայն» անցնելուց հետո ակտիվացնելիս, քանի որ հաճախ օգտագործվող ֆայլի բեկորներն արդեն կլինեն քեշում:

Cage-ը մոտավորապես 3600 տող կոդ է:

Սերվերի կառուցման սկզբունքները

Cageserver ֆայլերի սերվերները կարող են գործարկվել կամայական թվով նավահանգիստներով, որոնցից մեկը («հիմնականը») օգտագործվում է միայն բոլոր հաճախորդների թույլտվության համար, մնացածը օգտագործվում են տվյալների փոխանակման համար: Cage սերվերի ծրագիրը պահանջում է միայն Python: Զուգահեռաբար ֆայլերի սերվերով համակարգիչը կարող է կատարել ցանկացած այլ աշխատանք։

Սերվերը սկզբում սկսվում է որպես երկու հիմնական գործընթացների հավաքածու.

  1. «Միացումներ» – հաճախորդների հետ կապ հաստատելու և սերվերի նախաձեռնությամբ այն դադարեցնելու գործողությունների կատարման գործընթաց.
  2. «Գործողություններ» – ֆայլերի հետ աշխատելու հաճախորդների առաջադրանքների (գործառնությունների) կատարման գործընթաց, ինչպես նաև հաճախորդի հրամանների հիման վրա հաղորդակցման նիստերը փակելու համար:

Երկու գործընթացներն էլ համաժամանակացված չեն և կազմակերպվում են որպես հաղորդագրություններ ստանալու և ուղարկելու անվերջ օղակներ՝ հիմնված բազմապրոցեսային հերթերի, պրոքսի օբյեկտների, կողպեքների և վարդակների վրա:
Միացման գործընթացը յուրաքանչյուր հաճախորդի համար հատկացնում է մի նավահանգիստ՝ տվյալներ ստանալու և փոխանցելու համար: Նավահանգիստների թիվը սահմանվում է սերվերի գործարկման ժամանակ: Նավահանգիստների և սպասառուների միջև քարտեզագրումը պահվում է միջգործընթացային համօգտագործվող պրոքսի հիշողության մեջ:

Գործառնությունների գործընթացն աջակցում է ֆայլերի ռեսուրսների փոխանակմանը, որպեսզի մի քանի տարբեր հաճախորդներ կարողանան կիսվել (քվազի զուգահեռ, քանի որ մուտքը վերահսկվում է կողպեքներով) կարդալ տվյալները մեկ ֆայլից, եթե դա թույլատրված էր, երբ այն սկզբում բացվեց «առաջին» հաճախորդի կողմից:

Ֆայլեր ստեղծելու/ջնջելու/բացելու/փակելու հրամանների մշակում սերվեր իրականացվում է «Գործողություն» գործընթացում, խստորեն հաջորդաբար օգտագործելով սերվերի ՕՀ-ի ֆայլային ենթահամակարգը:

Ընդհանուր առմամբ կարդալը/գրելը արագացնելու համար այս գործողությունները կատարվում են «Գործողություններ» գործընթացի արդյունքում առաջացած թելերով: Թելերի քանակը սովորաբար հավասար է բաց ֆայլերի թվին: Հաճախորդներից կարդալ/գրել առաջադրանքները ներկայացվում են ընդհանուր հերթին և առաջին անվճար շարանը վերցնում է առաջադրանքը գլխից: Հատուկ տրամաբանությունը թույլ է տալիս վերացնել տվյալների վերագրանցման գործողությունները սերվերի RAM-ում:

Գործառնությունների գործընթացը վերահսկում է հաճախորդի գործունեությունը և դադարեցնում է նրանց սպասարկումը կամ նրանց հրամանների հիման վրա, կամ երբ անգործության ժամկետը գերազանցում է:

Հուսալիությունն ապահովելու համար Cageserver-ը պահում է բոլոր գործարքների մատյանները: Մեկ ընդհանուր մատյան պարունակում է հաճախորդների հաղորդագրությունների պատճեններ՝ ֆայլեր ստեղծելու/բացելու/վերանվանելու/ջնջելու առաջադրանքներով: Յուրաքանչյուր աշխատանքային ֆայլի համար ստեղծվում է առանձին տեղեկամատյան, որում գրանցվում են հաղորդագրությունների պատճենները՝ այս աշխատանքային ֆայլում տվյալների կարդալու և գրելու առաջադրանքներով, ինչպես նաև գրված (նոր) տվյալների զանգվածներ և տվյալների զանգվածներ, որոնք ոչնչացվել են վերագրանցման (գրելու) ժամանակ։ նոր տվյալներ «վերևում» հինների վրա):

Այս տեղեկամատյանները հնարավորություն են տալիս ինչպես վերականգնելու նոր փոփոխությունները կրկնօրինակումներում, այնպես էլ ընթացիկ բովանդակությունը հետ բերելու անցյալի մի կետ:

Cageserver-ը մոտավորապես 3100 տող կոդ է:

Cage Remote File Access System

Cageserver ֆայլերի սերվերի ծրագրի գործարկումը

Սկսելիս երկխոսության մեջ դուք պետք է սահմանեք.
- հիմնական նավահանգիստը թույլտվության համար.
— լիազորված հաճախորդների հետ գործարքների փոխանակման նավահանգիստների քանակը (1-ից և ավելի թվերի ֆոնդը սկսվում է հիմնական պորտի համարի կողքին գտնվողից):

Օգտագործելով վանդակի դասը

դաս վանդակՎանդակ( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )

Այս դասից ստեղծվում են օբյեկտներ, որոնք փոխազդում են ֆայլային սերվերների հետ և պարունակում են բուֆերային հիշողություն:

Պարամետրեր

  • վանդակի_անուն(փող) - օբյեկտի պայմանական անվանումը, որն օգտագործվում է սերվերի կողմից հաճախորդները նույնականացնելու համար
  • էջի չափը(int) - բուֆերային հիշողության մեկ էջի չափը (բայթերով)
  • numpages(int) - բուֆերային հիշողության էջերի քանակը
  • maxstrlen(int) - բայթ տողի առավելագույն երկարությունը գրելու և կարդալու գործողություններում
  • server_ip(թելադրել) - օգտագործված հասցեներով բառարան սերվերներ, որտեղ բանալին սերվերի պայմանական անունն է (ծրագրի ներսում գտնվող սերվերի ID-ն), իսկ արժեքը տող է՝ «ip address:port» կամ «DNS:port» հասցեով (անունների և իրական հասցեների համապատասխանեցումը ժամանակավոր է և կարող է փոխվել):
  • սպասել(int) — սերվերից պատասխանի սպասման ժամանակ նավահանգիստներ ստանալիս (վայրկյաններով)
  • արթուն(բուլյան) - դրոշակ, թե ինչպես է ստեղծվում օբյեկտը (Կեղծ - եթե ստեղծվում է նոր օբյեկտ, Ճիշտ - եթե օբյեկտը ստեղծվել է նախկինում «փլուզված» օբյեկտից, օգտագործելով «ձմեռում» գործողությունը, ըստ լռելյայն կեղծ)
  • cache_file(փող) - ֆայլի անունը ձմեռման համար

Մեթոդներ

Վանդակ.file_create( սերվեր, ուղի ) – ստեղծել նոր ֆայլ

Վանդակ.file_rename( սերվեր, ուղի, նոր_անուն ) – վերանվանել ֆայլը

Վանդակ.file_remove( սերվեր, ուղի) - ջնջել ֆայլը

Վանդակ.բացել( սերվեր, ուղի, ռեժիմ ) - բացել ֆայլը

Վերադառնում է fchannel ալիքի համարը. Պարամետր ՊՆ - սա ֆայլի բացման ռեժիմն է. «wm» - բացառիկ (կարդալ/գրել), «rs» - միայն կարդալու համար և համօգտագործվել միայն այլ հաճախորդների կողմից կարդալու համար, «ws» - կարդալ/գրել և կիսվել միայն կարդալու համար: այլ հաճախորդներ:

Վանդակ.սերտ (fchannel) – փակել ֆայլը

Վանդակ.գրել (fchannel, սկիզբ, տվյալներ ) – գրել բայթ տող ֆայլում

Վանդակ.կարդալ (fchannel, start, len_data ) – կարդալ բայթ տող ֆայլից

Վանդակ.put_pages ( fchannel ) – «մղում» է բուֆերից դեպի սերվեր նշված ալիքի բոլոր էջերը, որոնք փոփոխվել են: Այն օգտագործվում է ալգորիթմի այն կետերում, երբ դուք պետք է համոզվեք, որ ալիքի բոլոր գործողությունները ֆիզիկապես պահվում են սերվերի ֆայլում:

Վանդակ.push_all () – «մղում» է բուֆերից դեպի սերվեր բոլոր ալիքների բոլոր էջերը՝ փոփոխված Cage դասի օրինակի համար: Օգտագործվում է այն դեպքում, երբ դուք պետք է համոզվեք, որ բոլոր ալիքների բոլոր գործողությունները պահվում են սերվերում:

Source: www.habr.com

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster