Cage masofaviy fayllarga kirish tizimi

Tizimning maqsadi

Tarmoqdagi kompyuterlardagi fayllarga masofadan kirishni qo'llab-quvvatlash. Tizim TCP protokoli yordamida tranzaksiyalarni (xabarlarni) almashish orqali barcha asosiy fayl operatsiyalarini (yaratish, o'chirish, o'qish, yozish va h.k.) "deyarli" qo'llab-quvvatlaydi.

Ilovalar

Tizimning funksionalligi quyidagi hollarda samarali bo'ladi:

  • aloqada mumkin bo'lgan vaqtinchalik uzilishlar (oflayn rejimga o'tish bilan) sharoitida masofaviy serverlardagi fayllarga tezkor kirishni talab qiluvchi mobil va o'rnatilgan qurilmalar (smartfonlar, bortli boshqaruv tizimlari va boshqalar) uchun mahalliy ilovalarda;
  • yuklangan ma'lumotlar bazasida, agar so'rovlarni qayta ishlash ba'zi serverlarda, ma'lumotlarni saqlash esa boshqalarda amalga oshirilsa;
  • ma'lumotlarni to'plash va qayta ishlash uchun taqsimlangan korporativ tarmoqlarda yuqori tezlikda ma'lumotlar almashinuvini, ortiqcha va ishonchlilikni talab qiladi;
  • mikroservis arxitekturasiga ega murakkab tizimlarda, modullar o'rtasida axborot almashinuvidagi kechikishlar juda muhim.

tuzilma

Cage tizimi (Windows-da Python 3.7-da dastur - beta-versiyasi mavjud) ikkita asosiy qismni o'z ichiga oladi:

  1. Qafas serveri — fayllari masofadan kirishni talab qiladigan tarmoqdagi kompyuterlarda ishlaydigan fayl server dasturi (funksiyalar to‘plami);
  2. класс Qafas serverlar bilan o'zaro aloqani kodlashni soddalashtiradigan mijoz dasturiy ta'minoti uchun usullar kutubxonasi bilan.

Mijoz tomonida tizimdan foydalanish

Cage sinfining usullari fayl tizimining odatiy "odatiy" operatsiyalarini almashtiradi: yaratish, ochish, yopish, yo'q qilish fayllar, shuningdek ikkilik formatda ma'lumotlarni o'qish / yozish (ma'lumotlarning joylashuvi va hajmini ko'rsatgan holda). Kontseptsiyaga ko'ra, bu usullar C tilining fayl funktsiyalariga yaqin bo'lib, fayllarni ochish/yopish kirish/chiqishning "kanallarida" amalga oshiriladi.

Boshqacha qilib aytganda, dasturchi "fayl" ob'ektlari usullari bilan ishlamaydi (sinf _io Python da), lekin Cage sinfining usullari bilan.

Cage ob'ektining namunasi yaratilganda, u server (yoki bir nechta serverlar) bilan dastlabki ulanishni o'rnatadi, Client Id tomonidan avtorizatsiya qilinadi va barcha fayl operatsiyalari uchun ajratilgan port raqami bilan tasdiqlashni oladi. Cage ob'ekti o'chirilganda, u serverga aloqani to'xtatish va fayllarni yopishni buyuradi. Aloqani to'xtatish serverlarning o'zlari tomonidan ham boshlanishi mumkin.

Tizim RAM keshida (bufer) mijoz dasturlarining tez-tez ishlatiladigan fayl qismlarini buferlash orqali o'qish/yozish unumdorligini oshiradi.
Mijoz dasturiy ta'minoti turli xil sozlamalarga ega (bufer xotirasi hajmi, server bilan almashishda blok hajmi va boshqalar) istalgan miqdordagi Cage ob'ektlaridan foydalanishi mumkin.

Bitta Cage obyekti bir nechta serverdagi bir nechta fayllar bilan aloqa qilishi mumkin. Ob'ektni yaratishda aloqa parametrlari (IP manzili yoki DNS serveri, avtorizatsiya uchun asosiy port, yo'l va fayl nomi) ko'rsatiladi.

Har bir Cage ob'ekti bir vaqtning o'zida bir nechta fayllar bilan ishlashi mumkinligi sababli, buferlash uchun umumiy xotira maydoni ishlatiladi. Kesh hajmi - sahifalar soni va ularning o'lchami Cage ob'ektini yaratishda dinamik ravishda o'rnatiladi. Misol uchun, 1 GB kesh har biri 1000 MB bo'lgan 1 sahifa yoki har biri 10 KB bo'lgan 100 ming sahifa yoki har biri 1 KB bo'lgan 1 million sahifa. Sahifalar hajmi va sonini tanlash har bir dastur ishi uchun o'ziga xos vazifadir.

Turli fayllardagi ma'lumotlarga kirish usuliga qarab turli xil bufer xotira parametrlarini belgilash uchun bir vaqtning o'zida bir nechta Cage ob'ektlaridan foydalanishingiz mumkin. Asosiysi, eng oddiy buferlash algoritmi qo'llaniladi: ma'lum hajmdagi xotira tugagandan so'ng, yangi sahifalar eski sahifalarni minimal kirishlar soni bilan cheklash printsipiga muvofiq almashtiradi. Buferlash, ayniqsa, notekis (statistik ma'noda) umumiy foydalanish, birinchidan, turli fayllarga, ikkinchidan, har bir faylning fragmentlariga kirishda samarali bo'ladi.

Cage klassi kiritish-chiqarishni nafaqat ma'lumotlar manzillari (massivning joylashuvi va uzunligini ko'rsatuvchi, fayl tizimi operatsiyalarini "almashtirish"), balki pastroq, "jismoniy" darajada - bufer xotirasidagi sahifa raqamlari bo'yicha ham qo'llab-quvvatlaydi.

Asl funksiya Cage ob'ektlari uchun qo'llab-quvvatlanadi "qish uyqusi" ("uyqu") - ular mijoz tomonidagi mahalliy dump faylga "yiqilib", (masalan, serverlar bilan aloqa uzilganda yoki dastur to'xtatilganda va hokazo) va tezda qayta tiklanishi mumkin. ushbu fayl (aloqa tiklangandan so'ng, ilovani qayta ishga tushirganingizda). Bu vaqtinchalik "oflayn" rejimga o'tgandan so'ng mijoz dasturini faollashtirishda trafikni sezilarli darajada kamaytirish imkonini beradi, chunki tez-tez ishlatiladigan fayl qismlari keshda bo'ladi.

Qafas taxminan 3600 qator koddir.

Serverni qurish tamoyillari

Cageserver fayl serverlari ixtiyoriy sonli portlar bilan ishga tushirilishi mumkin, ulardan biri ("asosiy") faqat barcha mijozlarni avtorizatsiya qilish uchun ishlatiladi, qolganlari ma'lumotlar almashinuvi uchun ishlatiladi. Cage server dasturi faqat Python-ni talab qiladi. Bunga parallel ravishda fayl serveriga ega kompyuter boshqa har qanday ishni bajarishi mumkin.

Server dastlab ikkita asosiy jarayon to'plami sifatida boshlanadi:

  1. "Aloqalar" - server tashabbusi bilan mijozlar bilan aloqa o'rnatish va uni tugatish operatsiyalarini bajarish jarayoni;
  2. "operatsiyalar" – mijozlarning fayllar bilan ishlash vazifalarini (operatsiyalarini) bajarish, shuningdek, mijoz buyruqlari asosida aloqa seanslarini yopish jarayoni.

Ikkala jarayon ham sinxronlashtirilmaydi va ko'p jarayonli navbatlar, proksi-serverlar, qulflar va rozetkalarga asoslangan xabarlarni qabul qilish va jo'natishning cheksiz tsikllari sifatida tashkil etilgan.
Ulanish jarayoni har bir mijoz uchun ma'lumotlarni qabul qilish va uzatish uchun port ajratadi. Portlar soni server ishga tushganda o'rnatiladi. Portlar va mijozlar o'rtasidagi xaritalash proksi-xotirada saqlanadi.

Operatsion jarayoni bir nechta turli mijozlar almashishi uchun fayl resurslarini almashishni qo'llab-quvvatlaydi (kvazi-parallel, kirish qulflar tomonidan boshqariladiganligi sababli) bitta fayldan ma'lumotlarni o'qing, agar bunga "birinchi" mijoz tomonidan dastlab ochilganda ruxsat berilgan bo'lsa.

Serverda fayllarni yaratish/o'chirish/ochish/yopish buyruqlarini qayta ishlash "Operatsiyalar" jarayonining o'zida server OT fayl quyi tizimidan foydalangan holda qat'iy ketma-ketlikda amalga oshiriladi.

Umuman olganda, o'qish/yozishni tezlashtirish uchun ushbu operatsiyalar "Operatsiyalar" jarayoni tomonidan yaratilgan iplarda amalga oshiriladi. Mavzular soni odatda ochiq fayllar soniga teng. Mijozlardan o'qish/yozish bo'yicha topshiriqlar umumiy navbatga qo'yiladi va birinchi bo'sh ip bu vazifani boshidan oladi. Maxsus mantiq serverning operativ xotirasida ma'lumotlarni qayta yozish operatsiyalarini yo'q qilishga imkon beradi.

Operatsiyalar jarayoni mijoz faoliyatini nazorat qiladi va ularning buyruqlari bo‘yicha yoki harakatsizlik vaqti oshib ketganda ularga xizmat ko‘rsatishni to‘xtatadi.

Ishonchliligini ta'minlash uchun Cageserver barcha tranzaktsiyalar jurnalini yuritadi. Bitta umumiy jurnalda fayllarni yaratish/ochish/nomini o'zgartirish/o'chirish vazifalari bilan mijozlardan kelgan xabarlarning nusxalari mavjud. Har bir ishchi fayl uchun alohida jurnal tuziladi, unda ushbu ishchi fayldagi ma'lumotlarni o'qish va yozish vazifalari bo'lgan xabarlarning nusxalari, shuningdek yozma (yangi) ma'lumotlar massivlari va qayta yozish (yozish) paytida yo'q qilingan ma'lumotlar massivlari qayd etiladi. eski ma'lumotlarning "ustida" yangi ma'lumotlar). ).

Ushbu jurnallar zaxiradagi yangi o'zgarishlarni tiklash va joriy tarkibni o'tmishdagi nuqtaga qaytarish imkoniyatini beradi.

Cageserver taxminan 3100 qatorli koddir.

Cage masofaviy fayllarga kirish tizimi

Cageserver fayl serveri dasturini ishga tushirish

Boshlashda siz dialog oynasida quyidagilarni aniqlashingiz kerak:
— avtorizatsiya uchun asosiy port;
— avtorizatsiya qilingan mijozlar bilan tranzaktsiyalarni almashish uchun portlar soni (1 va undan ko'p, raqamlar puli asosiy port raqami yonidagi portdan boshlanadi).

Cage sinfidan foydalanish

sinf qafas.Qafas( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, kutish=0, awake=False, cache_file="" )

Ushbu sinfdan fayl serverlari bilan o'zaro aloqada bo'lgan va bufer xotirasini o'z ichiga olgan ob'ektlar yaratilgan.

parametrlar

  • qafas_nomi(str) - server tomonidagi mijozlarni aniqlash uchun foydalaniladigan ob'ektning shartli nomi
  • sahifa hajmi(int) — bufer xotirasining bir sahifasi hajmi (baytlarda)
  • raqamlar(int) — bufer xotira sahifalari soni
  • maxstrlen(int) - yozish va o'qish operatsiyalarida bayt qatorining maksimal uzunligi
  • server_ip(dikt) - ishlatiladigan serverlarning manzillari bo'lgan lug'at, bu erda kalit serverning shartli nomi (ilova ichidagi server identifikatori) va qiymat "ip manzili: port" yoki "DNS: port" (ismlar va haqiqiy manzillarni taqqoslash vaqtinchalik, uni o'zgartirish mumkin)
  • Kuting(int) — portlarni qabul qilishda serverdan javobni kutish vaqti (sekundlarda)
  • o'yg'oq(mantiqiy) - ob'ekt qanday yaratilganligi belgisi (yolg'on - agar yangi ob'ekt yaratilgan bo'lsa, chin - agar ob'ekt ilgari "yiqilgan" ob'ektdan yaratilgan bo'lsa - "kutish" operatsiyasidan foydalangan holda, sukut bo'yicha False)
  • kesh_fayl(str) - kutish rejimi uchun fayl nomi

Usullari

Qafas.file_create( server, yo'l ) – yangi fayl yaratish

Qafas.file_nomini o'zgartirish( server, yo'l, yangi_nom ) – fayl nomini o‘zgartirish

Qafas.file_remove( server, yo'l) - faylni o'chirish

Qafas.ochiq( server, yo'l, mod ) - faylni ochish

Qaytish fkanal kanal raqami. Parametr mod - bu faylni ochish rejimi: "wm" - eksklyuziv (o'qish/yozish), "rs" - faqat o'qish uchun va faqat boshqa mijozlar tomonidan o'qish uchun ulashiladi, "ws" - o'qish/yozish va faqat o'qish uchun ulashilgan. faqat boshqa mijozlar tomonidan.

Qafas.yaqin (fkanal) – faylni yoping

Qafas.yozish (fchannel, start, data ) – faylga bayt qator yozish

Qafas.o'qib (fchannel, start, len_data ) – fayldan bayt qatorni o‘qish

Qafas.put_pages ( fkanal ) - belgilangan kanalning o'zgartirilgan barcha sahifalarini buferdan serverga "surish". Kanaldagi barcha operatsiyalar serverdagi faylda jismoniy saqlanganligiga ishonch hosil qilishingiz kerak bo'lganda, u algoritmning o'sha nuqtalarida qo'llaniladi.

Qafas.push_all () - o'zgartirilgan Cage klassi misoli uchun barcha kanallarning barcha sahifalarini buferdan serverga "itaradi". Barcha kanallardagi barcha operatsiyalar serverda saqlanganligiga ishonch hosil qilishingiz kerak bo'lganda foydalaniladi.

Manba: www.habr.com

a Izoh qo'shish