విఫలమైన రీపబ్లిష్ ఎప్పుడూ పనిచేస్తున్న బ్యాకెండ్ను తొలగించదు
సెప్టెంబర్ 25న, ఒక విఫలమైన రీపబ్లిష్ వల్ల ఒక యాప్ బ్యాకెండ్ తొలగిపోయింది. అది దాదాపు రెండున్నర గంటల పాటు లైవ్గా, సరిగా పనిచేస్తూ ఉంది. విఫలమైన పబ్లిష్ను వెనక్కి తీసుకునే కోడ్, ఆ పబ్లిష్ తాకిన ప్రతి సర్వర్ యాప్ను తొలగించింది — అది మొదలవకముందే సర్వ్ అవుతున్నవాటిని కూడా. ఇప్పుడు ఒక పబ్లిష్ సృష్టించిన యాప్లను మాత్రమే తొలగిస్తారు. ఇప్పటికే ఉన్న యాప్ అది నడుస్తున్న ఖచ్చితమైన వెర్షన్కు తిరిగి పెడతారు. అదే రోజు చేసిన రెండు అదనపు పరిష్కారాలు, హోస్టింగ్ ప్లాట్ఫామ్ డిప్లాయ్ టూల్ ఫెయిల్ అయినప్పుడు కూడా అన్డూ జరిగేలా చూశాయి, మరియు నిద్రలో ఉన్న ఆరోగ్యవంతమైన యాప్ను విఫలమైనదిగా గుర్తించకుండా ఆపాయి.
బ్యాకెండ్ ఎలా పబ్లిష్ అవుతుంది
మీ Mythex యాప్కు బ్యాకెండ్ ఉన్నప్పుడు — అంటే ఒక API లేదా సర్వర్, కేవలం స్టాటిక్ ఫైళ్లు కాకుండా — పబ్లిష్ చేయడం ఒక Dockerfile (యాప్ను ఒక ఇమేజ్గా ప్యాక్ చేసే వంటకం) నుండి బిల్డ్ చేస్తుంది, ఆ ఇమేజ్ను మా హోస్టింగ్ ప్లాట్ఫామ్లోని మెషీన్లపై రోల్ చేస్తుంది. ఆ తర్వాత ఒక హెల్త్ చెక్ కొత్త వెర్షన్ నిజంగా లేచి, నిలకడగా నడుస్తుందా అని వేచి చూస్తుంది, అప్పుడే పబ్లిష్ లైవ్ అని గుర్తిస్తారు.
మార్గంలో ఏదైనా విఫలమైతే, దాన్ని వెనక్కి తీసుకోవడానికి రోల్బ్యాక్ నడుస్తుంది. ఈ రోల్బ్యాక్ సరిగా ఉండటం పబ్లిషింగ్లో దాదాపు అన్నిటికంటే ముఖ్యం, ఎందుకంటే ఏదో ఇప్పటికే తప్పు జరుగుతున్నప్పుడే అది నడుస్తుంది.
సమస్య 1: రోల్బ్యాక్ పునరుద్ధరించాల్సిన వాటినే తొలగించింది
రోల్బ్యాక్ ఒక పబ్లిష్ డిప్లాయ్ చేసిన సర్వర్ యాప్ల జాబితాను ఉంచేది, ఫెయిల్ అయినప్పుడు వాటన్నింటినీ నాశనం చేసేది. మొదటి పబ్లిష్కు ఇది సరైనదే: యాప్ ఇప్పుడే సృష్టించబడింది, దానిపై ఏమీ ఆధారపడదు, దాన్ని తొలగిస్తే విషయాలు మొదట ఉన్నట్టే ఉంటాయి.
రీపబ్లిష్కు ఇది సరిగ్గా తప్పు. యాప్ అప్పటికే ఉంది, నిజమైన సందర్శకులకు సేవలు అందిస్తోంది. సెప్టెంబర్ 25న, రెండున్నర గంటల పాటు లైవ్గా ఉన్న ఒక యాప్ API, ఫెయిల్ అయిన రీపబ్లిష్ వల్ల తొలగించబడింది.
అదే కోడ్లో మరో వైఫల్యం కూడా దాగి ఉంది. డిలీట్ జరగని చోట, తప్పు కొత్త ఇమేజ్ మెషీన్లపై అలాగే ఉండిపోయింది — అయితే యజమానికి వారి ప్రస్తుత సైట్ ఇంకా లైవ్లో ఉందని మేము చెప్పాము. హెల్త్ చెక్ ఫెయిల్ కాగలిగే సమయానికి, కొత్త ఇమేజ్ ఇప్పటికే ప్రతి మెషీన్పై రోల్ అయిపోయి ఉంటుంది. ఏమీ చేయకపోవడం వెనక్కి తీసుకోవడంతో సమానం కాదు.
పరిష్కారం: మీరు సృష్టించినది మాత్రమే తొలగించండి, మిగతావి పునరుద్ధరించండి
ఇప్పుడు ప్రతి పబ్లిష్ తాకిన ప్రతి సర్వర్ యాప్ కోసం ఇవి నమోదు చేస్తుంది:
- ఈ పబ్లిష్ దీన్ని సృష్టించిందా అనేది, మరియు
- లేకపోతే, అది ఏ ఇమేజ్పై నడుస్తోంది అనేది ముందే.
ఫెయిల్ అయినప్పుడు, ప్రతి యాప్కు మూడు చికిత్సలలో ఒకటి వర్తిస్తుంది:
- ఈ పబ్లిష్ సృష్టించినది: మునుపటిలాగే తొలగించండి.
- ఇప్పటికే ఉంది, మునుపటి ఇమేజ్ తెలుసు: అదే కాన్ఫిగరేషన్తో మునుపటి ఇమేజ్ను మళ్లీ డిప్లాయ్ చేయండి. బిల్డ్ ఉండదు — ఇమేజ్ మాత్రమే వెనక్కి వెళ్తుంది.
- ఇప్పటికే ఉంది, మునుపటి ఇమేజ్ తెలియదు: దాన్ని ముట్టుకోకండి. ఉన్న యాప్ను, దాన్ని పునరుద్ధరించలేకపోయినా, ఎప్పుడూ తొలగించరు.
ఈ నియమాలు ఒక చిన్న స్వచ్ఛమైన ఫంక్షన్, దానికి సొంత టెస్ట్లు ఉన్నాయి. అందువల్ల “అన్నీ తొలగించు” అనే నిర్ణయం మళ్లీ రాకుండా, టెస్ట్ ఫెయిల్ అవుతుంది.
సమస్య 2: డిప్లాయ్ టూల్ వెనక్కి తీసుకునే మార్గాన్ని రాయకముందే ఫెయిల్ కావచ్చు
ఆ పరిష్కారం తర్వాత కొద్దిసేపటికే, అందులో ఒక అంతరం కనిపించింది. హోస్టింగ్ ప్లాట్ఫామ్ డిప్లాయ్ టూల్ తనదైన స్మోక్ చెక్లు నడుపుతుంది: కొత్త మెషీన్లు క్రాష్ అయితే అది ఎర్రర్తో నిష్క్రమిస్తుంది. కానీ అది అలా చేసేది తర్వాత, కొత్త ఇమేజ్ ఇప్పటికే మెషీన్లపై ఉన్న తర్వాత.
మా కోడ్ టూల్ విజయవంతంగా తిరిగి వచ్చిన తర్వాత మాత్రమే యాప్ను రోల్బ్యాక్ కోసం నమోదు చేసేది. టూలే డిప్లాయ్ను ఫెయిల్ చేస్తే, యాప్ ఇంకా రోల్బ్యాక్ జాబితాలో లేదు, కాబట్టి ఏదీ పునరుద్ధరించబడలేదు. మా స్టేజింగ్ వాతావరణంలో, తప్పు రీపబ్లిష్ తప్పు ఇమేజ్ను సర్వ్ చేస్తూనే ఉంచింది.
పరిష్కారం: ప్రారంభించే ముందే అన్డూను నమోదు చేయండి
యాప్ ఇప్పుడు, సిద్ధం చేసిన వెంటనే మరియు దానిపై ఏదైనా రోల్ అయ్యే ముందే, రోల్బ్యాక్ కోసం నమోదు అవుతుంది — అది సృష్టించబడిందా మరియు అది ఏ ఇమేజ్పై నడిచిందా అనే సమాచారంతో. ఆ తర్వాత ఏది ఫెయిల్ అయినా, రోల్బ్యాక్కు ఏమి తిరిగి పెట్టాలో తెలుస్తుంది. మేము స్థానికంగా ధృవీకరించాము: తప్పు రీపబ్లిష్ డిప్లాయ్ టూల్ స్వంత స్మోక్ చెక్లలో ఫెయిల్ అయింది, మునుపటి వెర్షన్ మాత్రం సమాధానం ఇస్తూనే ఉంది.
సమస్య 3: నిద్రపోతున్న యాప్ను “ఎప్పటికీ ప్రారంభం కాలేదు”గా ఫెయిల్ చేశారు
Mythex పై ప్రచురించిన యాప్లు మీ క్రెడిట్లను ఆదా చేయడానికి పనిలేనప్పుడు నిద్రపోతాయి. రీపబ్లిష్ నిద్రపోతున్న మెషీన్ను ఆగిపోయిన స్థితిలో వదిలేస్తుంది, కాబట్టి హెల్త్ చెక్ దాన్ని మేల్కొలపాలి. అది ప్లాట్ఫామ్ను మెషీన్ను ఒక్కసారి ప్రారంభించమని అడిగేది, జవాబును పట్టించుకోకుండా వదిలేసేది.
సెప్టెంబర్ 25న, ఆ ఒక్క ప్రారంభ అభ్యర్థన ఎటూ వెళ్లలేదు. ఆరోగ్యవంతమైన API ఆగిపోయిన స్థితిలో మొత్తం ఐదు నిమిషాల హెల్త్ చెక్ వ్యవధి వరకు ఉండిపోయింది, చివరికి “1 machine never started (last state: stopped)” అనే కారణంతో ఫెయిల్ అయింది.
ప్లాట్ఫామ్ కొన్నిసార్లు ప్రారంభాన్ని తిరస్కరిస్తుంది. ఈ సమస్యను పునరుత్పత్తి చేస్తున్నప్పుడు, మేము ప్రేరేపించకుండానే అది “lease currently held” అనే వైరుధ్యాన్ని ఇచ్చింది, మరియు మెషీన్ అప్డేట్ అవుతున్నప్పుడు అది ప్రారంభాలను తిరస్కరిస్తుంది.
పరిష్కారం: పదే పదే అడగండి, తలుపు తట్టండి
హెల్త్ చెక్ ఇప్పుడు:
- వేచి ఉన్నప్పుడు, ఆగిపోయిన మెషీన్ను ప్రారంభించమని ప్రతి 20 సెకన్లకు మళ్లీ అడుగుతుంది,
- ప్లాట్ఫామ్ తిరస్కరించినప్పుడు అది ఏమి జవాబిచ్చిందో లాగ్ చేస్తుంది, మరియు
- సందర్శకుడు చేసినట్లుగా యాప్కు ఒక సాధారణ అభ్యర్థనను పంపుతుంది — అభ్యర్థన వచ్చినప్పుడు ప్లాట్ఫామ్ ప్రాక్సీ నిద్రపోతున్న మెషీన్ను మేల్కొలుపుతుంది.
మేము నిజమైన ప్లాట్ఫామ్పై, మొదటి ప్రారంభం తిరస్కరించబడిన ఒక ఆధారం లేని యాప్తో దీన్ని పునరుత్పత్తి చేశాము. మార్పుకు ముందు, పబ్లిష్ 91 సెకన్ల తర్వాత ఫెయిల్ అయింది. తర్వాత, అది 20 సెకన్లలో పబ్లిష్ అయింది. బూట్లో నిజంగా క్రాష్ అయ్యే యాప్ ఇప్పటికీ ఫెయిల్ అవుతుంది, అలా ఉండాల్సినట్లే.
మేము దీనినుండి నేర్చుకున్నది
- కొత్తది మరియు ఉన్నది అనే తేడా రోల్బ్యాక్కు తెలియాలి. మీరు సృష్టించిన దాన్ని “అన్డూ” చేయడం అంటే తొలగించడం. అప్పటికే ఉన్నదాన్ని “అన్డూ” చేయడం అంటే పునరుద్ధరించడం. ఈ రెండింటినీ ఒకేలా చూడటమే, ఒక భద్రతా యంత్రాంగం పనిచేస్తున్న యాప్ను తొలగించడానికి కారణం.
- చర్య తీసుకునే ముందే, ఎలా వెనక్కి తీసుకోవాలో రాసి పెట్టుకోండి. ఒక అడుగు విజయవంతమైన తర్వాత మాత్రమే అన్డూ నమోదు చేస్తే, సగం దాటి ఫెయిల్ అయిన అడుగు వెనక్కి తీసుకోవడానికి ఏమీ లేకుండా వదిలేస్తుంది.
- మీరు ఆధారపడే అభ్యర్థనకు వచ్చిన జవాబును ఎప్పుడూ విస్మరించకండి. ఒక పట్టించుకోని “వద్దు” ఆరోగ్యవంతమైన యాప్ను విఫలమైన పబ్లిష్గా మార్చింది.
అదే రోజు వచ్చిన ఒక సంబంధిత పరిష్కారం: పబ్లిష్ అయిన వెంటనే క్రాష్ అయ్యే యాప్లను పట్టుకోవడం. మీ వైపు పబ్లిష్ విఫలమైతే ఏమవుతుందో తెలుసుకోవాలంటే, డాక్స్లో పబ్లిష్ ట్రబుల్షూటింగ్ చూడండి.