Sistem Aksés File Jauh Cage

Sistem tujuan

Rojongan pikeun aksés jauh ka file dina komputer dina jaringan. Sistem "ampir" ngarojong sagala operasi file dasar (nyieun, ngahapus, maca, nulis, jsb) ku exchanging transaksi (pesen) ngagunakeun protokol TCP.

aplikasi

Fungsionalitas sistem efektif dina kasus di handap ieu:

  • dina aplikasi asli pikeun alat sélulér sareng embedded (smartphone, sistem kontrol on-board, jsb) anu merlukeun aksés gancang ka file dina server jauh dina nyanghareupan kamungkinan interruptions samentara dina komunikasi (kalawan bade offline);
  • dina DBMSs dimuat, lamun processing query dilumangsungkeun dina sababaraha server, jeung neundeun data dilumangsungkeun dina batur;
  • dina jaringan perusahaan anu disebarkeun pikeun ngumpulkeun sareng ngolah inpormasi, ngabutuhkeun bursa data anu gancang, redundansi sareng reliabilitas;
  • dina sistem kompléks jeung arsitéktur microservice, dimana reureuh dina bursa inpormasi antara modul anu kritis.

struktur

Sistem Cage (aya palaksanaan - versi béta dina Python 3.7 dina Windows) ngawengku dua bagian utama:

  1. Cageserver — program pangladén file (pakét fungsi) anu dijalankeun dina komputer dina jaringan anu filena butuh aksés jauh;
  2. класс kurung kalayan perpustakaan metode pikeun parangkat lunak klien, nyederhanakeun coding interaksi sareng server.

Ngagunakeun sistem dina sisi klien

Métode kelas Cage ngagentos operasi sistem file "rutin" biasa: nyiptakeun, muka, nutup, mupus file, ogé maca / nulis data dina format binér (nunjukkeun posisi sareng ukuran data). Conceptually, métode ieu deukeut jeung fungsi file basa C, dimana muka / nutup file dipigawé "dina saluran" input / output.

Dina basa sejen, programmer nu teu digawekeun ku métode "file" objék (class _io dina Python), tapi nganggo metode kelas Cage.

Nalika hiji conto objék Cage dijieun, ngadegkeun sambungan awal jeung server (atawa sababaraha server), otorisasi ku Klién Id, sarta narima konfirmasi kalawan nomer port dedicated pikeun sakabéh operasi file. Nalika obyék Cage dihapus, éta maréntahkeun server pikeun ngeureunkeun komunikasi sareng nutup file. Terminasi komunikasi ogé bisa dimimitian ku server sorangan.

Sistim nu ngaronjatkeun maca / nulis kinerja ku buffering fragmen file remen dipake program klien dina cache RAM (panyangga).
Parangkat lunak klien tiasa nganggo sababaraha objék Cage kalayan setélan anu béda (ukuran mémori panyangga, ukuran blok nalika tukeur sareng server, jsb).

Obyék Cage tunggal tiasa komunikasi sareng sababaraha file dina sababaraha server. Parameter komunikasi (alamat IP atanapi server DNS, port utama pikeun otorisasina, jalur sareng nami file) dieusian nalika nyiptakeun obyék.

Kusabab unggal objék Cage tiasa dianggo sareng sababaraha file dina waktos anu sami, rohangan mémori anu dibagikeun dianggo pikeun panyangga. Ukuran cache - jumlah kaca sareng ukuranana, diatur sacara dinamis nalika nyiptakeun obyék Cage. Contona, cache 1 GB nyaéta 1000 halaman masing-masing 1 MB, atanapi 10 rébu halaman masing-masing 100 KB, atanapi 1 juta halaman masing-masing 1 KB. Milih ukuran sareng jumlah halaman mangrupikeun tugas khusus pikeun unggal kasus aplikasi.

Anjeun tiasa make sababaraha objék Cage dina waktos anu sareng pikeun nangtukeun setélan memori panyangga béda gumantung kana kumaha informasi diaksés dina file béda. Salaku dasar, algoritma panyangga pangbasajanna dianggo: saatos jumlah mémori béak, halaman énggal ngagentos halaman anu lami dumasar kana prinsip pangsiun kalayan jumlah aksés minimum. Buffering utamana éféktif dina kasus henteu rata (dina rasa statistik) dibagikeun aksés, firstly, kana file béda, sarta, kadua, kana fragmen unggal file.

Kelas Cage ngarojong I / O teu ukur ku alamat data (nunjukkeun posisi jeung panjang Asép Sunandar Sunarya, "ngaganti" operasi sistem file), tapi ogé dina tingkat handap, "fisik" - ku nomer kaca dina mémori panyangga.

Fungsi aslina dirojong pikeun objék Cage "hibernasi" ("saré") - aranjeunna tiasa "runtuh" ​​(contona, upami kaleungitan sambungan sareng server, atanapi nalika aplikasi dieureunkeun, jsb.) kana file dump lokal di sisi klien sareng gancang disimpen deui tina file ieu (sanggeus komunikasi diteruskeun, mun anjeun ngabalikan deui aplikasi). Ieu ngamungkinkeun sacara signifikan ngirangan lalu lintas nalika ngaktipkeun program klien saatos "offline" samentawis, sabab fragmen file anu sering dianggo bakal aya dina cache.

Cage nyaeta ngeunaan 3600 baris kode.

Prinsip konstruksi server

server file Cageserver bisa dijalankeun kalawan jumlah wenang palabuhan, salah sahijina ("utama") dipaké ngan pikeun otorisasina sadaya klien, sésana dipaké pikeun bursa data. Program server Cage ngan merlukeun Python. Dina paralel, komputer sareng pangladén file tiasa ngalakukeun padamelan sanés.

Server dimimitian mimitina salaku kumpulan dua prosés utama:

  1. "Sambungan" - prosés pikeun ngalaksanakeun operasi komunikasi sareng klien sareng ngeureunkeunana ku prakarsa server;
  2. "Operasi" - prosés pikeun ngalaksanakeun tugas (operasi) klien pikeun digawe sareng file, ogé pikeun nutup sesi komunikasi dumasar kana paréntah klien.

Kadua prosés henteu disingkronkeun sareng dikelompokeun salaku puteran anu henteu terbatas pikeun nampi sareng ngirim pesen dumasar kana antrian multiprocess, objék proxy, konci sareng sockets.
Prosés Connection allocates port pikeun tiap klien pikeun nampa sarta ngirimkeun data. Jumlah palabuhan diatur nalika server dimimitian. Pemetaan antara palabuhan sarta klien disimpen dina mémori proxy interprocess-dibagikeun.

Prosés Operasi ngarojong babagi sumberdaya file jadi sababaraha klien béda bisa babagi (semu sajajar, saprak aksés dikadalikeun ku konci) baca data tina hiji file lamun ieu diwenangkeun nalika eta mimitina dibuka ku klien "mimiti".

Ngolah paréntah pikeun nyieun / ngahapus / muka / nutup file dina server dilumangsungkeun dina prosés "Operasi" sorangan mastikeun sequentially ngagunakeun subsistem file tina OS server.

Pikeun umumna nyepetkeun maca / nulis, operasi ieu dipigawé dina threads spawned ku prosés "Operasi". Jumlah threads biasana sarua jeung jumlah file muka. Baca / nulis tugas ti klien anu dikintunkeun ka antrian umum jeung thread bébas munggaran nyokot tugas ti sirah na. Logika khusus ngamungkinkeun anjeun ngaleungitkeun operasi nulis ulang data dina RAM server.

Prosés Operasi ngawas aktivitas klien tur eureun ngalayanan aranjeunna boh kana paréntah maranéhanana atawa lamun timeout inactivity geus ngaleuwihan.

Pikeun mastikeun reliabilitas, Cageserver ngajaga log sadaya transaksi. Hiji log umum ngandung salinan pesen ti klien kalawan tugas nyieun / muka / ngaganti ngaran / ngahapus file. Log anu misah didamel pikeun unggal file anu tiasa dianggo, dimana salinan pesen anu ngagaduhan tugas maca sareng nyerat data dina file kerja ieu dirékam, kitu ogé susunan data tinulis (anyar) sareng susunan data anu ancur nalika nimpa (tulisan). data anyar "di luhureun" leuwih heubeul). ).

Log ieu nyadiakeun kamampuhan pikeun duanana balikkeun parobahan anyar kana cadangan tur gulung deui eusi ayeuna ka titik nu geus kaliwat.

Cageserver nyaeta ngeunaan 3100 garis kode.

Sistem Aksés File Jauh Cage

Ngajalankeun program server file Cageserver

Nalika ngamimitian, dina dialog anjeun kedah ngartikeun:
- port utama pikeun otorisasina;
- Jumlah palabuhan pikeun tukeur transaksi sareng klien otorisasi (tina 1 atanapi langkung, kolam renang nomer mimitian ti hiji di gigireun nomer port utama).

Ngagunakeun Kelas Cage

kelas kandang.kurung( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, hudang=Palsu, cache_file="" )

Objék dijieun tina kelas ieu nu berinteraksi sareng server file na ngandung memori panyangga.

parameter

  • ngaran_kurung(str) - ngaran kondisional obyék, nu dipaké pikeun ngaidentipikasi klien di sisi server
  • ukuran halaman(int) — ukuran hiji halaman mémori panyangga (dina bait)
  • numpages(int) - Jumlah kaca mémori panyangga
  • maxstrlen(int) - panjang maksimum string bait dina operasi nulis jeung maca
  • server_ip(dikt) - kamus kalayan alamat server anu dianggo, dimana koncina nyaéta nami kondisional server (server id di jero aplikasi), sareng nilaina mangrupikeun senar kalayan alamat: "alamat ip: port" atanapi "DNS: port" (perbandingan nami sareng alamat nyata samentawis, tiasa robih)
  • ngantosan(int) - waktos ngantosan respon ti server nalika narima port (dina detik)
  • ngahudangkeun(boolean) - bendera kumaha obyék dijieun (palsu - lamun obyék anyar dijieun, leres - lamun hiji obyék dijieun tina hiji saméméhna "runtuh" ​​- ngagunakeun operasi "hibernasi", Palsu sacara standar)
  • cache_file(str) - Ngaran koropak pikeun hibernasi

Métode

Kandang.file_create( server, jalur ) - nyieun file anyar

Kandang.file_rename( server, jalur, new_name ) - ngaganti ngaran file

Kandang.file_remove( server, jalur) - ngahapus file

Kandang.kabuka( server, jalur, mod ) - file kabuka

Balik deui fchannel nomer saluran. Parameter Emod - ieu téh mode muka file: "wm" - ekslusif (baca/tulis), "rs" - baca-hijina, sarta dibagikeun ngan pikeun dibaca ku klien sejenna, "ws" - dibaca / nulis, sarta dibagikeun ngan pikeun dibaca ku klien séjén.

Kandang.nutup (fchannel) - nutup file

Kandang.nulis (fchannel, dimimitian, data ) - nyerat string bait kana file

Kandang.maca (fchannel, dimimitian, len_data ) - maca string bait tina file

Kandang.put_pages ( fchannel ) - "ngadorong" tina panyangga ka server sadaya halaman saluran anu parantos dirobih. Hal ieu dianggo dina titik-titik dina algoritma nalika anjeun kedah yakin yén sadaya operasi dina saluran disimpen sacara fisik dina file dina server.

Kandang.push_all () - "ngadorong" ti panyangga ka server sadaya kaca sadaya saluran pikeun hiji conto kelas Cage nu geus dirobah. Dipaké nalika anjeun kedah mastikeun yén sadaya operasi dina sadaya saluran disimpen dina server.

sumber: www.habr.com

Tambahkeun komentar