Cage файлдарға қашықтан қол жеткізу жүйесі

Жүйенің мақсаты

Желідегі компьютерлердегі файлдарға қашықтан қол жеткізуді қолдау. Жүйе TCP протоколы арқылы транзакциялармен (хабарламалармен) алмасу арқылы барлық негізгі файлдық операцияларды (жасау, жою, оқу, жазу және т.б.) «іс жүзінде» қолдайды.

Өтініштер

Жүйенің функционалдығы келесі жағдайларда тиімді:

  • байланыстағы мүмкін уақытша үзілістер жағдайында (офлайн режимінде) қашықтағы серверлердегі файлдарға жылдам қол жеткізуді талап ететін мобильді және ендірілген құрылғыларға (смартфондар, борттық басқару жүйелері және т.б.) арналған жергілікті қосымшаларда;
  • жүктелген ДҚБЖ-да, егер сұрауларды өңдеу кейбір серверлерде, ал деректерді сақтау басқаларында жүзеге асырылса;
  • жоғары жылдамдықты деректер алмасуды, артық және сенімділікті талап ететін ақпаратты жинау және өңдеу үшін бөлінген корпоративтік желілерде;
  • микросервис архитектурасы бар күрделі жүйелерде, модульдер арасындағы ақпарат алмасудағы кідіріс өте маңызды.

құрылым

Cage жүйесі (Windows жүйесінде Python 3.7-де іске асыру - бета нұсқасы бар) екі негізгі бөлікті қамтиды:

  1. Торсервер — файлдары қашықтан қол жеткізуді қажет ететін желідегі компьютерлерде жұмыс істейтін файлдық сервер бағдарламасы (функциялар пакеті);
  2. класс тор серверлермен өзара әрекеттесуді кодтауды жеңілдететін клиенттік бағдарламалық қамтамасыз ету әдістерінің кітапханасымен.

Жүйені клиент жағында пайдалану

Cage класының әдістері әдеттегі файлдық жүйе операцияларын ауыстырады: құру, ашу, жабу, жою файлдар, сонымен қатар екілік форматта деректерді оқу/жазу (деректердің орны мен өлшемін көрсете отырып). Тұжырымдама бойынша бұл әдістер Си тілінің файлдық функцияларына жақын, мұнда файлдарды ашу/жабу енгізу/шығару «арналарында» орындалады.

Басқаша айтқанда, бағдарламашы «файл» объектілерінің әдістерімен жұмыс істемейді (класс _io Python-да), бірақ Cage класының әдістерімен.

Cage нысанының данасы жасалғанда, ол сервермен (немесе бірнеше серверлермен) бастапқы қосылымды орнатады, Клиент идентификаторымен рұқсат етілген және барлық файл әрекеттері үшін бөлінген порт нөмірімен растауды алады. Cage нысаны жойылғанда, ол серверге байланысты тоқтатуға және файлдарды жабуға нұсқау береді. Байланысты тоқтатуды серверлердің өздері де бастауға болады.

Жүйе жедел жад кэшінде (буферде) клиенттік бағдарламалардың жиі қолданылатын файл фрагменттерін буферлеу арқылы оқу/жазу өнімділігін жақсартады.
Клиенттік бағдарламалық құрал әртүрлі параметрлері бар Cage нысандарының кез келген санын пайдалана алады (буфер жады өлшемі, сервермен алмасу кезінде блок өлшемі және т.б.).

Жалғыз Cage нысаны бірнеше серверлердегі бірнеше файлдармен байланыса алады. Байланыс параметрлері (IP мекенжайы немесе DNS сервері, авторизацияға арналған негізгі порт, жол және файл атауы) нысанды жасау кезінде көрсетіледі.

Әрбір Cage нысаны бір уақытта бірнеше файлдармен жұмыс істей алатындықтан, буферлеу үшін ортақ жад кеңістігі пайдаланылады. Кэш өлшемі – беттер саны және олардың өлшемі Cage нысанын жасау кезінде динамикалық түрде орнатылады. Мысалы, 1 ГБ кэш - әрқайсысы 1000 МБ болатын 1 бет немесе әрқайсысы 10 Кбайт 100 мың бет немесе әрқайсысы 1 КБ болатын 1 миллион бет. Беттердің өлшемі мен санын таңдау әрбір қолданба жағдайы үшін нақты тапсырма болып табылады.

Әртүрлі файлдардағы ақпаратқа қол жеткізу жолына байланысты әртүрлі буферлік жады параметрлерін анықтау үшін бірнеше Cage нысандарын бір уақытта пайдалануға болады. Негізгі алгоритм ретінде ең қарапайым буферлеу алгоритмі қолданылады: жадтың берілген көлемі таусылғаннан кейін жаңа беттер ең аз кіру санымен жұмыстан шығу принципіне сәйкес ескілерін ауыстырады. Буферлеу әсіресе біркелкі емес (статистикалық мағынада), біріншіден, әртүрлі файлдарға, екіншіден, әрбір файлдың фрагменттеріне ортақ қолжетімділік жағдайында тиімді.

Cage класы енгізу/шығаруды деректер мекенжайлары бойынша ғана емес (массивтің орны мен ұзындығын көрсету, файлдық жүйе операцияларын «алмастыру»), сонымен қатар төменгі, «физикалық» деңгейде – буфер жадындағы бет нөмірлері бойынша қолдайды.

Түпнұсқа функцияға Cage нысандары үшін қолдау көрсетіледі «қыстау» («ұйқы») - оларды клиент жағындағы жергілікті демп файлына «жұмсауға» болады (мысалы, серверлермен байланыс үзілгенде немесе қолданба тоқтатылғанда және т.б.) бұл файл (байланыс қалпына келтірілгеннен кейін, қолданбаны қайта іске қосқан кезде). Бұл уақытша «офлайнға» өткеннен кейін клиенттік бағдарламаны белсендіру кезінде трафикті айтарлықтай азайтуға мүмкіндік береді, өйткені жиі қолданылатын файл фрагменттері кэште болады.

Cage шамамен 3600 код жолын құрайды.

Серверді құру принциптері

Cageserver файл серверлерін порттардың ерікті санымен іске қосуға болады, олардың біреуі («негізгі») тек барлық клиенттерді авторизациялау үшін пайдаланылады, қалғандары деректер алмасу үшін пайдаланылады. Cage сервер бағдарламасы тек Python-ды қажет етеді. Сонымен қатар файлдық сервері бар компьютер кез келген басқа жұмыстарды орындай алады.

Сервер бастапқыда екі негізгі процестің жиынтығы ретінде басталады:

  1. «Байланыстар» – сервердің бастамасы бойынша клиенттермен байланысты орнату және оны тоқтату операцияларын орындау процесі;
  2. «Операциялар» – файлдармен жұмыс істеу бойынша клиенттердің тапсырмаларын (операцияларын) орындау, сонымен қатар клиент командалары негізінде байланыс сеанстарын жабу процесі.

Екі процесс синхрондалмаған және көппроцесстік кезектерге, прокси нысандарға, құлыптарға және ұяшықтарға негізделген хабарламаларды қабылдау мен жіберудің шексіз циклдары ретінде ұйымдастырылған.
Қосылу процесі деректерді қабылдау және жіберу үшін әрбір клиентке портты бөледі. Порттардың саны сервер іске қосылғанда орнатылады. Порттар мен клиенттер арасындағы салыстыру процессаралық ортақ прокси жадында сақталады.

Операциялар процесі файл ресурстарын ортақ пайдалануды қолдайды, осылайша бірнеше әртүрлі клиенттер бөлісе алады (квазипараллель, қол жеткізу құлыптармен басқарылатындықтан) бір файлдан деректерді оқыңыз, егер бұған «бірінші» клиент бастапқыда ашқан кезде рұқсат етілсе.

Серверде файлдарды жасау/жою/ашу/жабу пәрмендерін өңдеу «Операциялар» процесінің өзінде сервер ОЖ файлдық ішкі жүйесін пайдалану арқылы қатаң түрде дәйекті түрде жүзеге асырылады.

Жалпы оқу/жазуды жылдамдату үшін бұл әрекеттер «Операциялар» процесі арқылы пайда болған ағындарда орындалады. Ағындар саны әдетте ашық файлдар санына тең. Клиенттерден оқу/жазу тапсырмалары жалпы кезекке жіберіледі және бірінші бос ағын тапсырманы басынан алады. Арнайы логика сервердің жедел жадындағы деректерді қайта жазу операцияларын жоюға мүмкіндік береді.

Операциялар процесі клиент әрекетін бақылайды және олардың пәрмендері бойынша немесе әрекетсіздік күту уақыты асып кеткенде оларға қызмет көрсетуді тоқтатады.

Сенімділікті қамтамасыз ету үшін Cageserver барлық транзакциялардың журналдарын жүргізеді. Бір жалпы журналда файлдарды жасау/ашу/атын өзгерту/жою тапсырмалары бар клиенттерден келген хабарлардың көшірмелері бар. Әрбір жұмыс файлы үшін жеке журнал жасалады, онда осы жұмыс файлындағы деректерді оқу және жазу тапсырмалары бар хабарламалардың көшірмелері, сондай-ақ жазбаша (жаңа) деректер массивтері және қайта жазу (жазу) кезінде жойылған деректер массивтері жазылады. ескі деректердің «үстінде» жаңа деректер). ).

Бұл журналдар сақтық көшірмелердегі жаңа өзгерістерді қалпына келтіруге және ағымдағы мазмұнды бұрынғы нүктеге қайтаруға мүмкіндік береді.

Cageserver - шамамен 3100 жолдық код.

Cage файлдарға қашықтан қол жеткізу жүйесі

Cageserver файлдық сервер бағдарламасын іске қосу

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

Cage класын пайдалану

сынып тор.тор( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, күту=0, ояту=False, cache_file="" )

Файл серверлерімен әрекеттесетін және буферлік жадты қамтитын осы сыныптан нысандар жасалады.

параметрлері

  • тордың_атауы(көш) - сервер жағында клиенттерді анықтау үшін қолданылатын объектінің шартты атауы
  • бет өлшемі(INT) — буферлік жадының бір бетінің өлшемі (байтпен)
  • сандар(INT) — буфер жады беттерінің саны
  • maxstrlen(INT) – жазу және оқу операцияларындағы байт жолының максималды ұзындығы
  • server_ip(дикт) - пайдаланылатын серверлердің мекенжайлары бар сөздік, мұнда кілт сервердің шартты атауы (қолданбаның ішіндегі сервер идентификаторы), ал мән мекенжайы бар жол: «ip мекенжайы: порт» немесе «DNS: порт» (аттар мен нақты мекенжайларды салыстыру уақытша, оны өзгертуге болады)
  • күте тұрыңыз(INT) — порттарды алу кезінде серверден жауап күту уақыты (секундпен)
  • ояту(логикалық) — нысанның жасалу жолының жалаушасы (жалған - егер жаңа объект құрылса, рас - егер нысан бұрын «жығылған» нысаннан жасалған болса - «күту күйі» операциясы арқылы, әдепкі бойынша False)
  • кэш_файл(көш) - күту күйіне арналған файл атауы

Әдістері

Тор.файлды_жасау( сервер, жол ) – жаңа файл құру

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

Тор.файлды_жою( сервер, жол) - файлды жою

Тор.ашық( сервер, жол, мод ) - файлды ашу

Қайтару fchannel арна нөмірі. Параметр Mod - бұл файлды ашу режимі: "wm" - эксклюзивті (оқу/жазу), "rs" - тек оқуға арналған және басқа клиенттер оқу үшін ғана ортақ, "ws" - оқу/жазу және тек оқу үшін ортақ басқа клиенттер.

Тор.жақын (fchannel) – файлды жабыңыз

Тор.жазу (fchannel, бастау, деректер ) – файлға байт жолын жазу

Тор.оқу (fchannel, start, len_data ) – файлдан байт жолын оқу

Тор.қою_беттері ( fchannel ) – көрсетілген арнаның өзгертілген барлық беттерін буферден серверге «итереді». Арнадағы барлық операциялар сервердегі файлда физикалық түрде сақталғанына сенімді болу қажет болғанда, ол алгоритмнің сол нүктелерінде қолданылады.

Тор.барлығын басыңыз () – өзгертілген Cage класының данасы үшін барлық арналардың барлық беттерін буферден серверге «итереді». Барлық арналардағы барлық әрекеттер серверде сақталғанына сенімді болу қажет болғанда қолданылады.

Ақпарат көзі: www.habr.com

пікір қалдыру