Cage-systemet til fjernfilsadgang

Systemets FormÄl

UnderstÞttelse af fjernadgang til filer pÄ computere i netvÊrket. Systemet "understÞtter" alle primÊre filoperationer (oprettelse, sletning, lÊsning, skrivning osv.) ved at udveksle transaktioner (meddelelser) via TCP-protokollen.

AnvendelsesomrÄder

Systemets funktionalitet er effektiv i fĂžlgende tilfĂŠlde:

  • i native applikationer til mobile og embedded enheder (smartphones, on-board kontrolsystemer mv.), der krĂŠver hurtig adgang til filer pĂ„ fjernservere under forhold med mulige midlertidige afbrydelser i forbindelsen (ved at gĂ„ offline);
  • i belastede databasesystemer, hvis behandlingen af anmodninger foregĂ„r pĂ„ Ă©n server, mens data opbevares pĂ„ en anden;
  • i distribuerede virksomhedsnetsvĂŠrk til indsamling og behandling af information, der krĂŠver hĂžj dataudvekslingshastighed, sikkerhedskopiering og pĂ„lidelighed;
  • i komplekse systemer med mikroservices-arkitektur, hvor forsinkelser i informationsudveksling mellem moduler er kritisk vigtige.

Struktur

Cage-systemet (der er en implementering — beta-version pĂ„ Python 3.7 pĂ„ Windows OS) omfatter to hoveddele:

  1. Cageserver — en programfilserver (funktionspakke), der kĂžrer pĂ„ computere i netvĂŠrket, som har brug for fjernadgang til filer;
  2. klasse Cage med et bibliotek af metoder til klientsoftware, der forenkler kodningen af interaktionen med servere.

Brug af systemet pÄ klientsiden

Metoderne i Cage-klassen erstatter almindelige, "rutinemÊssige" operationer i filsystemet: oprettelse, Äbning, lukning, sletning af filer, samt lÊsning/skrivning af data i binÊrt format (med angivelse af position og stÞrrelse af data). Konceptuelt er disse metoder tÊt pÄ filfunktionerne i C-sproget, hvor Äbning/lukning af filer foregÄr "pÄ kanaler" for ind- og uddata.

Med andre ord arbejder programmĂžren ikke med metoderne for "filobjekter" (klassen _io i Python), men med metoderne i Cage-klassen.

Ved oprettelse af en forekomst af objekter Cage etablerer den en indledende forbindelse til serveren (eller flere servere), gennemgÄr godkendelse ved klientens Id og modtager en bekrÊftelse med nummeret pÄ den tildelte port for at udfÞre alle filoperationer. NÄr Cage-objektet fjernes, giver det serveren kommandoen til at stoppe forbindelsen og lukke filer. Afbrydelsen af forbindelsen kan ogsÄ initieres af serverne selv.

Systemet forbedrer lÊse-/skrivehastigheden baseret pÄ buffring af ofte anvendte filfragmenter i cache (buffer) i det volatile hukommelse.
Klientsoftwaren kan bruge et vilkÄrligt antal Cage-objekter med forskellige indstillinger (mÊngde af bufferhukommelse, blokstÞrrelser ved kommunikation med serveren osv.).

Et Cage-objekt kan udveksle data med flere filer pÄ flere servere. Parametrene for forbindelsen (IP-adresse eller DNS-server, hovedport til autorisation, sti og filnavn) angives ved oprettelsen af objektet.

Da hvert Cage-objekt kan arbejde simultant med mange filer, anvendes et fĂŠlles hukommelsesrum til buffring. Cache-stĂžrrelsen – antallet af sider og deres stĂžrrelse – sĂŠttes dynamisk ved oprettelsen af Cage-objektet. For eksempel er en cache pĂ„ 1 GB lig med 1000 sider pĂ„ 1 MB, eller 10.000 sider pĂ„ 100 KB, eller 1 million sider pĂ„ 1 KB. Valget af stĂžrrelse og antal sider er en specifik opgave for hver anvendelsessituation.

Det er muligt at bruge flere Cage-objekter samtidigt for at definere forskellige indstillinger for bufferhukommelse afhÊngigt af adgangsforholdene til oplysningerne i forskellige filer. En simpel buffer-algoritme anvendes grundlÊggende: nÄr den tildelte mÊngde hukommelse er udtÞmt, erstatter nye sider gamle ifÞlge princippet for udsmidning med minimale adgangsnumre. Buffring er isÊr effektiv i tilfÊlde af uregelmÊssig (i statistisk forstand) samtidig adgang, fÞrst til forskellige filer og dernÊst til fragmenter af hver fil.

Cage-klassen understĂžtter input/output ikke kun efter dataadresser (med angivelse af position og lĂŠngde af arrayet, "erstatte" filsystemoperationer), men ogsĂ„ pĂ„ et lavere, "fysisk" niveau — efter side-numre i bufferhukommelsen.

For Cage-objekter understĂžttes den originale funktion "hibernation" («pause») – de kan «minimeres» (for eksempel ved tab af forbindelse til serverne eller ved stop af applikationen osv.) til en lokal dump-fil pĂ„ klientsiden og hurtigt genskabes fra denne fil (efter genoptagelse af forbindelsen, ved genstart af applikationen). Dette muliggĂžr en betydelig reduktion af trafikken, nĂ„r klientprogrammet genoptages efter et midlertidigt offline-ophold, da ofte anvendte filfragmenter allerede vil vĂŠre i cachen.

Cage er omkring 3600 linjer kode.

Principper for serveropbygning

Cageserver fil-servere kan startes med et vilkÄrligt antal porte, hvoraf en («primÊr») kun bruges til autorisering af alle klienter, mens de Þvrige bruges til dataudveksling. For Cage-serverprogrammet krÊves kun Python. Samtidig kan computeren med fil-serveren udfÞre andet arbejde.

Serveren startes fĂžrst som en samling af to hovedprocesser:

  1. «Forbindelser» – processen for at udfĂžre forbindelsesetablering med klienterne og afslutte forbindelsen efter serverens initiativ;
  2. «Operationer» – processen til at udfĂžre opgaver (operationer) for klienter i forhold til filer samt til at afslutte sessionsforbindelser efter klienternes kommandoer.

Begge processer er ikke synkroniserede og organiseret som uendelige cyklusser for modtagelse og afsendelse af meddelelser baseret pÄ multiprocess-queues, proxy-objekter, lÄse og sockets.
Processen «Forbindelser» tildeler hver klient en port til dataoverfÞrsel. Antallet af porte angives ved opstart af serveren. Forholdet mellem porte og klienter opbevares i delt proxy-hukommelse mellem processerne.

Processen «Operationer» understÞtter deling af filressourcer, hvorved flere forskellige klienter kan lÊse data fra en fil fÊlles (kvasi-parallelt, da adgangen styres af lÄse) hvis dette blev tilladt ved filens indledende Äbning af den «fÞrste» klient.

Behandling af kommandoer til oprettelse/sletning/Äbning/lukning af filer pÄ serveren foregÄr i selve «Operationer»-processen strengt sekventielt ved hjÊlp af serverens OS filsystem.

For overall read/write speed improvement, these operations are carried out in threads created by the "Operations" process. The number of threads typically equals the number of open files. Read/write tasks from clients are submitted to a common queue, and the first available thread picks a task from its head. Special logic allows for the exclusion of data overwrite operations in the server's RAM.

The "Operations" process monitors client activity and stops servicing them either at their commands or upon exceeding the inactivity timeout.

To ensure reliability, Cageserver maintains logs of all transactions. One common log contains copies of messages from clients with tasks to create/open/rename/delete files. For each working file, a separate log is created, which records copies of messages with read and write data tasks in this working file, as well as arrays of written (new) data and arrays of data that have been destroyed during overwrites (writing new data "over" old data).

These logs provide the ability for both recovering new changes in backups and for "rolling back" from the current content to a desired point in the past.

Cageserver consists of about 3100 lines of code.

Cage-systemet til fjernfilsadgang

Launching the file server program Cageserver

When started, the dialogue must specify:
— the main port for authorization;
— the number of ports for transaction exchange with authorized clients (from 1 and more, the pool of numbers starts from the next one after the main port number).

Using the Cage class

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

Objects are created from this class that interact with file servers and contain buffer memory.

Parametre

  • cage_name(str) — a conditional name for the object used when identifying clients on the server side
  • pagesize(int) — the size of one page of buffer memory (in bytes)
  • numpages(int) — the number of pages of buffer memory
  • maxstrlen(int) — the maximum length of byte strings in read and write operations
  • server_ip(dict) — a dictionary with the addresses used servere, hvor nĂžglen er det betingede servernavn (server-id'et indenfor applikationen), og vĂŠrdien er en streng med adressen: “ip address:port” eller “DNS:port” (kortlĂŠgningen af navne og virkelige adresser er midlertidig, den kan ĂŠndres)
  • vent(int) — ventetiden for svar fra serveren ved modtagelse af porte (i sek.)
  • vĂ„gen(boolean) — flag for metoden til at oprette objektet (False — hvis der oprettes et nyt objekt, Sand — hvis objektet oprettes fra et tidligere “indlejret” — ved brug af operationen “hibernation”, som standard er False)
  • cache_file(str) — filnavnet til hibernation

Metoder

Cage.file_create( server, sti ) – opret en ny fil

Cage.file_rename( server, sti, new_name ) – omdþb filen

Cage.file_remove( server, sti) – slet filen

Cage.open( server, sti, mod ) – Ă„bn filen

Returnerer fchannel kanalnummer. Parameteren mod — er tilstanden for Ă„bning af filen: “wm” — monopol (lĂŠsning/skrivning), “rs” — kun lĂŠsning, og delt kun til lĂŠsning af andre kunder, “ws” — lĂŠsning/skrivning, og delt kun til lĂŠsning af andre kunder.

Cage.close (fchannel) – luk filen

Cage.write (fchannel, begin, data ) – skriv en byte-streng til filen

Cage.write (fchannel, begin, len_data ) – lés en byte-streng fra filen

Cage.put_pages ( fchannel ) – “skubber” alle sider fra den angivne kanal, som er blevet modificeret, ud af bufferen til serveren. Bruges i de punkter i algoritmen, hvor det er nĂždvendigt at vĂŠre sikker pĂ„, at alle operationer pĂ„ kanalen er fysisk gemt i filen pĂ„ serveren.

Cage.push_all () – “skubber” alle sider fra bufferen til serveren for alle kanaler for instansen af klassen Cage, som er blevet modificeret. Bruges, nĂ„r det er nĂždvendigt at vĂŠre sikker pĂ„, at alle operationer pĂ„ alle kanaler er gemt pĂ„ serveren.

Kilde: habr.com

KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster