సిస్టమ్ ప్రయోజనం
నెట్వర్క్లోని కంప్యూటర్లలో ఫైల్లకు రిమోట్ యాక్సెస్ కోసం మద్దతు. సిస్టమ్ "వాస్తవంగా" TCP ప్రోటోకాల్ ఉపయోగించి లావాదేవీలను (సందేశాలు) మార్పిడి చేయడం ద్వారా అన్ని ప్రాథమిక ఫైల్ కార్యకలాపాలకు (సృష్టి, తొలగింపు, చదవడం, వ్రాయడం మొదలైనవి) మద్దతు ఇస్తుంది.
అప్లికేషన్లు
సిస్టమ్ యొక్క కార్యాచరణ క్రింది సందర్భాలలో ప్రభావవంతంగా ఉంటుంది:
- మొబైల్ మరియు ఎంబెడెడ్ పరికరాల (స్మార్ట్ఫోన్లు, ఆన్-బోర్డ్ కంట్రోల్ సిస్టమ్లు మొదలైనవి) కోసం స్థానిక అప్లికేషన్లలో, కమ్యూనికేషన్లో తాత్కాలిక అంతరాయాలు (ఆఫ్లైన్లో ఉండటంతో) కారణంగా రిమోట్ సర్వర్లలోని ఫైల్లకు శీఘ్ర ప్రాప్యత అవసరం;
- లోడ్ చేయబడిన DBMSలలో, కొన్ని సర్వర్లలో క్వెరీ ప్రాసెసింగ్ నిర్వహించబడితే మరియు ఇతర వాటిపై డేటా నిల్వ నిర్వహించబడుతుంది;
- సమాచారాన్ని సేకరించడం మరియు ప్రాసెస్ చేయడం కోసం పంపిణీ చేయబడిన కార్పొరేట్ నెట్వర్క్లలో, అధిక వేగం డేటా మార్పిడి, రిడెండెన్సీ మరియు విశ్వసనీయత అవసరం;
- మైక్రోసర్వీస్ ఆర్కిటెక్చర్తో కూడిన సంక్లిష్ట వ్యవస్థలలో, మాడ్యూళ్ల మధ్య సమాచార మార్పిడిలో ఆలస్యం చాలా కీలకం.
నిర్మాణం
కేజ్ సిస్టమ్ (ఇంప్లిమెంటేషన్ ఉంది - విండోస్లో పైథాన్ 3.7లో బీటా వెర్షన్) రెండు ప్రధాన భాగాలను కలిగి ఉంది:
- కేజ్సర్వర్ — ఫైల్ సర్వర్ ప్రోగ్రామ్ (ఫంక్షన్ల ప్యాకేజీ) నెట్వర్క్లోని కంప్యూటర్లలో నడుస్తుంది, దీని ఫైల్లకు రిమోట్ యాక్సెస్ అవసరం;
- తరగతి కేజ్ క్లయింట్ సాఫ్ట్వేర్ కోసం పద్ధతుల లైబ్రరీతో, సర్వర్లతో పరస్పర చర్య యొక్క కోడింగ్ను సులభతరం చేస్తుంది.
క్లయింట్ వైపు సిస్టమ్ను ఉపయోగించడం
కేజ్ క్లాస్ యొక్క పద్ధతులు సాధారణ, “రొటీన్” ఫైల్ సిస్టమ్ ఆపరేషన్లను భర్తీ చేస్తాయి: సృష్టి, తెరవడం, మూసివేయడం, తొలగించడం ఫైళ్లు, అలాగే బైనరీ ఫార్మాట్లో డేటాను చదవడం/వ్రాయడం (డేటా యొక్క స్థానం మరియు పరిమాణాన్ని సూచిస్తుంది). సంభావితంగా, ఈ పద్ధతులు C భాష యొక్క ఫైల్ ఫంక్షన్లకు దగ్గరగా ఉంటాయి, ఇక్కడ ఫైల్లను తెరవడం/మూసివేయడం ఇన్పుట్/అవుట్పుట్ యొక్క “ఛానెళ్లలో” నిర్వహించబడుతుంది.
మరో మాటలో చెప్పాలంటే, ప్రోగ్రామర్ “ఫైల్” ఆబ్జెక్ట్ల పద్ధతులతో పనిచేయదు (తరగతి _io పైథాన్లో), కానీ కేజ్ క్లాస్ యొక్క పద్ధతులతో.
కేజ్ ఆబ్జెక్ట్ యొక్క ఉదాహరణ సృష్టించబడినప్పుడు, అది సర్వర్ (లేదా అనేక సర్వర్లు)తో ప్రారంభ కనెక్షన్ను ఏర్పాటు చేస్తుంది, క్లయింట్ Id ద్వారా అధికారం పొందబడుతుంది మరియు అన్ని ఫైల్ ఆపరేషన్ల కోసం ప్రత్యేక పోర్ట్ నంబర్తో నిర్ధారణను పొందుతుంది. కేజ్ ఆబ్జెక్ట్ తొలగించబడినప్పుడు, కమ్యూనికేట్ చేయడాన్ని ఆపివేయమని మరియు ఫైల్లను మూసివేయమని సర్వర్ని నిర్దేశిస్తుంది. కమ్యూనికేషన్ యొక్క ముగింపును సర్వర్ల ద్వారా కూడా ప్రారంభించవచ్చు.
RAM కాష్ (బఫర్)లో క్లయింట్ ప్రోగ్రామ్ల యొక్క తరచుగా ఉపయోగించే ఫైల్ శకలాలను బఫర్ చేయడం ద్వారా సిస్టమ్ రీడ్/రైట్ పనితీరును మెరుగుపరుస్తుంది.
క్లయింట్ సాఫ్ట్వేర్ విభిన్న సెట్టింగ్లతో ఎన్ని కేజ్ ఆబ్జెక్ట్లను అయినా ఉపయోగించవచ్చు (బఫర్ మెమరీ పరిమాణం, సర్వర్తో మార్పిడి చేసేటప్పుడు బ్లాక్ పరిమాణం మొదలైనవి).
ఒకే కేజ్ ఆబ్జెక్ట్ బహుళ సర్వర్లలోని బహుళ ఫైల్లతో కమ్యూనికేట్ చేయగలదు. వస్తువును సృష్టించేటప్పుడు కమ్యూనికేషన్ పారామితులు (IP చిరునామా లేదా DNS సర్వర్, అధికారం కోసం ప్రధాన పోర్ట్, మార్గం మరియు ఫైల్ పేరు) పేర్కొనబడతాయి.
ప్రతి కేజ్ ఆబ్జెక్ట్ ఒకే సమయంలో బహుళ ఫైల్లతో పని చేయగలదు కాబట్టి, బఫరింగ్ కోసం షేర్డ్ మెమరీ స్పేస్ ఉపయోగించబడుతుంది. కాష్ పరిమాణం - కేజ్ ఆబ్జెక్ట్ను సృష్టించేటప్పుడు పేజీల సంఖ్య మరియు వాటి పరిమాణం డైనమిక్గా సెట్ చేయబడుతుంది. ఉదాహరణకు, 1 GB కాష్ అనేది ఒక్కొక్కటి 1000 MB యొక్క 1 పేజీలు లేదా ఒక్కొక్కటి 10 KB యొక్క 100 వేల పేజీలు లేదా ఒక్కొక్కటి 1 KB యొక్క 1 మిలియన్ పేజీలు. పేజీల పరిమాణం మరియు సంఖ్యను ఎంచుకోవడం అనేది ప్రతి అప్లికేషన్ కేస్ కోసం ఒక నిర్దిష్ట పని.
వేర్వేరు ఫైల్లలో సమాచారం ఎలా యాక్సెస్ చేయబడుతుందనే దానిపై ఆధారపడి వివిధ బఫర్ మెమరీ సెట్టింగ్లను నిర్వచించడానికి మీరు ఒకే సమయంలో బహుళ కేజ్ ఆబ్జెక్ట్లను ఉపయోగించవచ్చు. ప్రాథమికంగా, సరళమైన బఫరింగ్ అల్గోరిథం ఉపయోగించబడుతుంది: ఇచ్చిన మెమరీ మొత్తం అయిపోయిన తర్వాత, కొత్త పేజీలు కనీస సంఖ్యలో యాక్సెస్లతో పదవీ విరమణ సూత్రం ప్రకారం పాత వాటిని స్థానభ్రంశం చేస్తాయి. బఫరింగ్ అనేది అసమాన (గణాంక కోణంలో) భాగస్వామ్య యాక్సెస్ విషయంలో ప్రత్యేకంగా ప్రభావవంతంగా ఉంటుంది, మొదట, వివిధ ఫైల్లకు మరియు రెండవది, ప్రతి ఫైల్ యొక్క శకలాలు.
కేజ్ క్లాస్ I/Oకి డేటా చిరునామాల ద్వారా మాత్రమే (అరే యొక్క స్థానం మరియు పొడవును సూచిస్తుంది, ఫైల్ సిస్టమ్ ఆపరేషన్లను “భర్తీ చేయడం”) కాకుండా తక్కువ, “భౌతిక” స్థాయిలో - బఫర్ మెమరీలోని పేజీ సంఖ్యల ద్వారా కూడా మద్దతు ఇస్తుంది.
కేజ్ ఆబ్జెక్ట్లకు అసలైన ఫంక్షన్కు మద్దతు ఉంది "నిద్రాణస్థితి" (“నిద్ర”) - అవి క్లయింట్ వైపు ఉన్న లోకల్ డంప్ ఫైల్లోకి “కూలిపోవచ్చు” (ఉదాహరణకు, సర్వర్లతో కనెక్షన్ కోల్పోయినప్పుడు లేదా అప్లికేషన్ ఆపివేయబడినప్పుడు మొదలైనవి) మరియు త్వరగా పునరుద్ధరించబడతాయి. ఈ ఫైల్ (కమ్యూనికేషన్ పునఃప్రారంభించబడిన తర్వాత, మీరు అప్లికేషన్ను పునఃప్రారంభించినప్పుడు). ఇది తాత్కాలికంగా "ఆఫ్లైన్"కి వెళ్లిన తర్వాత క్లయింట్ ప్రోగ్రామ్ను సక్రియం చేసేటప్పుడు ట్రాఫిక్ను గణనీయంగా తగ్గించడం సాధ్యం చేస్తుంది, ఎందుకంటే తరచుగా ఉపయోగించే ఫైల్ శకలాలు ఇప్పటికే కాష్లో ఉంటాయి.
పంజరం దాదాపు 3600 లైన్ల కోడ్.
సర్వర్ నిర్మాణం యొక్క సూత్రాలు
కేజ్సర్వర్ ఫైల్ సర్వర్లను ఏకపక్ష సంఖ్యలో పోర్ట్లతో అమలు చేయవచ్చు, వాటిలో ఒకటి (“ప్రధాన”) అన్ని క్లయింట్ల అధికారీకరణ కోసం మాత్రమే ఉపయోగించబడుతుంది, మిగిలినవి డేటా మార్పిడి కోసం ఉపయోగించబడతాయి. కేజ్ సర్వర్ ప్రోగ్రామ్కు పైథాన్ మాత్రమే అవసరం. సమాంతరంగా, ఫైల్ సర్వర్తో ఉన్న కంప్యూటర్ ఏదైనా ఇతర పనిని చేయగలదు.
సర్వర్ ప్రారంభంలో రెండు ప్రధాన ప్రక్రియల సమాహారంగా ప్రారంభమవుతుంది:
- "కనెక్షన్లు" - క్లయింట్లతో కమ్యూనికేషన్ను ఏర్పాటు చేయడం మరియు సర్వర్ చొరవతో దానిని ముగించడం వంటి కార్యకలాపాలను నిర్వహించడానికి ఒక ప్రక్రియ;
- "ఆపరేషన్లు" – ఫైళ్లతో పని చేయడానికి క్లయింట్ల విధులను (ఆపరేషన్లు) నిర్వహించడానికి, అలాగే క్లయింట్ ఆదేశాల ఆధారంగా కమ్యూనికేషన్ సెషన్లను మూసివేయడానికి ఒక ప్రక్రియ.
రెండు ప్రక్రియలు సమకాలీకరించబడలేదు మరియు మల్టీప్రాసెస్ క్యూలు, ప్రాక్సీ ఆబ్జెక్ట్లు, లాక్లు మరియు సాకెట్ల ఆధారంగా సందేశాలను స్వీకరించడం మరియు పంపడం వంటి అంతులేని లూప్లుగా నిర్వహించబడతాయి.
కనెక్షన్ ప్రక్రియ ప్రతి క్లయింట్కు డేటాను స్వీకరించడానికి మరియు ప్రసారం చేయడానికి ఒక పోర్ట్ను కేటాయిస్తుంది. సర్వర్ ప్రారంభమైనప్పుడు పోర్ట్ల సంఖ్య సెట్ చేయబడుతుంది. పోర్ట్లు మరియు క్లయింట్ల మధ్య మ్యాపింగ్ ఇంటర్ప్రాసెస్-షేర్డ్ ప్రాక్సీ మెమరీలో నిల్వ చేయబడుతుంది.
కార్యకలాపాల ప్రక్రియ ఫైల్ వనరులను భాగస్వామ్యం చేయడానికి మద్దతు ఇస్తుంది, తద్వారా బహుళ విభిన్న క్లయింట్లు భాగస్వామ్యం చేయగలరు (పాక్షిక-సమాంతర, యాక్సెస్ లాక్ల ద్వారా నియంత్రించబడుతుంది) "మొదటి" క్లయింట్ ద్వారా మొదట తెరిచినప్పుడు ఇది అనుమతించబడితే, ఒక ఫైల్ నుండి డేటాను చదవండి.
సర్వర్లో ఫైల్లను సృష్టించడం/తొలగించడం/తెరవడం/మూసివేయడం కోసం ఆదేశాలను ప్రాసెస్ చేయడం “ఆపరేషన్స్” ప్రక్రియలోనే సర్వర్ OS యొక్క ఫైల్ సబ్సిస్టమ్ను ఉపయోగించి ఖచ్చితంగా జరుగుతుంది.
సాధారణంగా చదవడం/వ్రాయడాన్ని వేగవంతం చేయడానికి, ఈ కార్యకలాపాలు "ఆపరేషన్స్" ప్రక్రియ ద్వారా పుట్టుకొచ్చిన థ్రెడ్లలో నిర్వహించబడతాయి. థ్రెడ్ల సంఖ్య సాధారణంగా ఓపెన్ ఫైల్ల సంఖ్యకు సమానంగా ఉంటుంది. క్లయింట్ల నుండి రీడ్/రైట్ టాస్క్లు సాధారణ క్యూలో సమర్పించబడతాయి మరియు మొదటి ఉచిత థ్రెడ్ దాని తల నుండి పనిని తీసుకుంటుంది. సర్వర్ యొక్క RAMలో డేటా రీరైట్ కార్యకలాపాలను తొలగించడానికి ప్రత్యేక తర్కం మిమ్మల్ని అనుమతిస్తుంది.
కార్యకలాపాల ప్రక్రియ క్లయింట్ కార్యకలాపాన్ని పర్యవేక్షిస్తుంది మరియు వారి ఆదేశాలపై లేదా నిష్క్రియాత్మక సమయం ముగిసినప్పుడు వారికి సేవలను ఆపివేస్తుంది.
విశ్వసనీయతను నిర్ధారించడానికి, కేజ్సర్వర్ అన్ని లావాదేవీల లాగ్లను ఉంచుతుంది. ఒక సాధారణ లాగ్ ఫైల్లను సృష్టించడం/తెరువు/పేరు మార్చడం/తొలగించడం వంటి పనులతో క్లయింట్ల నుండి సందేశాల కాపీలను కలిగి ఉంటుంది. ప్రతి పని చేసే ఫైల్ కోసం ఒక ప్రత్యేక లాగ్ సృష్టించబడుతుంది, దీనిలో ఈ పని చేసే ఫైల్లో డేటాను చదవడం మరియు వ్రాయడం కోసం విధులతో సందేశాల కాపీలు రికార్డ్ చేయబడతాయి, అలాగే ఓవర్రైటింగ్ (వ్రాయడం) సమయంలో నాశనం చేయబడిన వ్రాతపూర్వక (కొత్త) డేటా మరియు డేటా శ్రేణుల శ్రేణులు రికార్డ్ చేయబడతాయి. పాత వాటి కంటే కొత్త డేటా "పైన"). ).
ఈ లాగ్లు బ్యాకప్లకు కొత్త మార్పులను పునరుద్ధరించే సామర్థ్యాన్ని అందిస్తాయి మరియు ప్రస్తుత కంటెంట్ను గతంలోని పాయింట్కి తిరిగి మార్చగలవు.
కేజ్సర్వర్ 3100 లైన్ల కోడ్.
కేజ్సర్వర్ ఫైల్ సర్వర్ ప్రోగ్రామ్ను ప్రారంభిస్తోంది
ప్రారంభించేటప్పుడు, డైలాగ్లో మీరు నిర్వచించాలి:
- అధికారం కోసం ప్రధాన పోర్ట్;
— అధీకృత క్లయింట్లతో లావాదేవీలను మార్పిడి చేసుకునేందుకు పోర్ట్ల సంఖ్య (1 లేదా అంతకంటే ఎక్కువ, ప్రధాన పోర్ట్ నంబర్ పక్కన ఉన్న నంబర్ల పూల్ నుండి మొదలవుతుంది).
కేజ్ క్లాస్ని ఉపయోగించడం
తరగతి పంజరం.కేజ్( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file="" )
ఫైల్ సర్వర్లతో పరస్పర చర్య చేసే మరియు బఫర్ మెమరీని కలిగి ఉండే ఆబ్జెక్ట్లు ఈ తరగతి నుండి సృష్టించబడతాయి.
పారామితులు
- పంజరం_పేరు(STR) - ఆబ్జెక్ట్ యొక్క షరతులతో కూడిన పేరు, ఇది సర్వర్ వైపు క్లయింట్లను గుర్తించడానికి ఉపయోగించబడుతుంది
- పేజీల పరిమాణం(పూర్ణాంకానికి) — బఫర్ మెమరీ యొక్క ఒక పేజీ పరిమాణం (బైట్లలో)
- సంఖ్యలు(పూర్ణాంకానికి) — బఫర్ మెమరీ పేజీల సంఖ్య
- maxstrlen(పూర్ణాంకానికి) - రైట్ మరియు రీడ్ ఆపరేషన్లలో బైట్ స్ట్రింగ్ యొక్క గరిష్ట పొడవు
- సర్వర్_ఐపి(నిఘం) - ఉపయోగించిన సర్వర్ల చిరునామాలతో కూడిన నిఘంటువు, ఇక్కడ కీ సర్వర్ యొక్క షరతులతో కూడిన పేరు (అప్లికేషన్ లోపల సర్వర్ ఐడి), మరియు విలువ చిరునామాతో కూడిన స్ట్రింగ్: “ip చిరునామా: పోర్ట్” లేదా “DNS: పోర్ట్" (పేర్లు మరియు నిజమైన చిరునామాల పోలిక తాత్కాలికం, అది మారవచ్చు)
- వేచి(పూర్ణాంకానికి) — పోర్ట్లను స్వీకరించేటప్పుడు సర్వర్ నుండి ప్రతిస్పందన కోసం వేచి ఉండే సమయం (సెకన్లలో)
- మేలుకొని(బూలియన్) — ఆబ్జెక్ట్ ఎలా సృష్టించబడుతుందో జెండా (తప్పుడు - ఒక కొత్త వస్తువు సృష్టించబడితే, ట్రూ - ఒక వస్తువు మునుపు “కుప్పకూలిన” దాని నుండి సృష్టించబడితే - “నిద్రస్థితి” ఆపరేషన్ని ఉపయోగించి, డిఫాల్ట్గా తప్పు)
- కాష్_ఫైల్(STR) - హైబర్నేషన్ కోసం ఫైల్ పేరు
పద్ధతులు
పంజరం.ఫైల్_సృష్టించు( సర్వర్, మార్గం ) - కొత్త ఫైల్ను సృష్టించండి
పంజరం.ఫైల్_పేరుమార్చు( సర్వర్, మార్గం, కొత్త_పేరు ) - ఫైల్ పేరు మార్చండి
పంజరం.ఫైల్_తొలగించు( సర్వర్, మార్గం) - ఫైల్ను తొలగించండి
పంజరం.ఓపెన్( సర్వర్, మార్గం, మోడ్ ) - ఫైలును తెరవండి
రిటర్న్స్ fఛానల్ ఛానెల్ నంబర్. పరామితి వ్యతిరేకంగా - ఇది ఫైల్ ఓపెనింగ్ మోడ్: "wm" - ప్రత్యేకమైన (చదవడానికి/వ్రాయడానికి), "rs" - చదవడానికి మాత్రమే, మరియు ఇతర క్లయింట్ల ద్వారా చదవడానికి మాత్రమే భాగస్వామ్యం చేయబడింది, "ws" - చదవడానికి/వ్రాయడానికి మరియు చదవడానికి మాత్రమే భాగస్వామ్యం చేయబడింది ఇతర క్లయింట్లు.
పంజరం.దగ్గరి (fఛానల్) - ఫైల్ను మూసివేయండి
పంజరం.వ్రాయడానికి (fchannel, ప్రారంభం, డేటా ) – ఫైల్కి బైట్ స్ట్రింగ్ను వ్రాయండి
పంజరం.చదవండి (fchannel, ప్రారంభం, len_data ) – ఫైల్ నుండి బైట్ స్ట్రింగ్ను చదవండి
పంజరం.పుట్_పేజీలు ( fఛానల్ ) - బఫర్ నుండి సర్వర్కు సవరించబడిన పేర్కొన్న ఛానెల్లోని అన్ని పేజీలను "పుష్" చేస్తుంది. ఛానెల్లోని అన్ని కార్యకలాపాలు సర్వర్లోని ఫైల్లో భౌతికంగా సేవ్ చేయబడతాయని మీరు నిర్ధారించుకోవాల్సిన అవసరం వచ్చినప్పుడు అల్గారిథమ్లోని ఆ పాయింట్ల వద్ద ఇది ఉపయోగించబడుతుంది.
పంజరం.పుష్_అన్ని () - సవరించబడిన కేజ్ క్లాస్ యొక్క ఉదాహరణ కోసం అన్ని ఛానెల్ల యొక్క అన్ని పేజీలను బఫర్ నుండి సర్వర్కు "పుష్" చేస్తుంది. అన్ని ఛానెల్లలోని అన్ని కార్యకలాపాలు సర్వర్లో సేవ్ చేయబడతాయని మీరు నిర్ధారించుకోవాల్సిన అవసరం వచ్చినప్పుడు ఉపయోగించబడుతుంది.
మూలం: www.habr.com