Cage алсаас файлд нэвтрэх систем

Системийн зорилго

Сүлжээнд байгаа компьютер дээрх файлуудад алсаас хандах дэмжлэг. Систем нь TCP протоколыг ашиглан гүйлгээ (мессеж) солилцох замаар файлын бүх үндсэн үйлдлүүдийг (үүсгэх, устгах, унших, бичих гэх мэт) "бараг" дэмждэг.

Програмууд

Системийн үйл ажиллагаа нь дараах тохиолдолд үр дүнтэй байдаг.

  • харилцаа холбооны түр зуурын тасалдал (офлайн горимд шилжих) үед алсын сервер дээрх файлуудад хурдан хандах шаардлагатай хөдөлгөөнт болон суулгагдсан төхөөрөмжүүдийн (ухаалаг утас, самбар дээрх хяналтын систем гэх мэт) үндсэн програмуудад;
  • ачаалагдсан DBMS-д хэрэв асуулга боловсруулалтыг зарим сервер дээр, бусад сервер дээр өгөгдөл хадгалах ажлыг гүйцэтгэдэг бол;
  • өндөр хурдтай мэдээлэл солилцох, нөөцлөх, найдвартай байдлыг шаарддаг мэдээлэл цуглуулах, боловсруулахад зориулагдсан тархсан корпорацийн сүлжээнд;
  • модулиудын хооронд мэдээлэл солилцох саатал чухал байдаг микро үйлчилгээний архитектур бүхий нарийн төвөгтэй системүүдэд.

бүтэц

Cage систем (Windows дээрх Python 3.7 дээр хэрэгжүүлэлт - бета хувилбар байдаг) нь хоёр үндсэн хэсгийг агуулдаг.

  1. Тор сервер - файлууд нь алсаас хандах шаардлагатай сүлжээний компьютер дээр ажилладаг файлын серверийн програм (функцуудын багц);
  2. анги Cage серверүүдтэй харилцах кодчиллыг хялбаршуулж, үйлчлүүлэгчийн програм хангамжийн аргуудын номын сантай.

Үйлчлүүлэгч тал дээр системийг ашиглах

Cage ангийн аргууд нь файлын системийн ердийн "ердийн" үйлдлүүдийг орлуулдаг. үүсгэх, нээх, хаах, устгах файлууд, түүнчлэн хоёртын форматаар өгөгдлийг унших/бичих (өгөгдлийн байрлал, хэмжээг зааж өгсөн). Үзэл баримтлалын хувьд эдгээр аргууд нь C хэлний файлын функцтэй ойролцоо бөгөөд файлуудыг нээх/хаах нь оролт/гаралтын "сувгууд дээр" хийгддэг.

Өөрөөр хэлбэл, программист нь "файл" объектын аргуудтай ажилладаггүй (анги _io Python дээр), гэхдээ Cage ангийн аргуудтай.

Cage объектын жишээг үүсгэх үед сервер (эсвэл хэд хэдэн серверүүд)-тэй анхны холболт үүсгэж, Client Id-ээр зөвшөөрч, бүх файлын үйл ажиллагаанд зориулагдсан портын дугаараар баталгаажуулалтыг хүлээн авдаг. Cage объектыг устгах үед энэ нь серверт харилцахаа зогсоож, файлуудыг хаахыг зааварчилдаг. Харилцаа холбоог зогсоохыг серверүүд өөрсдөө эхлүүлж болно.

Систем нь RAM-ийн кэш (буфер) дахь клиент програмуудын байнга ашиглагддаг файлын фрагментуудыг буферлэх замаар унших/бичих гүйцэтгэлийг сайжруулдаг.
Үйлчлүүлэгчийн программ хангамж нь өөр өөр тохиргоотой (буфер санах ойн хэмжээ, сервертэй солилцох үед блокийн хэмжээ гэх мэт) хэдэн ч Cage объектыг ашиглаж болно.

Нэг Cage объект нь олон сервер дээрх олон файлуудтай харилцах боломжтой. Объектыг үүсгэх үед харилцааны параметрүүдийг (IP хаяг эсвэл DNS сервер, зөвшөөрлийн үндсэн порт, зам, файлын нэр) зааж өгдөг.

Cage объект бүр олон файлтай нэгэн зэрэг ажиллах боломжтой тул дундын санах ойн зайг буферлэхэд ашигладаг. Кэшийн хэмжээ - Cage объектыг үүсгэх үед хуудасны тоо болон тэдгээрийн хэмжээг динамикаар тохируулдаг. Жишээлбэл, 1 ГБ кэш нь тус бүр нь 1000 МБ хэмжээтэй 1 хуудас, эсвэл тус бүр нь 10 КБ хэмжээтэй 100 мянган хуудас, эсвэл тус бүр нь 1 КБ хэмжээтэй 1 сая хуудас юм. Хуудасны хэмжээ, тоог сонгох нь хэрэглээний тохиолдол бүрийн хувьд тодорхой ажил юм.

Та янз бүрийн файлд мэдээлэл хэрхэн хандаж байгаагаас хамааран өөр өөр буфер санах ойн тохиргоог тодорхойлохын тулд олон Cage объектыг нэгэн зэрэг ашиглаж болно. Үндсэндээ хамгийн энгийн буферийн алгоритмыг ашигладаг: өгөгдсөн хэмжээний санах ой дууссаны дараа шинэ хуудсууд нь хамгийн бага хандалтын тоогоор тэтгэвэрт гарах зарчмын дагуу хуучин хуудсыг нүүлгэдэг. Буферлэх нь ялангуяа өөр өөр файлууд, хоёрдугаарт, файл бүрийн хэсгүүдэд тэгш бус (статистикийн утгаараа) хуваалцсан хандалтын үед үр дүнтэй байдаг.

Cage анги нь оролт/гаралтыг зөвхөн өгөгдлийн хаягаар (массивын байрлал, уртыг зааж, файлын системийн үйлдлүүдийг "орлуулах") төдийгүй доод түвшний "физик" түвшинд - буфер санах ой дахь хуудасны дугаараар дэмждэг.

Анхны функцийг Cage объектуудад дэмждэг "ичих" ("унтах") - тэдгээрийг "нурсан" (жишээлбэл, серверүүдтэй холболт тасарсан эсвэл програм зогссон үед гэх мэт) үйлчлүүлэгчийн тал дахь локал хогийн файлд оруулж, хурдан сэргээх боломжтой. энэ файл (харилцаа сэргээсний дараа програмыг дахин эхлүүлэх үед). Энэ нь "офлайн" горимд түр орсны дараа үйлчлүүлэгчийн програмыг идэвхжүүлэх үед траффикийг мэдэгдэхүйц бууруулах боломжийг олгодог, учир нь байнга ашиглагддаг файлын хэсгүүд нь кэшэд байх болно.

Cage нь ойролцоогоор 3600 мөр код юм.

Серверийн барилгын зарчим

Cageserver файлын серверүүдийг дурын тооны портоор ажиллуулж болох бөгөөд тэдгээрийн аль нэгийг нь ("үндсэн") зөвхөн бүх үйлчлүүлэгчдэд зөвшөөрөл олгоход, үлдсэн хэсгийг нь өгөгдөл солилцоход ашигладаг. Cage серверийн программ нь зөвхөн Python шаарддаг. Үүний зэрэгцээ файлын сервертэй компьютер өөр ямар ч ажлыг гүйцэтгэх боломжтой.

Сервер нь эхлээд хоёр үндсэн процессын цуглуулга хэлбэрээр эхэлдэг:

  1. "Холболтууд" – серверийн санаачилгаар үйлчлүүлэгчидтэй харилцаа холбоо тогтоох, таслах ажиллагааг гүйцэтгэх үйл явц;
  2. "Үйл ажиллагаа" – Үйлчлүүлэгчдийн файлуудтай ажиллах даалгавруудыг (үйл ажиллагаа) гүйцэтгэх, түүнчлэн харилцагчийн команд дээр үндэслэн харилцах сессийг хаах үйл явц.

Хоёр процесс хоёулаа синхрончлогдоогүй бөгөөд олон процессын дараалал, прокси объект, цоож, залгуур дээр суурилсан мессеж хүлээн авах, илгээх төгсгөлгүй давталт хэлбэрээр зохион байгуулагддаг.
Холболтын процесс нь үйлчлүүлэгч бүрт өгөгдөл хүлээн авах, дамжуулах портыг хуваарилдаг. Сервер эхлэхэд портын тоог тохируулна. Портууд болон үйлчлүүлэгчдийн хоорондох зураглал нь процесс хоорондын хуваалцсан прокси санах ойд хадгалагддаг.

Үйлдлийн процесс нь файлын нөөцийг хуваалцахыг дэмждэг бөгөөд ингэснээр олон өөр үйлчлүүлэгч (бараг зэрэгцээ, хандалт нь түгжээгээр хянагддаг тул) "анхны" үйлчлүүлэгч анх нээхэд зөвшөөрөгдсөн бол нэг файлаас өгөгдлийг уншина.

Сервер дээр файл үүсгэх/устгах/нээх/хаах командуудыг боловсруулах нь "Үйл ажиллагаа" процесст өөрөө серверийн үйлдлийн системийн файлын дэд системийг ашиглан хатуу дарааллаар явагддаг.

Унших/бичих үйлдлийг ерөнхийд нь хурдасгахын тулд эдгээр үйлдлүүдийг "Үйл ажиллагаа" процессоор үүсгэгдсэн хэлхээнд гүйцэтгэдэг. Сэдвийн тоо нь ихэвчлэн нээлттэй файлуудын тоотой тэнцүү байдаг. Үйлчлүүлэгчдээс унших/бичих даалгавруудыг ерөнхий дараалалд оруулдаг бөгөөд эхний үнэгүй хэлхээ нь даалгаврыг толгойноос нь авдаг. Тусгай логик нь серверийн RAM дахь өгөгдлийг дахин бичих үйлдлийг арилгах боломжийг олгодог.

Үйлдлийн процесс нь үйлчлүүлэгчийн үйл ажиллагааг хянаж, тэдний тушаалаар эсвэл идэвхгүй байх хугацаа хэтэрсэн үед үйлчилгээ үзүүлэхээ зогсооно.

Найдвартай байдлыг хангахын тулд Cageserver бүх гүйлгээний бүртгэлийг хөтөлдөг. Нэг ерөнхий бүртгэл нь файл үүсгэх/нээх/нэрийг өөрчлөх/устгах даалгавартай үйлчлүүлэгчдээс ирсэн мессежүүдийн хуулбарыг агуулна. Ажлын файл бүрийн хувьд тусдаа бүртгэл үүсгэсэн бөгөөд үүнд энэ ажлын файл дахь өгөгдлийг унших, бичих даалгавар бүхий мессежийн хуулбар, түүнчлэн бичсэн (шинэ) өгөгдлийн массив, дарж бичих (бичих) үед устгагдсан өгөгдлийн массивууд бичигдсэн байдаг. Хуучин өгөгдөл дээр "дээд" шинэ өгөгдөл). ).

Эдгээр бүртгэлүүд нь нөөцлөлтийн шинэ өөрчлөлтийг сэргээх, одоогийн агуулгыг өнгөрсөн үеийн цэг рүү буцаах боломжийг олгодог.

Cageserver нь ойролцоогоор 3100 мөр код юм.

Cage алсаас файлд нэвтрэх систем

Cageserver файл серверийн програмыг ажиллуулж байна

Эхлэхдээ харилцах цонхонд та дараахь зүйлийг тодорхойлох хэрэгтэй.
- зөвшөөрөл авах гол порт;
- эрх бүхий үйлчлүүлэгчидтэй гүйлгээ солилцох портуудын тоо (1 ба түүнээс дээш тооны тоо нь үндсэн портын дугаарын хажууд байгаа нэгээс эхэлдэг).

Cage класс ашиглах

анги тор.Cage( cage_name="", pagesize=0, тоонууд=0, maxstrlen=0, server_ip={}, хүлээх=0, сэрүүн=Худал, cache_file="" )

Файлын серверүүдтэй харилцаж, буфер санах ой агуулсан объектуудыг энэ ангиас үүсгэсэн.

параметрүүд

  • торны_нэр(гудамж) - сервер талын үйлчлүүлэгчдийг тодорхойлоход ашигладаг объектын нөхцөлт нэр
  • хуудасны хэмжээ(INT) - буфер санах ойн нэг хуудасны хэмжээ (байтаар)
  • тоонууд(INT) — буфер санах ойн хуудасны тоо
  • maxstrlen(INT) - бичих, унших үйлдлүүд дэх байт мөрийн хамгийн их урт
  • server_ip(дикт) - ашигласан серверүүдийн хаяг бүхий толь бичиг, түлхүүр нь серверийн нөхцөлт нэр (програмын доторх серверийн id), утга нь "ip хаяг: порт" эсвэл "DNS: порт” (нэр болон бодит хаягийг харьцуулах нь түр зуурынх бөгөөд үүнийг өөрчилж болно)
  • хүлээх(INT) - портуудыг хүлээн авах үед серверээс хариу хүлээх хугацаа (секундээр)
  • сэрүүн(boolean) - объект хэрхэн бүтээгдсэнийг харуулсан туг (хуурамч - шинэ объект үүсгэсэн бол, Үнэн - хэрэв объектыг өмнө нь "нурсан" объектоос үүсгэсэн бол - "ичээн авах" үйлдлийг ашиглан, анхдагчаар худал)
  • кэш_файл(гудамж) - ичээнээс гарах файлын нэр

Арга зүй

Тор.файл_үүсгэх( сервер, зам ) – шинэ файл үүсгэх

Тор.файлын нэрийг өөрчлөх( сервер, зам, шинэ_нэр ) – файлын нэрийг өөрчлөх

Тор.file_remove( сервер, зам) - файл устгах

Тор.нээлттэй( сервер, зам, мод ) - файлыг нээх

Буцах fchannel сувгийн дугаар. Параметр мод - энэ бол файл нээх горим юм: "wm" - онцгой (унших/бичих), "rs" - зөвхөн унших боломжтой бөгөөд зөвхөн бусад үйлчлүүлэгчид уншихаар хуваалцдаг, "ws" - унших/бичих, зөвхөн уншихын тулд хуваалцдаг. бусад үйлчлүүлэгчид.

Тор.нууц (fchannel) – файлыг хаах

Тор.бичих (fchannel, эхлэл, өгөгдөл ) – файлд байт мөр бичих

Тор.унш (fchannel, эхлэл, len_data ) – файлаас байт мөрийг унших

Тор.тавих_хуудас ( fchannel ) - заасан сувгийн өөрчлөгдсөн бүх хуудсыг буферээс сервер рүү "түлхдэг". Суваг дээрх бүх үйлдлүүд нь сервер дээрх файлд хадгалагдсан эсэхийг шалгах шаардлагатай үед үүнийг алгоритмын эдгээр цэгүүдэд ашигладаг.

Тор.бүх_түлх () – өөрчилсөн Cage ангиллын бүх сувгийн бүх хуудсыг буферээс сервер рүү “түлхдэг”. Бүх суваг дээрх бүх үйлдлүүд сервер дээр хадгалагдсан гэдэгт итгэлтэй байх шаардлагатай үед хэрэглэнэ.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх