ప్లగ్ తీసేయండి. కిల్స్విచ్ నొక్కండి. మీరు ఒకే యంత్రం పక్కన ఉన్నప్పుడు ఈ సహజ ప్రవృత్తులు పనిచేస్తాయి. కానీ మీ AI సిస్టమ్ మూడు అవైలబిలిటీ జోన్లలో యాభై నోడ్స్కు విస్తరించి ఉన్నప్పుడు అవి విఫలమవుతాయి. చాలా ఇంజనీరింగ్ బృందాలు దీనిని కష్టపడి నేర్చుకుంటాయి. వారు ఒక సెంట్రల్ డేటాబేస్ను అప్డేట్ చేస్తారు, ఒక బూలియన్ను true నుండి false కి మారుస్తారు, మరియు సిస్టమ్ ఆగిపోతుందని భావిస్తారు. అది ఆగదు. డేటాబేస్ క్లీన్గా కనిపిస్తుంది. సర్వీస్ ఇంకా నడుస్తూనే ఉంటుంది.
సింగిల్ స్విచ్ భ్రమ
ఎపోక్ 12 వద్ద ఒక రికవోకేషన్ను రికార్డ్ చేసే కంట్రోలర్ను ఊహించుకోండి. అది ఆ మార్పును పర్సిస్టెంట్ స్టోర్లోకి రాస్తుంది మరియు ఊపిరి పీల్చుకుంటుంది. అదే సమయంలో, వర్కర్ B ఎపోక్ 11 నుండి వచ్చిన క్యాష్డ్ గ్రాంట్తో నడుస్తోంది. ఆ వర్కర్కు ఆ సమాచారం అందలేదు. ముప్పై సెకన్ల తర్వాత, అది ఒక మోడల్ ఇన్ఫరెన్స్ జాబ్ను ప్రారంభిస్తుంది, ఒక GPU క్లస్టర్ను సిద్ధం చేస్తుంది లేదా ఒక ఎక్స్టర్నల్ APIని పిలుస్తుంది. యాక్సెస్ రద్దు చేయబడిందని ఆడిట్ లాగ్ చెబుతుంది. కానీ ఆ చర్య మాత్రం జరిగింది.
ఇది పర్సిస్టెన్స్ మరియు ప్రొపగేషన్ మధ్య ఉన్న అంతరం. డేటాబేస్ రైట్ అనేది సిస్టమ్ స్టేట్ కాదు. అది ఒక టేబుల్లోని ఒక రో మాత్రమే, మరియు మీ సిస్టమ్లోని అనేక యాక్టర్లు వారికి అవసరమైన ఖచ్చితమైన సమయంలో ఆ టేబుల్ను పోల్ (poll) చేయరు. మీరు ఎమర్జెన్సీ స్టాప్ను లైట్ స్విచ్ లాగా భావిస్తే, గదిలోని కొన్ని మూలల్లో చీకటి ఎప్పటికీ రాదని మీరు కనుగొంటారు.
డిస్ట్రిబ్యూటెడ్ సిస్టమ్స్ యొక్క కఠిన వాస్తవం
మీరు వైఫల్యానికి అనుగుణంగా డిజైన్ చేయాలి. అప్పుడప్పుడు వచ్చే వైఫల్యం కాదు. నిరంతరమైన, గందరగోళమైన, స్వతంత్ర వైఫల్యం. పని మధ్యలో వర్కర్లు రీబూట్ అవుతాయి. క్యూ కన్స్యూమర్లు నిమిషాల వెనుకబడిపోతారు. ఒక రెప్లికా ఆగిపోవడం వల్ల అథరైజేషన్ సర్వీసులు పాత డేటాను (stale data) అందిస్తాయి. మెసేజ్లు డూప్లికేట్ అవుతాయి. మెసేజ్లు మాయమవుతాయి. మెసేజ్లు క్రమం తప్పి వస్తాయి. మీ NTP డీమన్ డ్రిఫ్ట్ అవుతుంది, మరియు అకస్మాత్తుగా ఒక నోడ్ మిగిలిన వాటి కంటే పది సెకన్లు వెనుకబడి ఉందని అనుకుంటుంది. క్లాక్లలో లోపాలు ఉంటాయి, మరియు సరిహద్దుల (boundaries) అవతల ఈవెంట్లను క్రమబద్ధీకరించడానికి మీరు వాల్ టైమ్ను నమ్మలేరు.
మీ ఎమర్జెన్సీ ప్రోటోకాల్ నమ్మదగిన నెట్వర్క్లు, క్రమబద్ధమైన మెసేజ్ డెలివరీ లేదా సింక్రొనైజ్డ్ క్లాక్లను ఊహిస్తే, అది ప్రోటోకాల్ కాదు. అది కేవలం ఒక కోరిక మాత్రమే. వర్కర్లు, క్యూ కన్స్యూమర్లు మరియు అథరైజేషన్ సర్వీసులు స్వతంత్రంగా విఫలమవుతాయి. ఇన్ఫ్రాస్ట్రక్చర్ శత్రుత్వంతో ఉన్నట్లు అనిపించినా కూడా మీ సేఫ్టీ రూల్స్ నిలబడాలి.
నిజంగా పనిచేసే ఐదు నియమాలు
గందరగోళంలో కూడా నిలబడే ఇన్వేరియంట్స్ (invariants) నుండి భద్రత వస్తుంది. రికవోకేషన్ ఒక కల్పితం కాకుండా చూసే నియమాలు ఇక్కడ ఉన్నాయి.
రికవోకేషన్ ఎపోక్ కంటే తక్కువ గ్రాంట్ ఎపోక్తో ఏ చర్య కూడా ప్రారంభం కాకూడదు.
ఇది మీ ప్రధాన రక్షణ కవచం. ప్రతి పర్మిషన్ గ్రాంట్ ఒక ఎపోక్ నంబర్ను కలిగి ఉంటుంది. ప్రతి రికవోకేషన్ దానికంటే కొత్త నంబర్ను కలిగి ఉంటుంది. ఏ వర్కర్ చర్య తీసుకునే ముందు, అది ఆ నంబర్లను పోల్చుతుంది. వర్కర్ వద్ద ఉన్న గ్రాంట్, అది చూసిన తాజా రికవోకేషన్ కంటే పాతదైతే, వర్కర్ ఆగిపోతుంది. ఎపోక్లు మీకు సిస్టమ్ క్లాక్పై ఆధారపడని లాజికల్ క్లాక్ను అందిస్తాయి. ఎపోక్ 11ని కలిగి ఉన్న వర్కర్, ఎపోక్ 12 ప్రాథమిక అధికారాన్ని రద్దు చేసిందని తెలిసిన వెంటనే పనిని ప్రారంభించడానికి నిరాకరించాలి.
క్యాష్డ్ గ్రాంట్లు నిర్ణీత కాలపరిమితిలో గడువు ముగుస్తాయి.
ఒక పర్మిషన్ మెమరీలో ఎప్పటికీ ఉండకూడదు. నిర్దిష్ట వ్యవధి తర్వాత వర్కర్లు తమ హక్కులను తిరిగి ధృవీకరించాలి లేదా వదులుకోవాలి. ఇది లేకపోతే, ఆఫ్ లైన్ అయిన నోడ్ కొన్ని రోజులు లేదా వారాల తర్వాత తిరిగి వచ్చి, పాతబడిన (fossilized) గ్రాంట్ను ఉపయోగించి పనులు చేయవచ్చు. ఒక లీజును (lease) నిర్ణయించండి. దానిని కఠినంగా అమలు చేయండి. సమయం మీ ఆటోమేటిక్ క్లీనప్ క్రూ అవుతుంది.
సిస్టమ్ రీస్టార్ట్ చేసినా సేవ్ చేసిన ఎపోక్ తగ్గకూడదు.
పర్సిస్టెన్స్ ముఖ్యం. ఒక కంట్రోలర్ క్రాష్ అయ్యి రీస్టార్ట్ అయినప్పుడు, అది ఇప్పటివరకు జారీ చేసిన అత్యధిక ఎపోక్ను తిరిగి పొందాలి. పాత ఎపోక్కు రోల్ బ్యాక్ చేయడం వల్ల, ఎమర్జెన్సీ స్టాప్ జరగనట్లుగా రద్దు చేయబడిన పర్మిషన్లు మళ్ళీ పునరుద్ధరించబడతాయి. మీరు దానిని బ్రాడ్కాస్ట్ చేసే ముందే ఎపోక్ను పర్సిస్టెంట్గా స్టోర్ చేయండి. ఒక write-ahead log, కన్ఫర్మ్డ్ fsync, లేదా రిప్లికేటెడ్ కన్సన్సస్ గ్రూప్ను ఉపయోగించండి. చరిత్ర ఎప్పుడూ ముందుకు మాత్రమే సాగుతుంది.
డూప్లికేట్ రికవో
