క్లోస్టర్ → సాధారణ OTP క్లస్టర్ నిర్వహణ

దాదాపు ప్రతి విజయవంతమైన వ్యాపార అనువర్తనం త్వరగా లేదా తరువాత క్షితిజ సమాంతర స్కేలింగ్ అవసరమయ్యే దశలోకి ప్రవేశిస్తుంది. అనేక సందర్భాల్లో, మీరు కొత్త ఉదాహరణను ప్రారంభించవచ్చు మరియు లోడ్ సగటును తగ్గించవచ్చు. కానీ వివిధ నోడ్‌లు ఒకదానికొకటి తెలుసుకునేలా మరియు పనిభారాన్ని జాగ్రత్తగా పంపిణీ చేసేలా చూసుకోవాల్సిన అవసరం ఉన్న తక్కువ పనికిమాలిన సందర్భాలు కూడా ఉన్నాయి.

క్లోస్టర్ → సాధారణ OTP క్లస్టర్ నిర్వహణ

ఇది చాలా అదృష్టంగా మారింది ఎర్లాంగ్, మేము దాని ఆహ్లాదకరమైన సింటాక్స్ మరియు దాని చుట్టూ హైప్ కోసం ఎంచుకున్నాము, ఇది ఫస్ట్-క్లాస్ కలిగి ఉంది పంపిణీ వ్యవస్థలకు మద్దతు. సిద్ధాంతంలో, ఇది పూర్తిగా అల్పమైనదిగా అనిపిస్తుంది:

వివిధ నోడ్‌లలోని ప్రక్రియల మధ్య, అలాగే లింక్‌లు మరియు మానిటర్‌ల మధ్య సందేశం పారదర్శకంగా ఉంటుంది […]

ఆచరణలో, ప్రతిదీ కొంచెం క్లిష్టంగా ఉంటుంది. పంపిణీ చేయబడింది ఎర్లాంగ్ "కంటైనర్" అంటే షిప్పింగ్ కోసం ఒక పెద్ద ఇనుప పెట్టె అని అర్థం, మరియు "డాకర్" అనేది లాంగ్‌షోర్‌మాన్‌కి పర్యాయపదంగా ఉన్నప్పుడు అభివృద్ధి చేయబడింది. IN IP4 చాలా ఖాళీగా లేని చిరునామాలు ఉన్నాయి, సాధారణంగా ఎలుకలు కేబుల్ ద్వారా నమలడం వల్ల నెట్‌వర్క్ విరామాలు ఏర్పడతాయి మరియు ఉత్పత్తి వ్యవస్థ యొక్క సగటు సమయ సమయాన్ని దశాబ్దాలలో కొలుస్తారు.

ఇప్పుడు మనమందరం నమ్మశక్యంకాని విధంగా స్వయం సమృద్ధిగా ఉన్నాము, ప్యాక్ చేయబడి, పంపిణీ చేయబడినాము ఎర్లాంగ్ గొప్ప యాదృచ్ఛికత సూత్రంపై డైనమిక్ IP చిరునామాలు అందజేసే వాతావరణంలో, మరియు షెడ్యూలర్ యొక్క ఎడమ మడమ యొక్క ఇష్టానుసారం నోడ్‌లు కనిపించవచ్చు మరియు అదృశ్యమవుతాయి. పంపిణీ చేయబడిన ప్రతి ప్రాజెక్ట్‌లో బాయిలర్‌ప్లేట్ కోడ్ పైల్స్‌ను నివారించడానికి ఎర్లాంగ్, ప్రతికూల వాతావరణాన్ని ఎదుర్కోవడానికి, సహాయం అవసరం.

వ్యాఖ్య: ఉందని నాకు తెలుసు libcluster. ఇది నిజంగా బాగుంది, ఇది వెయ్యికి పైగా నక్షత్రాలను కలిగి ఉంది, రచయిత సంఘంలో ప్రసిద్ధి చెందాడు మరియు అన్నీ. క్లస్టర్‌ను సృష్టించడం మరియు నిర్వహించడం కోసం ఈ ప్యాకేజీ అందించే పద్ధతులు మీకు సరిపోతే, నేను మీ కోసం సంతోషిస్తున్నాను. దురదృష్టవశాత్తు, నాకు ఇంకా చాలా అవసరం. నేను సెటప్‌ను వివరంగా నియంత్రించాలనుకుంటున్నాను మరియు క్లస్టర్ పునర్వ్యవస్థీకరణ థియేటర్‌లో బయటి ప్రేక్షకుడిగా ఉండకూడదు.

అవసరాలు

నాకు వ్యక్తిగతంగా అవసరమైనది క్లస్టర్ నిర్వహణను చేపట్టే లైబ్రరీ మరియు ఈ క్రింది లక్షణాలను కలిగి ఉంటుంది:

  • హార్డ్-కోడెడ్ నోడ్‌ల జాబితా మరియు సేవల ద్వారా డైనమిక్ డిస్కవరీ రెండింటితో పారదర్శక పని ఎర్లాంగ్;
  • ప్రతి టోపోలాజీ మార్పు కోసం పూర్తిగా ఫంక్షనల్ కాల్‌బ్యాక్ (అక్కడ నోడ్, ఇక్కడ నోడ్, నెట్‌వర్క్ అస్థిరత, విభజనలు);
  • లాంగ్ మరియు షార్ట్ పేర్లతో క్లస్టర్‌ను లాంచ్ చేయడానికి పారదర్శక ఇంటర్‌ఫేస్ :nonode@nohost;
  • ఇన్‌ఫ్రాస్ట్రక్చర్ కోడ్ రాయాల్సిన అవసరం లేకుండానే డాకర్ సపోర్ట్ అవుట్ ఆఫ్ ది బాక్స్.

రెండోది అంటే నేను అప్లికేషన్‌ను స్థానికంగా పరీక్షించిన తర్వాత :nonode@nohost, లేదా ఉపయోగించి కృత్రిమంగా పంపిణీ చేయబడిన వాతావరణంలో test_cluster_task, నేను పరిగెత్తాలనుకుంటున్నాను docker-compose up --scale my_app=3 మరియు అది ఎలాంటి కోడ్ మార్పులు లేకుండా డాకర్‌లో మూడు సందర్భాలను ఎలా అమలు చేస్తుందో చూడండి. వంటి డిపెండెంట్ అప్లికేషన్లు కూడా కావాలి mnesia - టోపోలాజీ మారినప్పుడు, వారు అప్లికేషన్ నుండి ఎటువంటి అదనపు కిక్ లేకుండానే ప్రత్యక్షంగా క్లస్టర్‌ను తెర వెనుక పునర్నిర్మిస్తారు.

వసారా క్లస్టర్‌కు మద్దతు ఇవ్వడం నుండి కాఫీ తయారీ వరకు ప్రతిదానికీ సామర్థ్యం ఉన్న లైబ్రరీగా ఉద్దేశించబడలేదు. ఇది సాధ్యమయ్యే అన్ని కేసులను కవర్ చేయడానికి ఉద్దేశించిన వెండి బుల్లెట్ కాదు, లేదా సిద్ధాంతకర్తల కోణంలో విద్యాపరంగా పూర్తి పరిష్కారం CS ఈ పదంలో ఉంచారు. ఈ లైబ్రరీ చాలా స్పష్టమైన ప్రయోజనాన్ని అందించడానికి రూపొందించబడింది, కానీ చాలా పెద్దది కాదు. స్థానిక అభివృద్ధి వాతావరణం మరియు శత్రు కంటైనర్లతో నిండిన పంపిణీ చేయబడిన సాగే వాతావరణం మధ్య పూర్తి పారదర్శకతను అందించడం ఈ లక్ష్యం.

ఎంచుకున్న విధానం

వసారా ఒక అప్లికేషన్ వలె అమలు చేయడానికి ఉద్దేశించబడింది, అయితే అధునాతన వినియోగదారులు నేరుగా అమలు చేయడం ద్వారా క్లస్టర్ యొక్క అసెంబ్లీ మరియు నిర్వహణతో మాన్యువల్‌గా పని చేయవచ్చు Cloister.Manager లక్ష్యం అప్లికేషన్ యొక్క సూపర్‌వైజర్ చెట్టులో.

అప్లికేషన్‌గా అమలు చేసినప్పుడు, లైబ్రరీ ఆధారపడి ఉంటుంది config, ఇది క్రింది ప్రాథమిక విలువలను చదువుతుంది:

config :cloister,
  otp_app: :my_app,
  sentry: :"cloister.local", # or ~w|n1@foo n2@bar|a
  consensus: 3,              # number of nodes to consider
                             #    the cluster is up
  listener: MyApp.Listener   # listener to be called when
                             #    the ring has changed

పై పారామితులు అక్షరాలా ఈ క్రింది వాటిని సూచిస్తాయి: వసారా OTP అప్లికేషన్ కోసం ఉపయోగించబడుతుంది :my_app, ఉపయోగాలు ఎర్లాంగ్ సర్వీస్ డిస్కవరీ నోడ్‌లను కనెక్ట్ చేయడానికి, కనీసం మూడు, మరియు MyApp.Listener మాడ్యూల్ (అమలు చేస్తోంది @behaviour Cloister.Listener) టోపోలాజీ మార్పుల గురించి నోటిఫికేషన్‌లను స్వీకరించడానికి కాన్ఫిగర్ చేయబడింది. పూర్తి కాన్ఫిగరేషన్ యొక్క వివరణాత్మక వివరణను చూడవచ్చు డాక్యుమెంటేషన్.

ఈ కాన్ఫిగరేషన్‌తో, అప్లికేషన్ వసారా ఉంటుంది దశల్లో ప్రారంభించండి, ఏకాభిప్రాయం వచ్చే వరకు ప్రధాన అప్లికేషన్‌ను ప్రారంభించే ప్రక్రియను ఆలస్యం చేయడం (పై ఉదాహరణలో వలె మూడు నోడ్‌లు కనెక్ట్ చేయబడ్డాయి మరియు కనెక్ట్ చేయబడ్డాయి.) ఇది ప్రారంభమైనప్పుడు, క్లస్టర్ ఇప్పటికే అందుబాటులో ఉందని భావించడానికి ఇది ప్రధాన అనువర్తనానికి అవకాశం ఇస్తుంది. టోపోలాజీ మారినప్పుడల్లా (వాటిలో చాలా ఉన్నాయి, ఎందుకంటే నోడ్‌లు పూర్తిగా సమకాలీకరించబడవు), హ్యాండ్లర్‌ని పిలుస్తారు MyApp.Listener.on_state_change/2. మనం స్టేటస్ మెసేజ్‌ని స్వీకరించినప్పుడు చాలా సమయం మేము ఒక చర్యను చేస్తాము %Cloister.Monitor{status: :up}, అంటే: "హలో, క్లస్టర్ అసెంబుల్ చేయబడింది."

చాలా సందర్భాలలో, సంస్థాపన consensus: 3 సరైనది ఎందుకంటే మేము మరిన్ని నోడ్‌లను కనెక్ట్ చేయాలని ఆశించినప్పటికీ, కాల్‌బ్యాక్ పూర్తి అవుతుంది status: :rehashingstatus: :up ఏదైనా కొత్తగా జోడించిన లేదా తీసివేయబడిన నోడ్‌లో.

డెవలప్‌మెంట్ మోడ్‌లో ప్రారంభించినప్పుడు, మీరు సెట్ చేయాలి consensus: 1 и వసారా అతను చూసినప్పుడు క్లస్టర్ అసెంబ్లీ కోసం వేచి ఉండడాన్ని సంతోషంగా దాటవేస్తాడు :nonode@nohostలేదా :node@hostలేదా :[email protected] - నోడ్ ఎలా కాన్ఫిగర్ చేయబడిందనే దానిపై ఆధారపడి (:none | :shortnames | :longnames).

డిస్ట్రిబ్యూటెడ్ అప్లికేషన్ మేనేజ్‌మెంట్

వాక్యూమ్‌లో లేని పంపిణీ చేయబడిన అప్లికేషన్‌లు సాధారణంగా పంపిణీ చేయబడిన డిపెండెన్సీలను కలిగి ఉంటాయి mnesia. అదే కాల్‌బ్యాక్ నుండి వారి రీకాన్ఫిగరేషన్‌ను నిర్వహించడం మాకు సులభం on_state_change/2. ఇక్కడ, ఉదాహరణకు, రీకాన్ఫిగర్ ఎలా చేయాలో వివరణాత్మక వివరణ mnesia లోపలికి వెళ్లేటప్పుడు డాక్యుమెంటేషన్ వసారా.

ఉపయోగించడం యొక్క ప్రధాన ప్రయోజనం వసారా టోపోలాజీ మార్పు తర్వాత క్లస్టర్‌ను పునర్నిర్మించడానికి అవసరమైన అన్ని కార్యకలాపాలను ఇది నిర్వహిస్తుంది హుడ్ కింద. అప్లికేషన్ కేవలం IP చిరునామాలు మరియు నోడ్ పేర్లు ముందుగానే తెలిసినా లేదా అవి డైనమిక్‌గా కేటాయించబడినా/మార్చబడినా అనే దానితో సంబంధం లేకుండా, అన్ని నోడ్‌లు అనుసంధానించబడిన ఇప్పటికే సిద్ధం చేయబడిన పంపిణీ వాతావరణంలో నడుస్తుంది. దీనికి ఖచ్చితంగా ప్రత్యేక డాకర్ కాన్ఫిగరేషన్ సెట్టింగ్‌లు అవసరం లేదు మరియు అప్లికేషన్ డెవలపర్ దృక్కోణంలో, పంపిణీ చేయబడిన వాతావరణంలో అమలు చేయడం లేదా స్థానికంగా అమలు చేయడం మధ్య తేడా లేదు. :nonode@nohost. మీరు దీని గురించి మరింత చదవవచ్చు డాక్యుమెంటేషన్.

అనుకూల అమలు ద్వారా టోపోలాజీ మార్పుల సంక్లిష్ట నిర్వహణ సాధ్యమే అయినప్పటికీ MyApp.Listener, ఈ లైబ్రరీ పరిమితులు మరియు కాన్ఫిగరేషన్ పక్షపాతాలు అమలుకు మూలస్తంభాలుగా నిరూపించబడే అంచు సందర్భాలు ఎల్లప్పుడూ ఉండవచ్చు. ఫర్వాలేదు, పైవాటిని తీసుకోండి libcluster, ఇది మరింత సాధారణ-ప్రయోజనం, లేదా తక్కువ-స్థాయి క్లస్టర్‌ను మీరే నిర్వహించండి. ఈ కోడ్ లైబ్రరీ యొక్క లక్ష్యం సాధ్యమయ్యే ప్రతి దృశ్యాన్ని కవర్ చేయడం కాదు, కానీ అనవసరమైన నొప్పి మరియు గజిబిజిగా కాపీ-పేస్ట్ లేకుండా అత్యంత సాధారణ దృశ్యాన్ని ఉపయోగించడం.

గమనిక: అసలైన ఈ సమయంలో “హ్యాపీ క్లస్టరింగ్!” అనే పదబంధం ఉంది మరియు నేను అనువదించే యాండెక్స్ (నేను నిఘంటువుల ద్వారా వెళ్లవలసిన అవసరం లేదు), నాకు “హ్యాపీ క్లస్టరింగ్!” ఎంపికను అందించింది. ముఖ్యంగా ప్రస్తుత భౌగోళిక రాజకీయ పరిస్థితుల నేపథ్యంలో మెరుగైన అనువాదాన్ని ఊహించడం అసాధ్యం.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి