Sistem Akses File Cage Remote

Tujuan sistem

Dhukungan kanggo akses remot menyang file ing komputer ing jaringan. Sistem "sakbenere" ndhukung kabeh operasi file dhasar (nggawe, mbusak, maca, nulis, lan sapiturute) kanthi ijol-ijolan transaksi (pesen) nggunakake protokol TCP.

Aplikasi

Fungsi sistem efektif ing kasus ing ngisor iki:

  • ing aplikasi asli kanggo piranti seluler lan sing dipasang (smartphone, sistem kontrol on-board, lan sapiturute) sing mbutuhake akses cepet menyang file ing server remot nalika ana gangguan sementara ing komunikasi (kanthi offline);
  • ing DBMS sing dimuat, yen pangolahan pitakon ditindakake ing sawetara server, lan panyimpenan data ditindakake ing wong liya;
  • ing jaringan perusahaan sing disebarake kanggo ngumpulake lan ngolah informasi, mbutuhake ijol-ijolan data kanthi kacepetan dhuwur, redundansi lan linuwih;
  • ing sistem Komplek karo arsitektur microservice, ngendi telat ing ijol-ijolan informasi antarane modul kritis.

struktur

Sistem Cage (ana implementasine - versi beta ing Python 3.7 ing Windows) kalebu rong bagean utama:

  1. Cageserver - program server file (paket fungsi) sing mlaku ing komputer ing jaringan sing file mbutuhake akses remot;
  2. kelas kandhang kanthi perpustakaan metode kanggo piranti lunak klien, nyederhanakake kodhe interaksi karo server.

Nggunakake sistem ing sisih klien

Cara kelas Cage ngganti operasi sistem file "rutin" sing biasa: nggawe, mbukak, nutup, mbusak file, uga maca / nulis data ing format binar (nuduhake posisi lan ukuran data). Secara konseptual, metode kasebut cedhak karo fungsi file basa C, ing ngendi mbukak / nutup file ditindakake "ing saluran" input / output.

Ing tembung liyane, programer ora bisa nganggo metode "file" obyek (class _io ing Python), nanging kanthi metode kelas Cage.

Nalika Kayata saka obyek Cage digawe, nggawe sambungan dhisikan karo server (utawa sawetara server), sah dening Klien Id, lan nampa konfirmasi karo nomer port darmabakti kanggo kabeh operasi file. Nalika obyek Cage wis dibusak, iku nuntun server kanggo mungkasi sesambungan lan nutup file. Mungkasi komunikasi uga bisa diwiwiti dening server dhewe.

Sistem nambah kinerja maca / nulis dening buffering kerep digunakake fragmen file program klien ing cache RAM (buffer).
Piranti lunak klien bisa nggunakake sembarang obyek Cage karo setelan beda (ukuran memori buffer, ukuran blok nalika ijol-ijolan karo server, etc.).

Obyek Cage siji bisa komunikasi karo sawetara file ing sawetara server. Parameter komunikasi (alamat IP utawa server DNS, port utama kanggo wewenang, path lan jeneng file) ditemtokake nalika nggawe obyek kasebut.

Wiwit saben obyek Cage bisa nggarap macem-macem file ing wektu sing padha, papan memori sing dienggo bareng digunakake kanggo buffering. Ukuran cache - jumlah kaca lan ukurane, disetel kanthi dinamis nalika nggawe obyek Cage. Contone, cache 1 GB yaiku 1000 kaca saben 1 MB, utawa 10 ewu kaca saben 100 KB, utawa 1 yuta kaca saben 1 KB. Milih ukuran lan jumlah kaca minangka tugas khusus kanggo saben kasus aplikasi.

Sampeyan bisa nggunakake macem-macem obyek Cage ing wektu sing padha kanggo netepake setelan memori buffer beda gumantung carane informasi diakses ing file beda. Minangka dhasar, algoritma buffering sing paling gampang digunakake: sawise jumlah memori sing diwenehake wis kesel, kaca anyar ngganti kaca lawas miturut prinsip pensiun kanthi jumlah akses minimal. Buffering utamané efektif ing kasus ora rata (ing pangertèn statistik) akses bareng, pisanan, kanggo file beda, lan, sareh, kanggo fragmen saben file.

Kelas Cage ndhukung I / O ora mung dening alamat data (nuduhake posisi lan dawa array, "ngganti" operasi sistem file), nanging uga ing ngisor, "fisik" tingkat - dening nomer kaca ing memori buffer.

Fungsi asli didhukung kanggo obyek Cage "hibernasi" ("turu") - padha bisa "ambruk" (contone, yen ana kelangan sambungan karo server, utawa nalika aplikasi mandheg, etc.) menyang file dump lokal ing sisih klien lan cepet dibalèkaké saka file iki (sawise komunikasi diterusake, nalika sampeyan miwiti maneh aplikasi). Iki ndadekake bisa nyuda lalu lintas kanthi signifikan nalika ngaktifake program klien sawise "offline" sementara, amarga fragmen file sing asring digunakake bakal ana ing cache.

Cage kira-kira 3600 baris kode.

Prinsip konstruksi server

server file Cageserver bisa mbukak karo nomer kasepakatan bandar, salah siji kang ("utama") digunakake mung kanggo wewenang kabeh klien, liyane digunakake kanggo ijol-ijolan data. Program server Cage mung mbutuhake Python. Ing podo karo, komputer karo server file bisa nindakake karya liyane.

Server diwiwiti minangka kumpulan saka rong proses utama:

  1. "Sambungan" - proses kanggo nindakake operasi komunikasi karo klien lan mungkasi kanthi inisiatif server;
  2. "Operasi" - proses kanggo nindakake tugas (operasi) klien kanggo nggarap file, uga kanggo nutup sesi komunikasi adhedhasar perintah klien.

Loro-lorone pangolahan ora diselarasake lan diatur minangka puteran tanpa wates kanggo nampa lan ngirim pesen adhedhasar antrian multiprocess, obyek proxy, kunci lan soket.
Proses Sambungan nyedhiyakake port kanggo saben klien kanggo nampa lan ngirim data. Jumlah port disetel nalika server diwiwiti. Pemetaan antarane port lan klien disimpen ing memori proxy sing dienggo bareng antarproses.

Proses Operasi ndhukung enggo bareng sumber daya file supaya macem-macem klien bisa nuduhake (podo-podo, amarga akses dikontrol dening kunci) maca data saka siji file yen diidini nalika wiwitan dibukak dening klien "pisanan".

Pangolahan printah kanggo nggawe / mbusak / mbukak / nutup file ing server ditindakake ing proses "Operasi" dhewe kanthi strictly sequentially nggunakake subsistem file saka OS server.

Kanggo umume nyepetake maca / nulis, operasi kasebut dileksanakake ing benang sing digawe dening proses "Operasi". Jumlah utas biasane padha karo jumlah file sing mbukak. Maca / nulis tugas saka klien diajukake menyang antrian umum lan utas free pisanan njupuk tugas saka sawijining sirah. Logika khusus ngidini sampeyan ngilangi operasi nulis ulang data ing RAM server.

Proses Operasi ngawasi aktivitas klien lan mandheg nglayani kanthi prentah utawa nalika wektu entek ora aktif wis ngluwihi.

Kanggo njamin linuwih, Cageserver nyimpen log kabeh transaksi. Siji log umum ngemot salinan pesen saka klien kanthi tugas kanggo nggawe / mbukak / ngganti jeneng / mbusak file. Log kapisah digawe kanggo saben file kerja, ing ngendi salinan pesen kanthi tugas kanggo maca lan nulis data ing file kerja iki direkam, uga susunan data sing ditulis (anyar) lan susunan data sing dirusak nalika nimpa (nulis). data anyar "ing ndhuwur" sing lawas). ).

Log iki nyedhiyakake kemampuan kanggo mulihake owah-owahan anyar menyang serep lan mbalekake konten saiki menyang titik sing kepungkur.

Cageserver kira 3100 baris kode.

Sistem Akses File Cage Remote

Miwiti program server file Cageserver

Nalika miwiti, ing dialog sampeyan kudu nemtokake:
- port utama kanggo wewenang;
- nomer bandar kanggo ijol-ijolan transaksi karo klien sah (saka 1 utawa luwih, blumbang nomer wiwit saka siji jejere nomer port utama).

Nggunakake Kelas Cage

kelas kandhang.kandhang( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )

Obyek digawe saka kelas iki sing sesambungan karo server file lan ngemot memori buffer.

paramèter

  • jeneng_kurung(str) - jeneng kondisional obyek, sing digunakake kanggo ngenali klien ing sisih server
  • ukuran kaca(int) - ukuran siji kaca saka memori buffer (ing bita)
  • numpages(int) - jumlah kaca memori buffer
  • maxstrlen(int) - dawa maksimum string byte ing operasi nulis lan maca
  • server_ip(dict) - kamus kanthi alamat server sing digunakake, ing ngendi kunci kasebut yaiku jeneng kondisional server (id server ing jero aplikasi), lan nilai kasebut minangka senar kanthi alamat: "alamat ip: port" utawa "DNS: port" (perbandhingan jeneng lan alamat nyata sementara, bisa diganti)
  • ngenteni(int) β€” wektu nunggu respon saka server nalika nampa port (ing detik)
  • awake(boolean) - flag carane obyek digawe (palsu - yen obyek anyar digawe, True - yen obyek digawe saka sing sadurunge "ambruk" - nggunakake operasi "hibernasi", Palsu minangka standar)
  • cache_file(str) - jeneng berkas kanggo hibernasi

Tata cara

kandhang.file_create( server, path ) - nggawe file anyar

kandhang.file_ganti jeneng( server, path, new_name ) - ganti jeneng file

kandhang.file_remove( server, path) - mbusak file

kandhang.mbukak( server, path, mod ) - buka berkas

Bali fchannel nomer saluran. Parameter mod - iki minangka mode bukaan file: "wm" - eksklusif (maca/nulis), "rs" - mung diwaca, lan mung dienggo bareng kanggo diwaca dening klien liyane, "ws" - diwaca/tulis, lan dienggo bareng mung kanggo diwaca dening klien liyane.

kandhang.cedhak (fchannel) - nutup file

kandhang.nulis (fchannel, miwiti, data ) - nulis string byte menyang file

kandhang.maca (fchannel, miwiti, len_data ) – maca string byte saka file

kandhang.put_pages ( fchannel ) - "nyurung" saka buffer menyang server kabeh kaca saluran kasebut sing wis diowahi. Iki digunakake ing titik kasebut ing algoritma nalika sampeyan kudu yakin manawa kabeh operasi ing saluran kasebut disimpen sacara fisik ing file ing server.

kandhang.push_kabeh () - "nyurung" saka buffer kanggo server kabeh kaca kabeh saluran kanggo Kayata saka kelas Cage sing wis diowahi. Digunakake nalika sampeyan kudu mesthekake yen kabeh operasi ing kabeh saluran disimpen ing server.

Source: www.habr.com

Add a comment