Cage Remote File Access System

පද්ධති අරමුණ

ජාලයේ පරිගණකවල ගොනු වෙත දුරස්ථ ප්රවේශය සඳහා සහාය. TCP ප්‍රොටෝකෝලය භාවිතා කරමින් ගනුදෙනු (පණිවිඩ) හුවමාරු කර ගැනීමෙන් පද්ධතිය "ප්‍රායෝගිකව" සියලුම මූලික ගොනු මෙහෙයුම් (නිර්මාණය, මකාදැමීම, කියවීම, ලිවීම, ආදිය) සඳහා සහය දක්වයි.

අයදුම්පත්

පහත සඳහන් අවස්ථා වලදී පද්ධතියේ ක්රියාකාරිත්වය ඵලදායී වේ:

  • සන්නිවේදනයේ ඇති විය හැකි තාවකාලික බාධා කිරීම් හමුවේ (නොබැඳිව යාමත් සමඟ) දුරස්ථ සේවාදායකයන්හි ගොනු වෙත ඉක්මන් ප්‍රවේශය අවශ්‍ය වන ජංගම සහ කාවැද්දූ උපාංග (ස්මාර්ට්ෆෝන්, ඔන්-බෝඩ් පාලන පද්ධති, ආදිය) සඳහා දේශීය යෙදුම්වල;
  • පූරණය කරන ලද DBMS වල, සමහර සේවාදායකයන් මත විමසුම් සැකසීම සිදු කරන්නේ නම් සහ අනෙකුත් දත්ත ගබඩා කිරීම සිදු කරන්නේ නම්;
  • තොරතුරු රැස් කිරීම සහ සැකසීම සඳහා බෙදා හරින ලද ආයතනික ජාල තුළ, අධිවේගී දත්ත හුවමාරුව, අතිරික්තය සහ විශ්වසනීයත්වය අවශ්ය වේ;
  • ක්ෂුද්‍ර සේවා ගෘහ නිර්මාණ ශිල්පය සහිත සංකීර්ණ පද්ධතිවල, මොඩියුල අතර තොරතුරු හුවමාරුවේ ප්‍රමාදයන් ඉතා වැදගත් වේ.

ව්යුහය

Cage පද්ධතිය (ක්‍රියාත්මක කිරීමක් ඇත - වින්ඩෝස් හි පයිතන් 3.7 හි බීටා අනුවාදය) ප්‍රධාන කොටස් දෙකක් ඇතුළත් වේ:

  1. කේජ්සර්වර් — ගොනු සේවාදායක වැඩසටහනක් (කාර්ය පැකේජයක්) ජාලයේ පරිගණක මත ධාවනය වන ගොනු සඳහා දුරස්ථ ප්රවේශයක් අවශ්ය වේ;
  2. класс කූඩුව සේවාදායක මෘදුකාංග සඳහා ක්‍රම පුස්තකාලයක් සමඟින්, සේවාදායකයන් සමඟ අන්තර්ක්‍රියා කේතීකරණය සරල කිරීම.

සේවාලාභියාගේ පැත්තෙන් පද්ධතිය භාවිතා කිරීම

Cage පන්තියේ ක්‍රම සුපුරුදු, "සාමාන්‍ය" ගොනු පද්ධති මෙහෙයුම් ප්‍රතිස්ථාපනය කරයි: නිර්මාණය, විවෘත කිරීම, වසා දැමීම, මකා දැමීම ගොනු, මෙන්ම ද්විමය ආකෘතියෙන් දත්ත කියවීම / ලිවීම (දත්තවල පිහිටීම සහ ප්‍රමාණය දක්වයි). සංකල්පමය වශයෙන්, මෙම ක්‍රම C භාෂාවේ ගොනු ශ්‍රිතවලට සමීප වන අතර, ගොනු විවෘත කිරීම/වසා දැමීම "නාලිකාවල" ආදාන/ප්‍රතිදානය සිදු කෙරේ.

වෙනත් වචන වලින් කිවහොත්, ක්‍රමලේඛකයා "ගොනු" වස්තු (පන්තියේ) ක්‍රම සමඟ ක්‍රියා නොකරයි _io Python හි), නමුත් Cage පන්තියේ ක්‍රම සමඟ.

Cage වස්තුවක් නිර්මාණය කළ විට, එය සේවාදායකයක් (හෝ සේවාදායක කිහිපයක්) සමඟ මූලික සම්බන්ධතාවයක් ඇති කරයි, සේවාලාභී හැඳුනුම්පත මගින් අවසර දෙනු ලැබේ, සහ සියලුම ගොනු මෙහෙයුම් සඳහා කැප වූ වරාය අංකයක් සමඟ තහවුරු කිරීමක් ලබා ගනී. Cage වස්තුවක් මකා දැමූ විට, එය සන්නිවේදනය නතර කිරීමට සහ ගොනු වසා දැමීමට සේවාදායකයට උපදෙස් දෙයි. සන්නිවේදනය අවසන් කිරීම සේවාදායකයන් විසින්ම ආරම්භ කළ හැකිය.

RAM හැඹිලියේ (බෆරය) ග්‍රාහක වැඩසටහන් වල නිතර භාවිතා වන ගොනු කොටස් බෆර කිරීම මගින් පද්ධතිය කියවීමේ/ලිවීමේ කාර්ය සාධනය වැඩි දියුණු කරයි.
සේවාලාභී මෘදුකාංගයට විවිධ සැකසුම් සහිත ඕනෑම Cage objects ගණනක් භාවිතා කළ හැක (බෆර මතකයේ ප්‍රමාණය, සේවාදායකය සමඟ හුවමාරු කිරීමේදී බ්ලොක් ප්‍රමාණය, ආදිය).

තනි කූඩු වස්තුවකට බහු සේවාදායකයන් මත ගොනු කිහිපයක් සමඟ සන්නිවේදනය කළ හැකිය. වස්තුව නිර්මාණය කිරීමේදී සන්නිවේදන පරාමිතීන් (IP ලිපිනය හෝ DNS සේවාදායකය, අවසරය සඳහා ප්රධාන වරාය, මාර්ගය සහ ගොනු නාමය) නියම කර ඇත.

එක් එක් Cage වස්තුවකට එකවර ගොනු කිහිපයක් සමඟ ක්‍රියා කළ හැකි බැවින්, බෆරය සඳහා හවුල් මතක අවකාශය භාවිතා වේ. කෑෂ් ප්‍රමාණය - පිටු ගණන සහ ඒවායේ ප්‍රමාණය, කූඩු වස්තුවක් නිර්මාණය කිරීමේදී ගතිකව සකසා ඇත. උදාහරණයක් ලෙස, 1 GB හැඹිලියක් යනු 1000 MB බැගින් පිටු 1 ක් හෝ 10 KB බැගින් පිටු 100 ක් හෝ 1 KB බැගින් පිටු මිලියන 1 කි. එක් එක් යෙදුම් අවස්ථාව සඳහා පිටු ගණන සහ ප්‍රමාණය තේරීම නිශ්චිත කාර්යයකි.

විවිධ ගොනු වල තොරතුරු ප්‍රවේශ වන ආකාරය අනුව විවිධ බෆර මතක සැකසුම් නිර්වචනය කිරීමට ඔබට එකවර Cage objects කිහිපයක් භාවිතා කළ හැක. මූලික එකක් ලෙස, සරලම බෆරින් ඇල්ගොරිතම භාවිතා වේ: දී ඇති මතක ප්‍රමාණය අවසන් වූ පසු, නව පිටු අවම ප්‍රවේශ සංඛ්‍යාවක් සහිත විශ්‍රාම යාමේ මූලධර්මය අනුව පැරණි ඒවා විස්ථාපනය කරයි. අසමාන (සංඛ්‍යානමය අර්ථයකින්) බෙදාගත් ප්‍රවේශය, පළමුව, විවිධ ගොනු වෙත, සහ, දෙවනුව, එක් එක් ගොනුවේ කොටස් සඳහා, බෆරින් විශේෂයෙන් ඵලදායී වේ.

Cage පන්තිය I/O සඳහා දත්ත ලිපින මගින් පමණක් නොව (අරාවේ පිහිටීම සහ දිග දැක්වීම, ගොනු පද්ධති මෙහෙයුම් "ප්‍රතිස්ථාපනය කිරීම") පමණක් නොව, අඩු, "භෞතික" මට්ටමින් - බෆර මතකයේ පිටු අංක මගින්ද සහාය දක්වයි.

මුල් කාර්යය Cage objects සඳහා සහය දක්වයි "ශිශිරතරණය" ("නින්ද") - ඒවා "කඩාවැටීම" (උදාහරණයක් ලෙස, සේවාදායකයන් සමඟ සම්බන්ධතාවය නැතිවීමකදී, හෝ යෙදුම නැවැත්වූ විට, ආදිය) සේවාදායක පැත්තේ දේශීය ඩම්ප් ගොනුවකට ගොස් ඉක්මනින් ප්‍රතිසාධනය කළ හැකිය. මෙම ගොනුව (සන්නිවේදනය නැවත ආරම්භ කිරීමෙන් පසු, ඔබ යෙදුම නැවත ආරම්භ කරන විට). තාවකාලිකව "නොබැඳි" යාමෙන් පසු සේවාලාභී වැඩසටහන සක්‍රිය කිරීමේදී ගමනාගමනය සැලකිය යුතු ලෙස අඩු කිරීමට මෙය හැකි වේ, මන්ද නිතර භාවිතා කරන ගොනු කොටස් දැනටමත් හැඹිලියේ ඇති බැවිනි.

Cage යනු කේත පේළි 3600 ක් පමණ වේ.

සේවාදායක ඉදිකිරීමේ මූලධර්ම

Cageserver ගොනු සේවාදායකයන් අත්තනෝමතික වරායන් සංඛ්‍යාවක් සමඟ ක්‍රියාත්මක කළ හැකි අතර, ඉන් එකක් ("ප්‍රධාන") භාවිතා කරනුයේ සියලුම සේවාලාභීන්ගේ අවසරය සඳහා පමණක් වන අතර ඉතිරිය දත්ත හුවමාරුව සඳහා භාවිතා වේ. Cage server වැඩසටහනට අවශ්‍ය වන්නේ Python පමණි. සමාන්තරව, ගොනු සේවාදායකය සහිත පරිගණකයට වෙනත් ඕනෑම කාර්යයක් කළ හැකිය.

සේවාදායකය මුලින් ආරම්භ වන්නේ ප්‍රධාන ක්‍රියාවලි දෙකක එකතුවක් ලෙස ය:

  1. "සම්බන්ධතා" - සේවාදායකයින් සමඟ සන්නිවේදනය ස්ථාපිත කිරීමේ මෙහෙයුම් සිදු කිරීම සහ සේවාදායකයේ මූලිකත්වයෙන් එය අවසන් කිරීම සඳහා වූ ක්රියාවලියක්;
  2. "මෙහෙයුම්" - ලිපිගොනු සමඟ වැඩ කිරීම සඳහා සේවාදායකයින්ගේ කාර්යයන් (මෙහෙයුම්) ඉටු කිරීම සඳහා මෙන්ම, සේවාදායක විධාන මත පදනම්ව සන්නිවේදන සැසි වසා දැමීම සඳහා වූ ක්රියාවලියකි.

ක්‍රියාවලි දෙකම සමමුහුර්ත කර නොමැති අතර බහු ක්‍රියාවලි පෝලිම්, ප්‍රොක්සි වස්තු, අගුලු සහ සොකට් මත පදනම්ව පණිවිඩ ලැබීමේ සහ යැවීමේ නිමක් නැති ලූප ලෙස සංවිධානය කර ඇත.
සම්බන්ධතා ක්‍රියාවලිය මඟින් එක් එක් සේවාදායකයා සඳහා දත්ත ලබා ගැනීමට සහ සම්ප්‍රේෂණය කිරීමට වරායක් වෙන් කරයි. සේවාදායකය ආරම්භ වන විට වරාය ගණන සකසා ඇත. වරායන් සහ සේවාලාභීන් අතර සිතියම්ගත කිරීම අන්තර් ක්‍රියාවලි-බෙදාගත් ප්‍රොක්සි මතකයේ ගබඩා කර ඇත.

මෙහෙයුම් ක්‍රියාවලිය ගොනු සම්පත් බෙදා ගැනීමට සහය වන අතර එමඟින් විවිධ සේවාදායකයින්ට බෙදා ගත හැකිය (අර්ධ-සමාන්තර, ප්‍රවේශය අගුලු මගින් පාලනය වන බැවින්) "පළමු" සේවාලාභියා විසින් මුලින් විවෘත කළ විට මෙය ඉඩ දුන්නේ නම් එක් ගොනුවක දත්ත කියවන්න.

සේවාදායකයේ ගොනු සෑදීමට/මැකීමට/විවෘත කිරීමට/වසා දැමීමට විධාන සැකසීම “මෙහෙයුම්” ක්‍රියාවලියේදීම දැඩි ලෙස අනුපිළිවෙලින් සේවාදායක OS හි ගොනු උප පද්ධතිය භාවිතයෙන් සිදු කෙරේ.

සාමාන්‍යයෙන් කියවීම / ලිවීම වේගවත් කිරීම සඳහා, මෙම මෙහෙයුම් සිදු කරනු ලබන්නේ "මෙහෙයුම්" ක්‍රියාවලිය මගින් ඇති කරන ලද නූල් වලිනි. නූල් ගණන සාමාන්‍යයෙන් විවෘත ගොනු ගණනට සමාන වේ. සේවාලාභීන්ගෙන් කියවීමේ/ලිවීමේ කාර්යයන් සාමාන්‍ය පෝලිමට ඉදිරිපත් කරනු ලබන අතර පළමු නොමිලේ නූල් එහි ප්‍රධානියාගෙන් කාර්යය ලබා ගනී. සේවාදායකයේ RAM හි දත්ත නැවත ලිවීමේ මෙහෙයුම් ඉවත් කිරීමට විශේෂ තර්කනය ඔබට ඉඩ සලසයි.

මෙහෙයුම් ක්‍රියාවලිය සේවාලාභී ක්‍රියාකාරකම් අධීක්ෂණය කරන අතර ඔවුන්ගේ විධාන මත හෝ අක්‍රිය කාලය ඉක්මවා ගිය විට ඔවුන්ට සේවා සැපයීම නවත්වයි.

විශ්වසනීයත්වය සහතික කිරීම සඳහා, Cageserver සියළුම ගනුදෙනු වල ලොග් තබා ගනී. එක් සාමාන්‍ය ලොගයක ලිපිගොනු සෑදීමට/විවෘත කිරීමට/නැවත නම් කිරීමට/මකා දැමීමට කාර්යයන් සහිත සේවාදායකයින්ගේ පණිවිඩවල පිටපත් අඩංගු වේ. වැඩ කරන සෑම ගොනුවක් සඳහාම වෙනම ලොගයක් සාදනු ලබන අතර, මෙම වැඩ කරන ගොනුවේ දත්ත කියවීම සහ ලිවීම සඳහා කාර්යයන් සහිත පණිවිඩවල පිටපත් මෙන්ම, ලිඛිත (නව) දත්ත අරා සහ නැවත ලිවීමේදී (ලිවීමේදී) විනාශ වූ දත්ත අරා සටහන් වේ. පැරණි දත්තවල "ඉහළ" නව දත්ත).

මෙම ලඝු-සටහන් මඟින් නව වෙනස්කම් උපස්ථවලට ප්‍රතිසාධනය කිරීමට සහ වත්මන් අන්තර්ගතය අතීතයේ ලක්ෂ්‍යයකට පෙරළීමේ හැකියාව සපයයි.

Cageserver යනු කේත පේළි 3100ක් පමණ වේ.

Cage Remote File Access System

Cageserver ගොනු සේවාදායක වැඩසටහන දියත් කිරීම

ආරම්භ කරන විට, සංවාදයේ ඔබ අර්ථ දැක්විය යුතුය:
- අවසරය සඳහා ප්රධාන වරාය;
— බලයලත් සේවාදායකයින් සමඟ ගනුදෙනු හුවමාරු කර ගැනීම සඳහා වන වරාය ගණන (1 හෝ ඊට වැඩි ගණනකින්, ප්‍රධාන වරාය අංකයට යාබදව ඇති සංඛ්‍යා සංචිතය ආරම්භ වේ).

කූඩු පන්තිය භාවිතා කිරීම

පන්තිය කූඩුව.කූඩුව( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )

ගොනු සේවාදායකයන් සමඟ අන්තර්ක්‍රියා කරන සහ බෆර් මතකය අඩංගු වස්තු මෙම පන්තියෙන් සාදනු ලැබේ.

පරාමිතීන්

  • කූඩුව_නම(str) - සේවාදායකයේ පැත්තේ සේවාදායකයින් හඳුනා ගැනීමට භාවිතා කරන වස්තුවේ කොන්දේසි සහිත නම
  • පිටු ප්රමාණය(int) — බෆර මතකයේ එක් පිටුවක ප්‍රමාණය (බයිට් වලින්)
  • අංක(int) — බෆර මතක පිටු ගණන
  • maxstrlen(int) - ලිවීමේ සහ කියවීමේ මෙහෙයුම් වලදී බයිට් තන්තුවක උපරිම දිග
  • server_ip(dict) - භාවිතා කරන ලද සේවාදායකයන්ගේ ලිපිනයන් සහිත ශබ්ද කෝෂයක්, යතුර සේවාදායකයේ කොන්දේසි සහිත නම (යෙදුම තුළ ඇති සේවාදායක හැඳුනුම්පත) වන අතර අගය ලිපිනය සහිත තන්තුවකි: “ip address:port” හෝ “DNS: වරාය" (නම් සහ සැබෑ ලිපින සංසන්දනය කිරීම තාවකාලිකයි, එය වෙනස් විය හැක)
  • බලා සිටින්න(int) - තොට ලැබෙන විට සේවාදායකයෙන් ප්‍රතිචාරයක් බලාපොරොත්තුවෙන් සිටින කාලය (තත්පර වලින්)
  • අවදි(බූලියන්) - වස්තුව නිර්මාණය කරන ආකාරය පිළිබඳ ධජය (බොරු - නව වස්තුවක් නිර්මාණය කරන්නේ නම්, සැබෑ - වස්තුවක් නිර්මාණය කර ඇත්තේ කලින් "කඩා වැටුණු" එකකින් නම් - "ශිශිරතරණය" මෙහෙයුම භාවිතයෙන්, පෙරනිමියෙන් අසත්‍යය)
  • cache_file(str) - ශිශිරතරණය සඳහා ගොනු නාමය

ක්‍රම

කූඩුව.ගොනු_සාදන්න( සේවාදායකය, මාර්ගය ) - නව ගොනුවක් සාදන්න

කූඩුව.ගොනු_නැවත නම් කරන්න( සේවාදායකය, මාර්ගය, new_name ) - ගොනුව නැවත නම් කරන්න

කූඩුව.ගොනු_ඉවත් කරන්න( සේවාදායකය, මාර්ගය) - ගොනුවක් මකන්න

කූඩුව.විවෘත( සේවාදායකය, මාර්ගය, mod ) - ගොනුව අරින්න

ප්‍රතිලාභ fchannel නාලිකා අංකය. පරාමිතිය , mod - මෙය ගොනු විවෘත කිරීමේ මාදිලිය වේ: "wm" - සුවිශේෂී (කියවීම/ලිවීම), "rs" - කියවීමට පමණි, සහ අනෙකුත් සේවාලාභීන් විසින් කියවීම සඳහා පමණක් බෙදා ඇත, "ws" - කියවීමට/ලියන්න, සහ කියවීම සඳහා පමණක් බෙදා ගන්න වෙනත් ගනුදෙනුකරුවන්.

කූඩුව.සමීප (fchannel) - ගොනුව වසා දමන්න

කූඩුව.ලියන්න (fchannel, start, data ) - ගොනුවකට බයිට් තන්තුවක් ලියන්න

කූඩුව.කියවන්න (fchannel, start, len_data ) - ගොනුවකින් බයිට් පෙළක් කියවන්න

කූඩුව.දමා_පිටු ( fchannel ) - වෙනස් කරන ලද නිශ්චිත නාලිකාවේ සියලුම පිටු බෆරයේ සිට සේවාදායකයට “තල්ලු කරයි”. නාලිකාවේ සියලුම මෙහෙයුම් සේවාදායකයේ ගොනුවක භෞතිකව සුරකින බවට ඔබට සහතික විය යුතු විට එය ඇල්ගොරිතමයේ එම ස්ථානවල භාවිතා වේ.

කූඩුව.තල්ලු_සියල්ල () - වෙනස් කරන ලද Cage පන්තියේ උදාහරණයක් සඳහා සියලුම නාලිකාවල සියලුම පිටු බෆරයේ සිට සේවාදායකයට “තල්ලු කරයි”. සියලුම නාලිකා වල සියලුම මෙහෙයුම් සේවාදායකයේ සුරකින බවට ඔබට සහතික විය යුතු විට භාවිතා වේ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න