డేటాను కోల్పోకుండా సైట్ను రీనేమ్ చేయడం
ఒక క్లయింట్ acme-staging నుండి acme కి సైట్ను రీనేమ్ చేయమని అడుగుతారు. మీరు యాప్లో పేరు మారుస్తారు. అకస్మాత్తుగా, అన్ని డేటాబేస్ బ్యాకప్లు, స్క్రీన్షాట్లు మరియు థంబ్నెయిల్స్ మాయమవుతాయి.
ఫైల్లు డిస్క్లో ఇంకా ఉన్నాయి. కొత్త డైరెక్టరీ మాత్రం ఖాళీగా ఉంది. పేరు మారినప్పుడు డేటా కూడా మారలేదు.
మా అసలు డిజైన్లో మేము ఈ తప్పు చేశాము. ఫైల్లను ఎక్కడ నిల్వ చేయాలి అని నిర్ణయించడానికి మేము సైట్ పేరును ఉపయోగించాము.
మీరు ఫైల్లను backups/acme-staging/ లో నిల్వ చేసి, ఆపై సైట్ను acme గా రీనేమ్ చేస్తే, యాప్ backups/acme/ కోసం వెతుకుతుంది. దానికి ఒక ఖాళీ ఫోల్డర్ కనిపిస్తుంది. పాత డేటా పాత ఫోల్డర్లోనే ఉంటుంది, కానీ యాప్ దానిని వేరే సైట్కు చెందిన పాత డేటాగా పరిగణిస్తుంది.
సైట్ పేర్లు తరచుగా మారుతుంటాయి. క్లయింట్లు టైపింగ్ తప్పులను (typos) సరిచేస్తారు. టీమ్లు స్టేజింగ్ సైట్లను ప్రొడక్షన్కు మారుస్తారు. కంపెనీలు పునర్వ్యవస్థీకరణ (reorganize) చేసుకుంటాయి.
డిస్ప్లే పేరును (display name) ఒక స్థిరమైన ఐడెంటిఫైయర్ (stable identifier) నుండి వేరు చేయడం ద్వారా మేము దీనిని పరిష్కరించాము.
ఇప్పుడు ప్రతి సైట్కు ఒక ప్రత్యేకమైన ID ఉంటుంది. అది site_a1b2c3d4e5f6 లాగా ఉంటుంది. ఈ ID ఎప్పటికీ మారదు.
మేము ఇప్పుడు పేరుకు బదులుగా IDని ఉపయోగించి ఫైల్లను నిల్వ చేస్తాము. డైరెక్టరీ పాత్ backups/site_a1b2c3d4e5f6/ లాగా ఉంటుంది. మీరు సైట్ను రీనేమ్ చేసినా, పాత్ అలాగే ఉంటుంది. డేటా కనెక్ట్ అయి ఉంటుంది.
ఇప్పటికే ఉన్న వినియోగదారులను ఈ సిస్టమ్లోకి మార్చడం కష్టమైన పని. మేము ఒక idempotent మైగ్రేషన్ను నిర్మించాము. అంటే సిస్టమ్ స్టార్టప్ సమయంలో ID కోసం తనిఖీ చేస్తుంది. ఒకవేళ సైట్కు ID లేకపోతే, సిస్టమ్ దానికి ఒక IDని కేటాయిస్తుంది. ఒకవేళ ఇప్పటికే ఉంటే, సిస్టమ్ దాన్ని అలాగే ఉంచుతుంది.
మేము ఫిజికల్ ఫైల్లను కూడా మైగ్రేట్ చేశాము. సిస్టమ్ సైట్ పేరుతో ఉన్న ఫోల్డర్ను కనుగొంటే, దానిని కొత్త ID ఫార్మాట్లోకి రీనేమ్ చేస్తుంది.
మేము లాగ్లను కూడా సరిచేశాము. కొత్త లాగ్లు IDని ఉపయోగిస్తాయి. పాత లాగ్లు సైట్ పేరును ఉపయోగిస్తాయి. మీ హిస్టరీ నిరంతరంగా కనిపించేలా UI రెండింటినీ కలుపుతుంది.
వాలిడేషన్ (validation) గురించి మేము ఒక కఠినమైన పాఠాన్ని నేర్చుకున్నాము. అప్డేట్ తర్వాత, ID ఫార్మాట్లను తనిఖీ చేయడానికి మేము ఒక రూల్ను జోడించాము. ఆ రూల్ చాలా కఠినంగా ఉంది. అది మా మైగ్రేషన్ నుండి వచ్చిన కొన్ని పాత IDలను తిరస్కరించింది. అకస్మాత్తుగా, సైట్లు మళ్ళీ మాయమయ్యాయి.
పాఠం సరళమైనది: కొత్త రూల్స్ జోడించే ముందు మీ డేటాను ఆడిట్ చేయండి.
మనుషులు చూసే దానిని, సిస్టమ్ ఉపయోగించే దానిని వేరు చేయడం అనేది ఒక క్లాసిక్ ప్యాటర్న్. లాంచ్ చేసిన తర్వాత దీనిని చేయడం ఖరీదైనది మరియు ప్రమాదకరమైనది. ఈ చిక్కు నుండి తప్పించుకోవడానికి మొదటి రోజు నుండే immutable IDsని ఉపయోగించండి.