Kaugsalvestussüsteem Cage

Süsteemi otstarve

Toetab kaugjuurdepääsu failidele arvutites võrgus. Süsteem toetab 'virtuaalselt' kõiki peamisi failihalduse operatsioone (loomine, kustutamine, lugemine, kirjutamine jne) tehingute (sõnumite) vahetamise kaudu TCP-protokolli abil.

Rakendusvaldkonnad

Süsteemi funktsionaalsus on efektiivne järgmistel juhtudel:

  • natiivsetes rakendustes mobiilsetes ja sisse ehitatud seadmetes (nutitelefonid, pardajuhtimisseadmed jne), mis vajavad kiiret juurdepääsu failidele kaugserverites tõenäoliste sidekatkestuste olukordades (offline režiimil);
  • koormatud andmebaasides, kus päringute töötlemine toimub ühel serveril, kuid andmete salvestamine teisel;
  • jaotatud ettevõtte võrkudes andmete kogumiseks ja töötlemiseks, mis nõuab kiiret andmevahetust, varundamist ja usaldusväärsust;
  • keerulistes süsteemides, millel on mikroteenuste arhitektuur, kus teabe vahetuse viivitused moodulite vahel on kriitilise tähtsusega.

Struktuur

Cage süsteem (toimiv beta-versioon Python 3.7 operatsioonisüsteemis Windows) sisaldab kahte peamist osa:

  1. Cageserver — programmifailiserver (funktsioonide komplekt), mis töötab võrgus arvutites, millele on vajalik kaugjuurdepääs failidele;
  2. klass Cage koos kliendi tarkvara meetodite teegiga, mis lihtsustab serveritega suhtlemise kodeerimist.

Süsteemi kasutamine kliendi poolt

Klassi Cage meetodid asendavad tavalised, "rutiinsed" failisüsteemi toimingud: failide loomine, avamine, sulgemine, kustutamine ja, samuti andmete lugemine/kirjutamine binaarses formaadis (andmete positsiooni ja suuruse näitamisega). Kontseptuaalselt on need meetodid lähedased C keele failifunktsioonidele, kus failide avamine/sulgemine toimub sisendi-väljundi "kanalitel".

Teisisõnu, programmeerija ei tööta "faili" objektide (klassi _io Pythonis) meetoditega, vaid klassi Cage meetoditega.

Objekti Cage loomisel luuakse algne side serveriga (või mitme serveriga), toimub kliendi ID kaudu autoriseerimine ja saadakse kinnituskood eraldatud sadama numbri jaoks, mis on vajalik kõigi failitehingute teostamiseks. Cage objekti eemaldamisel saadetakse serverile käsk side lõpetamiseks ja failide sulgemiseks. Side katkestamist võivad algatada ka serverid.

Süsteem suurendab lugemise/kirjutamise jõudlust, põhinedes kliendiprogrammide sageli kasutatavate failifragmendi vahemälu (mälu) baasil.
Klienditarkvara võib kasutada suvalist arvu Cage objekte erinevate seadistustega (vahemälu suurus, plokkide suurus serveriga vahetamisel jne).

Üks Cage objekt võib vahetada andmeid mitme faili ja mitme serveriga. Ühenduse parameetrid (serveri IP-aadress või DNS, autoriseerimise põhikaabel, faili tee ja nimi) määratakse objekti loomisel.

Kuna iga Cage objekt võib samal ajal töötada mitme failiga, kasutatakse vahemälu jaoks ühist mäluressursi. Vahemälu suurus – lehtede arv ja nende suurus – määratakse dünaamiliselt Cage objekti loomisel. Näiteks 1 GB vahemälu on 1000 lehte, igaühe suurus 1 MB, või 10 000 lehte, igaühe suurus 100 KB, või 1 miljon lehte, igaühe suurus 1 KB. Suure ja lehtede arvu valik on konkreetne ülesanne iga rakenduse puhul.

Saab samaaegselt kasutada mitut Cage objekti, et määrata erinevaid vahemälu seadeid, mis sõltuvad erinevate failide teabele juurde pääsemise omadustest. Alusena kasutatakse lihtsaimat vahemälumehhanismi: kui määratud mälu maht on ammendatud, tõukavad uued lehed välja vanad minimaalsete juurdepääsude arvu alusel. Vahemälu on eriti efektiivne ebaühtlase (statistilisest vaatepunktist) koosjuhtimise korral, esiteks erinevate failidega ja teiseks iga faili fragmentidega.

Klasse Cage toetab andmete sisendit/ väljundit mitte ainult andmeaadresside kaudu (määrates massiivi asukoha ja pikkuse, "asendades" failisüsteemi toimingud), vaid ka madalamal, "füüsilisel" tasemel nagu mälulehtede numbrite kaudu.

Cage objektide jaoks toetatakse originaalset funktsiooni "hibernatsiooni" ("une") – neid saab "kokku voltida" (näiteks serveritega ühenduse katkemisel või rakenduse peatamisel jne) kohalikku dump-faili kliendi poolel ja kiiresti taastada sellest failist (pärast ühenduse taastamist, rakenduse uuesti käivitamisel). See vähendab oluliselt liiklust, kui kliendiprogramm aktiveeritakse pärast ajutist "offline" viibimist, kuna sagedasti kasutatavad failifragmentide osad on juba vahemälu salvestatud.

Cage koosneb umbes 3600 koodireast.

Serverite ehitamise põhimõtted

Cageserveri failiserverid saavad töötada suvalise arvu portidega, millest üks („põhiport“) kasutatakse ainult kõigi klientide autoriseerimiseks, ülejäänud aga andmevahetuseks. Cage'i serveri programm vajab ainult Pythonit. Failiserveriga arvuti saab samal ajal täita ka muid ülesandeid.

Server algab esmalt kahe põhiprotsessi kogumina:

  1. „Ühendused“ – protsess, mis tegeleb ühenduste loomise ja lõpetamisega klientidega serveri algatusel;
  2. „Operatsioonid“ – protsess, mis tegeleb klientide failide töötlemise ülesannete täitmise ja ühenduste sulgemisega klientide käsul.

Mõlemad protsessid ei ole sünkroniseeritud ning on korraldatud lõputeks spämmerimiste ja sõnumite saatmise tsükliteks mitme protsessi järjekordade, puhversalvamise, lukustuste ja socket'ite alusel.
„Ühenduse“ protsess määrab igale kliendile andmevahetuse porti. Portide arv määratakse serveri käivitamisel. Portide ja klientide vastavus hoitakse protsesside vahel jagatud puhversalves.

Protsess "Operatsioonid" toetab failide ressursside jagamist, võimaldades mitmel erineval kliendil koos (kvasiparaalselt, kuna juurdepääs on hallatav lukustuste kaudu) lugeda andmeid ühest failist, kui see on esialgse avamise ajal "esimese" kliendi poolt lubatud.

Käskluste töötlemine failide loomise / kustutamise / avamise / sulgemise kohta serveril toimub protsessis "Operatsioonid" rangelt järjestikuselt serveri OS failisüsteemi kasutades.

Ühise lugemise / kirjutamise kiirendamiseks toimuvad need toimingud voogudes (threads), mille loob protsess "Operatsioonid". Tavaliselt on voogude arv võrdsed avatud failide arvuga. Kliendilt saadetud lugemise / kirjutamise ülesanded esitatakse ühisesse järjekorda ning esimene vabanev voog haarab ülesande selle algusest. Eriline loogika välistab andmete üle kirjutamise operatiivmälu serveris.

Protsess "Operatsioonid" jälgib klientide tegevust ja lõpetab nende teenindamise nii nende käskluste alusel kui ka mitteaktiivsuse ajast ületamisel.

Для обеспечения надежности Cageserver ведет журналы всех транзакций. Один общий журнал содержит копии сообщений от клиентов с заданиями на создание/ открытие/ переименование/ удаление файлов. Для каждого рабочего файла создается отдельный журнал, в котором записываются копии сообщений с заданиями на чтение и запись данных в этом рабочем файле, а также массивы записываемых (новых) данных и массивы данных, которые оказались уничтожены при перезаписи (записи новых данных «поверх» старых).

Эти журналы обеспечивают возможность как для восстановления новых изменений в резервных копиях, так и для «отката» от текущего содержимого к нужному моменту в прошлом.

Cageserver — это около 3100 строк кода.

Kaugsalvestussüsteem Cage

Запуск программы файл-сервера Cageserver

При запуске в диалоге надо определить:
— основной порт для авторизации;
— количество портов для обмена транзакциями с авторизованными клиентами (от 1-го и более, пул номеров начинается с следующего за номером основного порта).

Использование класса Cage

class cage.Cage( cage_name=»», pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file=»» )

Sellest klassist luuakse objekte, mis suhtlevad failiserveritega ja sisaldavad puhvri mälu.

Parameetrid

  • cage_name(str) — objekti tingimuslik nimi, mida kasutatakse klientide identifitseerimiseks serveri poolel
  • pagesize(int) — ühe puhvri mälulehe suurus (baitides)
  • numpages(int) — puhvri mälu lehtede arv
  • maxstrlen(int) — maksimaalne baitide stringi pikkus kirjutamise ja lugemise operatsioonides
  • server_ip(dict) — sõnastik kasutatavate aadressidega serverite, kus võtmena on objekti tingimuslik nimi (serveri id rakenduses) ja väärtuseks on aadressi string: “ip address:port” või “DNS:port” (nimede ja tegelike aadresside sidumine on ajutine, seda saab muuta)
  • wait(int) — vastuse ootamisaja kestus serverilt sadamate saamisel (sekundites)
  • awake(boolean) — objekti loomise meetodi lipp (False — kui luuakse uus objekt, True — kui objekt luuakse varasemalt „justitud” olekust — kasutades „hibernatsiooni” operatsiooni, vaikeväärtus on vale)
  • cache_file(str) — hibernateerimise failinimi

Meetodid

Kehav.file_create( server, path ) – loo uus fail

Kehav.file_rename( server, path, new_name ) – muuda faili nime

Kehav.file_remove( server, path) – kustuta fail

Kehav.open( server, path, mod ) – avamine fail

Tagastab fchannel kanali number. Parameeter mod — see fail avamise režiim: „wm“ — monopolne (lugemine/kirjutamine), „rs“ — ainult lugemine ja teiste klientide poolt jagatud lugemine, „ws“ — lugemine/kirjutamine ning teistele klientidele jagatud ainult lugemiseks.

Kehav.close (fchannel) – sulge fail

Kehav.write (fchannel, begin, data ) – kirjuta baitide string faili

Kehav.read (fchannel, begin, len_data ) – loe baitide string faili

Kehav.put_pages ( fchannel ) – „vabastab“ serverisse kõik määratud kanali muudetud lehed puhvrist. Kasutatakse nendes algoritmi punktides, kus on oluline olla kindel, et kõik toimingud kanalil on füüsiliselt salvestatud failis serveris.

Kehav.push_all () – „vabastab“ serverisse kõik määratud klassi Cage instantsi kõigi kanalite muudetud lehed puhvrist. Kasutatakse, kui on oluline olla kindel, et kõik toimingud kõikidel kanalitel on serveris salvestatud.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster