Cage Uzaqdan Fayl Giriş Sistemi

Sistem məqsədi

Şəbəkədəki kompüterlərdəki fayllara uzaqdan daxil olmaq üçün dəstək. Sistem TCP protokolundan istifadə etməklə əməliyyatlar (mesajlar) mübadiləsi aparmaqla bütün əsas fayl əməliyyatlarını (yaratmaq, silmək, oxumaq, yazmaq və s.) “faktiki olaraq” dəstəkləyir.

Proqramlar

Sistemin funksionallığı aşağıdakı hallarda təsirli olur:

  • rabitədə mümkün müvəqqəti fasilələr (oflayn rejimdə olmaqla) şəraitində uzaq serverlərdəki fayllara sürətli çıxış tələb edən mobil və quraşdırılmış qurğular (smartfonlar, bortda idarəetmə sistemləri və s.) üçün yerli proqramlarda;
  • yüklənmiş DBMS-lərdə sorğunun emalı bəzi serverlərdə, məlumatların saxlanması isə digərlərində həyata keçirilirsə;
  • yüksək sürətli məlumat mübadiləsi, ehtiyat və etibarlılıq tələb edən məlumatların toplanması və emalı üçün paylanmış korporativ şəbəkələrdə;
  • modullar arasında məlumat mübadiləsində gecikmələrin kritik olduğu mikroservis arxitekturasına malik mürəkkəb sistemlərdə.

Struktur

Cage sistemi (Windows-da Python 3.7-də tətbiqi var - beta versiyası) iki əsas hissədən ibarətdir:

  1. Qəfəs serveri — faylları uzaqdan giriş tələb edən şəbəkədəki kompüterlərdə işləyən fayl server proqramı (funksiyalar paketi);
  2. sinif Qəfəs serverlərlə qarşılıqlı əlaqənin kodlaşdırılmasını sadələşdirən müştəri proqram təminatı üçün metodlar kitabxanası ilə.

Sistemdən müştəri tərəfində istifadə

Cage sinifinin metodları adi, "adi" fayl sistemi əməliyyatlarını əvəz edir: yaradılması, açılması, bağlanması, silinməsi faylları, eləcə də ikili formatda məlumatların oxunması/yazılması (məlumatların mövqeyini və ölçüsünü göstərən). Konseptual olaraq, bu üsullar C dilinin fayl funksiyalarına yaxındır, burada faylların açılması/bağlanması giriş/çıxışın “kanallarında” həyata keçirilir.

Başqa sözlə, proqramçı “fayl” obyektlərinin metodları ilə işləmir (sinif _io Python-da), lakin Cage sinifinin metodları ilə.

Cage obyektinin nümunəsi yaradıldıqda, o, server (və ya bir neçə server) ilə ilkin əlaqə yaradır, Müştəri İd-si tərəfindən icazə verilir və bütün fayl əməliyyatları üçün xüsusi port nömrəsi ilə təsdiq alır. Qəfəs obyekti silindikdə o, serverə əlaqəni dayandırmağı və faylları bağlamağı əmr edir. Əlaqənin dayandırılması serverlərin özləri tərəfindən də başlana bilər.

Sistem RAM keşində (bufer) müştəri proqramlarının tez-tez istifadə olunan fayl fraqmentlərini bufer etməklə oxu/yazma performansını yaxşılaşdırır.
Müştəri proqram təminatı müxtəlif parametrlərə malik istənilən sayda Cage obyektlərindən istifadə edə bilər (bufer yaddaşının ölçüsü, serverlə mübadilə zamanı blokun ölçüsü və s.).

Tək Cage obyekti birdən çox serverdə birdən çox fayl ilə əlaqə saxlaya bilər. Rabitə parametrləri (IP ünvanı və ya DNS serveri, avtorizasiya üçün əsas port, yol və fayl adı) obyekt yaradılarkən müəyyən edilir.

Hər bir Cage obyekti eyni vaxtda bir neçə faylla işləyə bildiyindən, buferləmə üçün ortaq yaddaş sahəsi istifadə olunur. Cache ölçüsü – səhifələrin sayı və onların ölçüsü, Cage obyekti yaratarkən dinamik olaraq təyin edilir. Məsələn, 1 GB keş yaddaşı hər biri 1000 MB olan 1 səhifə və ya hər biri 10 KB olan 100 min səhifə və ya hər biri 1 KB olan 1 milyon səhifədir. Səhifələrin ölçüsünü və sayını seçmək hər bir tətbiq işi üçün xüsusi bir vəzifədir.

Fərqli fayllarda məlumatın necə əldə olunduğundan asılı olaraq müxtəlif bufer yaddaş parametrlərini təyin etmək üçün eyni vaxtda bir neçə Cage obyektindən istifadə edə bilərsiniz. Əsas olaraq, ən sadə tamponlama alqoritmi istifadə olunur: müəyyən bir yaddaş miqdarı tükəndikdən sonra yeni səhifələr minimum giriş sayı ilə təqaüdə çıxma prinsipinə uyğun olaraq köhnə səhifələri əvəz edir. Buferləmə xüsusilə qeyri-bərabər (statistik mənada) birincisi, müxtəlif fayllara, ikincisi, hər bir faylın fraqmentlərinə ortaq giriş halında effektivdir.

Cage sinfi giriş/çıxışı yalnız məlumat ünvanları (massivin mövqeyini və uzunluğunu göstərən, fayl sistemi əməliyyatlarını "əvəz etməklə") deyil, həm də daha aşağı, "fiziki" səviyyədə - bufer yaddaşındakı səhifə nömrələri ilə dəstəkləyir.

Orijinal funksiya Qəfəs obyektləri üçün dəstəklənir "qış yuxusu" (“yuxu”) - onlar müştəri tərəfindəki yerli dump faylına “yıxıla” (məsələn, serverlərlə əlaqə kəsildikdə və ya proqram dayandırıldıqda və s.) bu fayl (əlaqə bərpa edildikdən sonra, proqramı yenidən başlatdığınız zaman). Bu, müvəqqəti olaraq "oflayn" olduqdan sonra müştəri proqramını aktivləşdirərkən trafiki əhəmiyyətli dərəcədə azaltmağa imkan verir, çünki tez-tez istifadə olunan fayl fraqmentləri artıq keşdə olacaqdır.

Qəfəs təxminən 3600 sətir koddur.

Server quruluşunun prinsipləri

Cageserver fayl serverləri ixtiyari sayda portlarla işlədilə bilər, onlardan biri (“əsas”) yalnız bütün müştərilərin avtorizasiyası üçün, qalanları isə məlumat mübadiləsi üçün istifadə olunur. Cage server proqramı yalnız Python tələb edir. Paralel olaraq, fayl serveri olan kompüter hər hansı digər işi yerinə yetirə bilər.

Server ilkin olaraq iki əsas prosesin toplusu kimi başlayır:

  1. "Əlaqələr" – serverin təşəbbüsü ilə müştərilərlə əlaqənin qurulması və onun dayandırılması əməliyyatlarının yerinə yetirilməsi prosesi;
  2. "Əməliyyatlar" – müştərilərin fayllarla işləmək üzrə tapşırıqlarının (əməliyyatlarının) yerinə yetirilməsi, həmçinin müştəri əmrləri əsasında rabitə seanslarının bağlanması prosesi.

Hər iki proses sinxronlaşdırılmır və çoxprosesli növbələr, proxy obyektlər, kilidlər və yuvalar əsasında mesajların qəbulu və göndərilməsinin sonsuz döngələri kimi təşkil edilir.
Bağlantı prosesi məlumatların qəbulu və ötürülməsi üçün hər bir müştəri üçün bir port ayırır. Portların sayı server işə salındıqda təyin edilir. Portlar və müştərilər arasında xəritələşmə proseslərarası paylaşılan proksi yaddaşda saxlanılır.

Əməliyyatlar prosesi fayl resurslarının paylaşılmasını dəstəkləyir ki, birdən çox fərqli müştəri paylaşa bilsin (kvazi paralel, giriş kilidlər tərəfindən idarə olunduğu üçün) bir fayldan məlumatları oxuyun, əgər buna ilkin olaraq "birinci" müştəri tərəfindən açıldıqda icazə verilirdi.

Serverdə faylları yaratmaq/silmək/açmaq/bağlamaq əmrlərinin emalı “Əməliyyatlar” prosesinin özündə ciddi ardıcıllıqla server ƏS-nin fayl alt sistemindən istifadə etməklə həyata keçirilir.

Ümumiyyətlə oxumağı/yazmağı sürətləndirmək üçün bu əməliyyatlar “Əməliyyatlar” prosesinin yaratdığı iplərdə yerinə yetirilir. Mövzuların sayı adətən açıq faylların sayına bərabər olur. Müştərilərdən oxumaq/yazmaq tapşırıqları ümumi növbəyə təqdim edilir və ilk pulsuz başlıq tapşırığı başından götürür. Xüsusi məntiq serverin RAM-da məlumatların yenidən yazılması əməliyyatlarını aradan qaldırmağa imkan verir.

Əməliyyatlar prosesi müştərinin fəaliyyətinə nəzarət edir və ya onların əmrləri əsasında, ya da fəaliyyətsizlik vaxtı keçdikdə onlara xidmət göstərməyi dayandırır.

Etibarlılığı təmin etmək üçün Cageserver bütün əməliyyatların qeydlərini aparır. Bir ümumi jurnal faylları yaratmaq/açmaq/adını dəyişmək/silmək üçün tapşırıqları olan müştərilərdən gələn mesajların surətlərini ehtiva edir. Hər bir iş faylı üçün ayrıca bir jurnal yaradılır ki, orada bu iş faylında məlumatların oxunması və yazılması tapşırıqları olan mesajların nüsxələri, habelə yazılı (yeni) məlumatların massivləri və yenidən yazma (yazma) zamanı məhv edilmiş məlumat massivləri qeyd olunur. yeni məlumatlar köhnələrin "üstündə"). ).

Bu qeydlər həm ehtiyat nüsxələrindəki yeni dəyişiklikləri bərpa etmək, həm də cari məzmunu keçmişdə bir nöqtəyə geri qaytarmaq imkanı verir.

Cageserver təxminən 3100 sətir koddur.

Cage Uzaqdan Fayl Giriş Sistemi

Cageserver fayl server proqramının işə salınması

Başlayarkən, dialoqda aşağıdakıları təyin etməlisiniz:
— avtorizasiya üçün əsas liman;
— səlahiyyətli müştərilərlə əməliyyatların mübadiləsi üçün portların sayı (1 və ya daha çox, nömrələr hovuzu əsas port nömrəsinin yanındakı birindən başlayır).

Qəfəs Sinifindən istifadə

sinif qəfəs.Qəfəs( qəfəs_adı="", pagesize=0, ədədlər=0, maxstrlen=0, server_ip={}, gözləyin=0, oyaq=Yanlış, cache_file="" )

Bu sinifdən fayl serverləri ilə qarşılıqlı əlaqədə olan və bufer yaddaşını ehtiva edən obyektlər yaradılır.

Parameters

  • qəfəs_adı(str) - server tərəfində müştəriləri müəyyən etmək üçün istifadə olunan obyektin şərti adı
  • səhifə ölçüsü(int) — bufer yaddaşının bir səhifəsinin ölçüsü (baytla)
  • ədədlər(int) — bufer yaddaş səhifələrinin sayı
  • maxstrlen(int) - yazma və oxu əməliyyatlarında bayt sətirinin maksimum uzunluğu
  • server_ip(dict) - istifadə olunan serverlərin ünvanları olan lüğət, burada açar serverin şərti adıdır (tətbiq daxilində server identifikatoru), dəyəri isə ünvanı olan bir sətirdir: “ip ünvanı: port” və ya “DNS: port” (adların və real ünvanların müqayisəsi müvəqqətidir, dəyişdirilə bilər)
  • gözləmək(int) — portları qəbul edərkən serverdən cavab gözləmə müddəti (saniyələrlə)
  • oyaq(boolean) — obyektin necə yaradıldığını göstərən işarə (Saxta - yeni obyekt yaradılarsa, Doğru - əgər obyekt əvvəllər "yıxılmış" obyektdən yaradılıbsa - "qışlama" əməliyyatından istifadə etməklə, Varsayılan olaraq False)
  • cache_fayl(str) - qışlama rejimi üçün fayl adı

Metodlar

Qəfəs.fayl_yarat( server, yol ) – yeni fayl yaradın

Qəfəs.faylın adının dəyişdirilməsi( server, yol, yeni_ad ) – faylın adını dəyişdirin

Qəfəs.faylı_sil( server, yol) - faylı silin

Qəfəs.açmaq( server, yol, mod ) - faylı açın

Qayıdır fkanal kanal nömrəsi. Parametr MOD - bu faylın açılması rejimidir: "wm" - eksklüziv (oxu/yazma), "rs" - yalnız oxunur və yalnız digər müştərilər tərəfindən oxumaq üçün paylaşılır, "ws" - oxumaq/yazmaq və yalnız oxumaq üçün paylaşılır digər müştərilər.

Qəfəs.yaxın (fkanal) – faylı bağlayın

Qəfəs.yazmaq (fchannel, start, data ) – fayla bayt sətri yazın

Qəfəs.oxumaq (fchannel, start, len_data ) – fayldan bayt sətrini oxumaq

Qəfəs.put_pages ( fkanal ) – göstərilən kanalın dəyişdirilmiş bütün səhifələrini buferdən serverə “itələyir”. Kanaldakı bütün əməliyyatların fiziki olaraq serverdəki faylda saxlandığına əmin olmaq lazım olduqda alqoritmin həmin nöqtələrində istifadə olunur.

Qəfəs.hamısını itələyin () – dəyişdirilmiş Cage sinfinin nümunəsi üçün bütün kanalların bütün səhifələrini buferdən serverə “itələyir”. Bütün kanallardakı bütün əməliyyatların serverdə saxlandığına əmin olmaq lazım olduqda istifadə olunur.

Mənbə: www.habr.com

Добавить комментарий