Cage Remote File Access System

Тутумдун максаты

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

өтүнмөлөр

Системанын иштеши төмөнкү учурларда натыйжалуу болот:

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

түзүлүш

Cage системасы (ишке ашыруу бар - Windows боюнча Python 3.7 бета версия) эки негизги бөлүктөн турат:

  1. Cageserver — файлдары алыстан кирүүнү талап кылган тармактагы компьютерлерде иштеген файл сервер программасы (функциялардын пакети);
  2. класс түрмө серверлер менен өз ара аракеттенүүнү коддоону жөнөкөйлөтүү, кардар программалык камсыздоосу үчүн методдордун китепканасы менен.

Кардар тарабында системаны колдонуу

Cage классынын ыкмалары кадимки, "күнүмдүк" файл тутумунун операцияларын алмаштырат: түзүү, ачуу, жабуу, жок кылуу файлдар, ошондой эле экилик форматта маалыматтарды окуу/жазуу (маалыматтын ордун жана өлчөмүн көрсөтүү менен). Концептуалдык жактан бул ыкмалар C тилинин файлдык функцияларына жакын, мында файлдарды ачуу/жабуу киргизүү/чыгаруунун “каналдарында” аткарылат.

Башкача айтканда, программист "файл" объекттеринин методдору менен иштебейт (класс _io Python менен), бирок Cage классынын ыкмалары менен.

Cage объектинин инстанциясы түзүлгөндө, ал сервер (же бир нече серверлер) менен баштапкы байланышты орнотот, Кардар Идентификатору тарабынан авторизацияланат жана бардык файл операциялары үчүн атайын порт номери менен ырастоо алат. 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. "Операциялар" – файлдар менен иштөө боюнча кардарлардын тапшырмаларын (операцияларын) аткаруу процесси, ошондой эле кардардын буйруктарынын негизинде байланыш сессияларын жабуу процесси.

Эки процесс тең синхрондоштурулган эмес жана көп процесстик кезектерге, прокси объекттерге, кулпуларга жана розеткаларга негизделген билдирүүлөрдү кабыл алуунун жана жөнөтүүнүн чексиз циклдери катары уюштурулган.
Connection процесси ар бир кардар үчүн маалыматтарды кабыл алуу жана өткөрүү үчүн портту бөлүп берет. Порттордун саны сервер башталганда коюлат. Порттор менен кардарлардын ортосундагы карта процесстер аралык прокси эстутумда сакталат.

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

Серверде файлдарды түзүү/өчүрүү/ачуу/жабуу буйруктарын иштетүү “Операциялар” процессинин өзүндө ОС серверинин файлдык подсистемасынын жардамы менен ырааттуу түрдө ишке ашырылат.

Жалпысынан окуу/жазууну тездетүү үчүн, бул операциялар "Операциялар" процесси тарабынан түзүлгөн жиптерде аткарылат. Жиптердин саны адатта ачык файлдардын санына барабар. Кардарлардан окуу/жазуу тапшырмалары жалпы кезекке берилет жана биринчи бош жип тапшырманы башынан алат. Атайын логика сервердин оперативдүү эсинде маалыматтарды кайра жазуу операцияларын жок кылууга мүмкүндүк берет.

Операциялар процесси кардар иш-аракетин көзөмөлдөйт жана алардын буйруктары боюнча же аракетсиздик таймауту ашып кеткенде аларды тейлөөнү токтотот.

Ишенимдүүлүктү камсыз кылуу үчүн Cageserver бардык транзакциялардын журналдарын жүргүзөт. Бир жалпы журналда файлдарды түзүү/ачуу/атын өзгөртүү/өчүрүү тапшырмалары бар кардарлардын билдирүүлөрүнүн көчүрмөлөрү камтылган. Ар бир жумушчу файл үчүн өзүнчө журнал түзүлөт, анда бул жумушчу файлдагы маалыматтарды окуу жана жазуу тапшырмалары бар билдирүүлөрдүн көчүрмөлөрү, ошондой эле жазылган (жаңы) маалыматтардын массивдери жана кайра жазуу (жазуу) учурунда жок кылынган маалыматтардын массивдери жазылат. жаңы маалыматтар эскилердин "үстүндө"). ).

Бул журналдар камдык көчүрмөлөрдөгү жаңы өзгөртүүлөрдү калыбына келтирүүгө жана учурдагы мазмунду мурунку чекитке кайтарууга мүмкүнчүлүк берет.

Cageserver болжол менен 3100 код саптары.

Cage Remote File Access System

Cageserver файл серверинин программасын ишке киргизүү

Баштоодо, диалогдо сиз аныкташыңыз керек:
— авторизациялоо үчүн негизги порт;
— ыйгарым укуктуу кардарлар менен транзакцияларды алмашуу үчүн порттордун саны (1ден же андан көп сандардын пулу негизги порт номеринин жанындагы бирден башталат).

Cage классын колдонуу

тап капас.түрмө( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, күтүү=0, ойгонуу=Жалган, cache_file="" )

Бул класстан объекттер түзүлөт, алар файл серверлери менен иштешет жана буфердик эстутумду камтыйт.

параметрлер

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

ыкмалары

Cage.file_create( сервер, жол ) – жаңы файл түзүңүз

Cage.file_name( сервер, жол, жаңы_аты ) – файлдын атын өзгөртүү

Cage.file_remove( сервер, жол) - файлды жок кылуу

Cage.ачык( сервер, жол, мод ) - файлды ач

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

Cage.жакын (fchannel) – файлды жабуу

Cage.жазуу (fchannel, баштоо, маалымат ) – файлга байт сап жазуу

Cage.окуу (fchannel, begin, len_data ) – файлдан байт сапты окуу

Cage.put_pages ( fchannel ) – өзгөртүлгөн көрсөтүлгөн каналдын бардык барактарын буферден серверге “түртөт”. Каналдагы бардык операциялар сервердеги файлда физикалык түрдө сакталганына ынануу керек болгондо, ал алгоритмдин ошол пункттарында колдонулат.

Cage.push_all () – өзгөртүлгөн Cage классынын мисалы үчүн бардык каналдардын бардык баракчаларын буферден серверге “түртөт”. Бардык каналдардагы бардык операциялар серверде сакталганына ишенүү керек болгондо колдонулат.

Source: www.habr.com

Комментарий кошуу