సెలవులు ముగిశాయి మరియు మేము ఇస్టియో సర్వీస్ మెష్ సిరీస్లో మా రెండవ పోస్ట్తో తిరిగి వచ్చాము.
నేటి అంశం సర్క్యూట్ బ్రేకర్, ఇది రష్యన్ ఎలక్ట్రికల్ ఇంజనీరింగ్లోకి అనువదించబడింది అంటే "సర్క్యూట్ బ్రేకర్", సాధారణ పరిభాషలో - "సర్క్యూట్ బ్రేకర్". ఇస్టియోలో మాత్రమే ఈ యంత్రం షార్ట్డ్ లేదా ఓవర్లోడ్ సర్క్యూట్ను డిస్కనెక్ట్ చేయదు, కానీ తప్పు కంటైనర్లను.
ఇది ఎలా ఆదర్శంగా పని చేయాలి
మైక్రోసర్వీస్లను కుబెర్నెటీస్ నిర్వహించినప్పుడు, ఉదాహరణకు ఓపెన్షిఫ్ట్ ప్లాట్ఫారమ్లో, అవి లోడ్పై ఆధారపడి స్వయంచాలకంగా పైకి క్రిందికి స్కేల్ అవుతాయి. మైక్రోసర్వీస్లు పాడ్లలో రన్ అవుతున్నందున, ఒక ఎండ్పాయింట్లో కంటెయినరైజ్డ్ మైక్రోసర్వీస్కు అనేక ఉదాహరణలు ఉండవచ్చు మరియు కుబెర్నెట్స్ అభ్యర్థనలను రూట్ చేస్తుంది మరియు వాటి మధ్య బ్యాలెన్స్ను లోడ్ చేస్తుంది. మరియు - ఆదర్శంగా - అన్ని ఈ ఖచ్చితంగా పని చేయాలి.
మైక్రోసర్వీస్లు చిన్నవి మరియు అశాశ్వతమైనవి అని మేము గుర్తుంచుకుంటాము. అశాశ్వతత, అంటే ఇక్కడ కనిపించే మరియు అదృశ్యమయ్యే సౌలభ్యం, తరచుగా తక్కువగా అంచనా వేయబడుతుంది. పాడ్లో మైక్రోసర్వీస్ యొక్క మరొక ఉదాహరణ యొక్క జననం మరియు మరణం చాలా ఆశించిన విషయాలు, OpenShift మరియు Kubernetes దీన్ని బాగా నిర్వహిస్తాయి మరియు ప్రతిదీ గొప్పగా పని చేస్తుంది - కానీ మళ్ళీ సిద్ధాంతంలో.
ఇది నిజంగా ఎలా పనిచేస్తుంది
ఇప్పుడు మైక్రోసర్వీస్ యొక్క నిర్దిష్ట ఉదాహరణ, అంటే, ఒక కంటైనర్, నిరుపయోగంగా మారిందని ఊహించండి: అది ప్రతిస్పందించదు (లోపం 503), లేదా, ఏది మరింత అసహ్యకరమైనది, అది ప్రతిస్పందిస్తుంది, కానీ చాలా నెమ్మదిగా ఉంటుంది. మరో మాటలో చెప్పాలంటే, ఇది గ్లిచిగా మారుతుంది లేదా అభ్యర్థనలకు ప్రతిస్పందించదు, అయితే ఇది పూల్ నుండి స్వయంచాలకంగా తీసివేయబడదు. ఈ సందర్భంలో ఏమి చేయాలి? మళ్లీ ప్రయత్నించాలా? నేను దానిని రూటింగ్ పథకం నుండి తీసివేయాలా? మరియు "చాలా నెమ్మదిగా" అంటే ఏమిటి - అది ఎన్ని సంఖ్యలో ఉంది మరియు వాటిని ఎవరు నిర్ణయిస్తారు? బహుశా కొంత విరామం ఇచ్చి, తర్వాత మళ్లీ ప్రయత్నించవచ్చా? అలా అయితే, ఎంత తర్వాత?
ఇస్టియోలో పూల్ ఎజెక్షన్ అంటే ఏమిటి
మరియు ఇక్కడ ఇస్టియో తన సర్క్యూట్ బ్రేకర్ ప్రొటెక్షన్ మెషీన్లతో రక్షణకు వస్తుంది, ఇది రౌటింగ్ మరియు లోడ్ బ్యాలెన్సింగ్ రిసోర్స్ పూల్ నుండి లోపభూయిష్టమైన కంటైనర్లను తాత్కాలికంగా తొలగిస్తుంది, పూల్ ఎజెక్షన్ విధానాన్ని అమలు చేస్తుంది.
అవుట్లియర్ డిటెక్షన్ స్ట్రాటజీని ఉపయోగించి, ఇస్టియో లైన్లో లేని కర్వ్ పాడ్లను గుర్తిస్తుంది మరియు వాటిని రిసోర్స్ పూల్ నుండి నిర్దిష్ట సమయం వరకు తొలగిస్తుంది, దీనిని స్లీప్ విండో అని పిలుస్తారు.
ఓపెన్షిఫ్ట్ ప్లాట్ఫారమ్లోని కుబెర్నెట్స్లో ఇది ఎలా పని చేస్తుందో చూపించడానికి, రిపోజిటరీలోని ఉదాహరణ నుండి సాధారణంగా పనిచేసే మైక్రోసర్వీస్ల స్క్రీన్షాట్తో ప్రారంభిద్దాం.
క్రాష్ కోసం సిద్ధమవుతోంది
పూల్ ఎజెక్షన్ చేయడానికి ముందు, మీరు ఇస్టియో రూటింగ్ నియమాన్ని సృష్టించాలి. మేము 50/50 నిష్పత్తిలో పాడ్ల మధ్య అభ్యర్థనలను పంపిణీ చేయాలనుకుంటున్నాము. అదనంగా, మేము ఈ విధంగా v2 కంటైనర్ల సంఖ్యను ఒకటి నుండి రెండుకి పెంచుతాము:
oc scale deployment recommendation-v2 --replicas=2 -n tutorial
ఇప్పుడు మేము రౌటింగ్ నియమాన్ని సెట్ చేసాము, తద్వారా ట్రాఫిక్ పాడ్ల మధ్య 50/50 నిష్పత్తిలో పంపిణీ చేయబడుతుంది.
ఈ నియమం యొక్క ఫలితం ఎలా ఉంటుందో ఇక్కడ ఉంది:
ఈ స్క్రీన్ 50/50 కాదు, 14:9 అనే వాస్తవంతో మీరు తప్పును కనుగొనవచ్చు, కానీ కాలక్రమేణా పరిస్థితి మెరుగుపడుతుంది.
ఒక లోపం మేకింగ్
ఇప్పుడు రెండు v2 కంటైనర్లలో ఒకదానిని ఆపివేద్దాం, తద్వారా మనకు ఒక ఆరోగ్యకరమైన v1 కంటైనర్, ఒక ఆరోగ్యకరమైన v2 కంటైనర్ మరియు ఒక తప్పు v2 కంటైనర్ ఉన్నాయి:
లోపం ఫిక్సింగ్
కాబట్టి, మాకు ఒక తప్పు కంటైనర్ ఉంది మరియు ఇది పూల్ ఎజెక్షన్ కోసం సమయం. చాలా సులభమైన కాన్ఫిగరేషన్ని ఉపయోగించి, మేము ఈ విఫలమైన కంటైనర్ను ఏదైనా రూటింగ్ స్కీమ్ల నుండి 15 సెకన్ల పాటు మినహాయిస్తాము, ఇది ఆరోగ్యకరమైన స్థితికి తిరిగి వస్తుంది (పునఃప్రారంభించండి లేదా పనితీరును పునరుద్ధరించండి). ఈ కాన్ఫిగర్ ఎలా కనిపిస్తుంది మరియు దాని పని ఫలితాలు:
మీరు చూడగలిగినట్లుగా, విఫలమైన v2 కంటైనర్ పూల్ నుండి తీసివేయబడినందున అది రూటింగ్ అభ్యర్థనల కోసం ఉపయోగించబడదు. కానీ 15 సెకన్ల తర్వాత అది స్వయంచాలకంగా పూల్కి తిరిగి వస్తుంది. వాస్తవానికి, పూల్ ఎజెక్షన్ ఎలా పనిచేస్తుందో మేము ఇప్పుడే చూపించాము.
వాస్తు నిర్మాణాన్ని ప్రారంభిద్దాం
పూల్ ఎజెక్షన్, Istio యొక్క పర్యవేక్షణ సామర్థ్యాలతో కలిపి, డౌన్టైమ్ మరియు వైఫల్యాలను తగ్గించడానికి, తొలగించకుంటే, లోపభూయిష్ట కంటైనర్లను స్వయంచాలకంగా భర్తీ చేయడానికి ఒక ఫ్రేమ్వర్క్ను రూపొందించడాన్ని ప్రారంభించడానికి మిమ్మల్ని అనుమతిస్తుంది.
NASAకి ఒక పెద్ద నినాదం ఉంది - వైఫల్యం ఒక ఎంపిక కాదు, దీని రచయిత విమాన డైరెక్టర్గా పరిగణించబడతారు
ఇస్టియో, మేము పైన వ్రాసినట్లుగా, సర్క్యూట్ బ్రేకర్ల భావనను అమలు చేస్తుంది, ఇది భౌతిక ప్రపంచంలో బాగా నిరూపించబడింది. ఎలక్ట్రికల్ సర్క్యూట్ బ్రేకర్ సర్క్యూట్ యొక్క సమస్య విభాగాన్ని ఆఫ్ చేసినట్లే, ఇస్టియో సాఫ్ట్వేర్ సర్క్యూట్ బ్రేకర్ ఎండ్ పాయింట్లో ఏదైనా తప్పుగా ఉన్నప్పుడు అభ్యర్థనల స్ట్రీమ్ మరియు సమస్య కంటైనర్ మధ్య కనెక్షన్ను తెరుస్తుంది, ఉదాహరణకు, సర్వర్ క్రాష్ అయినప్పుడు లేదా ప్రారంభించినప్పుడు వేగం తగ్గించండి.
అంతేకాకుండా, రెండవ సందర్భంలో మరిన్ని సమస్యలు మాత్రమే ఉన్నాయి, ఎందుకంటే ఒక కంటైనర్ యొక్క బ్రేక్లు దానిని యాక్సెస్ చేసే సేవలలో జాప్యం యొక్క క్యాస్కేడ్ను కలిగి ఉండటమే కాకుండా, మొత్తంగా సిస్టమ్ పనితీరును తగ్గిస్తాయి, కానీ పునరావృతం చేస్తాయి. ఇప్పటికే నెమ్మదిగా నడుస్తున్న సేవకు అభ్యర్థనలు, ఇది పరిస్థితిని మరింత తీవ్రతరం చేస్తుంది .
సిద్ధాంతంలో సర్క్యూట్ బ్రేకర్
సర్క్యూట్ బ్రేకర్ అనేది ఎండ్ పాయింట్కి అభ్యర్థనల ప్రవాహాన్ని నియంత్రించే ప్రాక్సీ. ఈ పాయింట్ పని చేయడం ఆపివేసినప్పుడు లేదా పేర్కొన్న సెట్టింగ్ల ఆధారంగా, వేగాన్ని తగ్గించడం ప్రారంభించినప్పుడు, ప్రాక్సీ కంటైనర్తో కనెక్షన్ను విచ్ఛిన్నం చేస్తుంది. లోడ్ బ్యాలెన్సింగ్ కారణంగా ట్రాఫిక్ తర్వాత ఇతర కంటైనర్లకు దారి మళ్లించబడుతుంది. ఇచ్చిన స్లీప్ విండో కోసం కనెక్షన్ తెరిచి ఉంటుంది, రెండు నిమిషాలు చెప్పండి, ఆపై సగం ఓపెన్గా పరిగణించబడుతుంది. తదుపరి అభ్యర్థనను పంపే ప్రయత్నం కనెక్షన్ యొక్క తదుపరి స్థితిని నిర్ణయిస్తుంది. సేవతో ప్రతిదీ సరిగ్గా ఉంటే, కనెక్షన్ పని స్థితికి తిరిగి వస్తుంది మరియు మళ్లీ మూసివేయబడుతుంది. సేవలో ఇంకా ఏదైనా తప్పు ఉంటే, కనెక్షన్ డిస్కనెక్ట్ చేయబడుతుంది మరియు స్లీప్ విండో మళ్లీ ప్రారంభించబడుతుంది. సరళీకృత సర్క్యూట్ బ్రేకర్ స్థితి రేఖాచిత్రం ఎలా ఉంటుందో ఇక్కడ ఉంది:
ఇదంతా సిస్టమ్ ఆర్కిటెక్చర్ స్థాయిలోనే జరుగుతుందని ఇక్కడ గమనించాలి. కాబట్టి ఏదో ఒక సమయంలో మీరు సర్క్యూట్ బ్రేకర్తో పని చేయడానికి మీ అప్లికేషన్లను బోధించవలసి ఉంటుంది, ప్రతిస్పందనగా డిఫాల్ట్ విలువను అందించడం లేదా సాధ్యమైతే, సేవ యొక్క ఉనికిని విస్మరించడం వంటివి. దీని కోసం బల్క్హెడ్ నమూనా ఉపయోగించబడుతుంది, అయితే ఇది ఈ కథనం యొక్క పరిధికి మించినది.
ఆచరణలో సర్క్యూట్ బ్రేకర్
ఉదాహరణకు, మేము OpenShiftలో మా సిఫార్సు మైక్రోసర్వీస్ యొక్క రెండు వెర్షన్లను అమలు చేస్తాము. వెర్షన్ 1 బాగా పని చేస్తుంది, కానీ v2లో మేము సర్వర్లో స్లోడౌన్లను అనుకరించడానికి ఆలస్యంగా రూపొందిస్తాము. ఫలితాలను వీక్షించడానికి, సాధనాన్ని ఉపయోగించండి
siege -r 2 -c 20 -v customer-tutorial.$(minishift ip).nip.io
ప్రతిదీ పని చేస్తుంది, కానీ ఏ ధర వద్ద? మొదటి చూపులో, మాకు 100% లభ్యత ఉంది, కానీ నిశితంగా పరిశీలించండి - గరిష్ట లావాదేవీ వ్యవధి 12 సెకన్లు. ఇది స్పష్టంగా ఒక అడ్డంకి మరియు విస్తరించాల్సిన అవసరం ఉంది.
దీన్ని చేయడానికి, కంటైనర్లను నెమ్మది చేయడానికి కాల్లను తొలగించడానికి మేము Istioని ఉపయోగిస్తాము. సర్క్యూట్ బ్రేకర్ని ఉపయోగించి సంబంధిత కాన్ఫిగర్ ఇలా కనిపిస్తుంది:
httpMaxRequestsPerConnection పరామితితో ఉన్న చివరి పంక్తి, ఇప్పటికే ఉన్న దానితో పాటు మరొక - రెండవ - కనెక్షన్ని సృష్టించడానికి ప్రయత్నిస్తున్నప్పుడు దానితో కనెక్షన్ డిస్కనెక్ట్ చేయబడాలని సూచిస్తుంది. మా కంటైనర్ నెమ్మదిగా సేవను అనుకరిస్తుంది కాబట్టి, అటువంటి పరిస్థితులు క్రమానుగతంగా తలెత్తుతాయి, ఆపై Istio 503 లోపాన్ని తిరిగి ఇస్తుంది, కానీ ముట్టడి చూపేది ఇదే:
సరే, మా వద్ద సర్క్యూట్ బ్రేకర్ ఉంది, తర్వాత ఏమిటి?
కాబట్టి, మేము సేవల యొక్క సోర్స్ కోడ్ను తాకకుండా ఆటోమేటిక్ షట్డౌన్ను అమలు చేసాము. పైన వివరించిన సర్క్యూట్ బ్రేకర్ మరియు పూల్ ఎజెక్షన్ విధానాన్ని ఉపయోగించి, మేము రిసోర్స్ పూల్ నుండి బ్రేక్ కంటైనర్లను సాధారణ స్థితికి వచ్చే వరకు తీసివేసి, పేర్కొన్న ఫ్రీక్వెన్సీలో వాటి స్థితిని తనిఖీ చేయవచ్చు - మా ఉదాహరణలో, ఇది రెండు నిమిషాలు (స్లీప్విండో పరామితి).
503 ఎర్రర్కు ప్రతిస్పందించే అప్లికేషన్ సామర్థ్యం ఇప్పటికీ సోర్స్ కోడ్ స్థాయిలో సెట్ చేయబడిందని గమనించండి. పరిస్థితిని బట్టి సర్క్యూట్ బ్రేకర్ని ఉపయోగించడానికి అనేక వ్యూహాలు ఉన్నాయి.
తదుపరి పోస్ట్లో: మేము ఇప్పటికే అంతర్నిర్మిత లేదా ఇస్టియోకి సులభంగా జోడించిన ట్రేసింగ్ మరియు పర్యవేక్షణ గురించి అలాగే సిస్టమ్లో ఉద్దేశపూర్వకంగా లోపాలను ఎలా ప్రవేశపెట్టాలి అనే దాని గురించి మాట్లాడుతాము.
మూలం: www.habr.com