మోనోరెపో ETL కోసం 4 GitHub Actions పద్ధతులు
ఒకే మోనోరెపో నుండి మూడు సైట్లను నడపడం వల్ల సమస్యలు తలెత్తుతాయి. మీరు మూడు వేర్వేరు ETL జాబ్లు, మూడు కంటెంట్ రీబిల్డ్లు మరియు మూడు డిప్లాయ్మెంట్ పైప్లైన్లను ఎదుర్కోవాల్సి ఉంటుంది. మీరు వాటిని సమన్వయం చేయకపోతే, అవి ఒకదానికొకటి అడ్డుపడతాయి.
ఈ సెటప్ను స్థిరీకరించడానికి షెడ్యూల్లను పరీక్షించడంలో నేను ఆరు వారాలు గడిపాను. నేను ఉపయోగించే నాలుగు పద్ధతులు ఇక్కడ ఉన్నాయి.
- Cron జాబ్ల కోసం Time Offsets ఉపయోగించండి
అన్ని ETL జాబ్లను ఒకే సమయంలో నడపడం వల్ల వైఫల్యాలు సంభవిస్తాయి. జాబ్లు API రేట్ లిమిట్ల (rate limits) కోసం పోటీ పడతాయి. HuggingFace లేదా GitHub 429 ఎర్రర్ను రిటర్న్ చేసినప్పుడు, రన్ ఫెయిల్ అవుతుంది.
దీనిని నివారించడానికి నేను 30 నిమిషాల ఆఫ్సెట్లను ఉపయోగిస్తాను.
- మొదటి జాబ్ 02:00 కి ప్రారంభమవుతుంది
- రెండవ జాబ్ 02:30 కి ప్రారంభమవుతుంది
- మూడవ జాబ్ 03:00 కి ప్రారంభమవుతుంది
తదుపరి జాబ్ ప్రారంభం కావడానికి ముందు, ఒక భారీ పుల్ (heavy pull) పూర్తి చేయడానికి ముప్పై నిమిషాలు సరిపోతుంది. ఇది మీ లాగ్లను క్లీన్గా ఉంచుతుంది మరియు API కొలిజన్లను నివారిస్తుంది.
- అనవసరమైన రీబిల్డ్లను ఆపడానికి Skip Flags ఉపయోగించండి
ప్రతి ETL జాబ్ Vercel డిప్లాయ్మెంట్తో ముగుస్తుంది. ఆర్టికల్ కమిట్లు కూడా రీబిల్డ్లను ట్రిగ్గర్ చేసినప్పుడు సమస్య ఎదురవుతుంది. సరైన ప్రణాళిక లేకపోతే, ప్రతి ఆర్టికల్ అప్డేట్ మూడు సైట్లను రీబిల్డ్ చేయాల్సి వస్తుంది. దీనివల్ల బిల్డ్ నిమిషాలు వృథా అవుతాయి.
నేను ETL కమిట్ మెసేజ్లలో [skip publish-articles] ట్యాగ్ను ఉపయోగిస్తాను.
ఈ ఫ్లాగ్ను తనిఖీ చేయడానికి నేను నా వర్క్ఫ్లోలో ఒక స్టెప్ను జోడించాను. ఒకవేళ ఆ ట్యాగ్ ఉంటే, వర్క్ఫ్లో బిల్డ్ మరియు డిప్లాయ్ స్టెప్ను స్కిప్ చేస్తుంది. ఇది ETL పైప్లైన్లను ఆర్టికల్ పైప్లైన్ల నుండి వేరుగా ఉంచుతుంది.
- నిర్దిష్ట సైట్లను టార్గెట్ చేయడానికి Path Filters ఉపయోగించండి
ఒక సైట్ అప్డేట్ మూడు డిప్లాయ్మెంట్లను ట్రిగ్గర్ చేయాలని మీరు కోరుకోరు. నేను ప్రతి సైట్ యొక్క వర్క్ఫ్లోను దాని స్వంత ఫోల్డర్ మరియు షేర్డ్ ప్యాకేజీల (shared packages) ఫోల్డర్ను మాత్రమే గమనించేలా కాన్ఫిగర్ చేస్తాను.
ఉదాహరణ లాజిక్:
- AI tools సైట్
apps/ai-tools/ను మాత్రమే గమనిస్తుంది - OSS సైట్
apps/oss-alternatives/ను మాత్రమే గమనిస్తుంది
మీరు షేర్డ్ డైరెక్టరీలో కోడ్ను మారిస్తే, అన్ని సైట్లు రీబిల్డ్ అవుతాయి. షేర్డ్ కోడ్ మార్పులు అరుదుగా జరుగుతాయి కాబట్టి, నేను ఈ trade-off ని అంగీకరిస్తాను.
- నియంత్రణ కోసం Manual Dispatch జోడించండి
Cron రోజువారీ దినచర్యను నిర్వహిస్తుంది. Manual dispatch మిగిలినవన్నీ నిర్వహిస్తుంది. నేను workflow_dispatch ఉపయోగిస్తాను, తద్వారా నేను:
- ఫెయిల్ అయిన ETL జాబ్ను మళ్ళీ రన్ చేయవచ్చు
- డేటాను జోడించిన తర్వాత ఫోర్స్ రిఫ్రెష్ చేయవచ్చు
- డేటాబేస్కు రాయకుండా డేటాను పరీక్షించడానికి డ్రై రన్ (dry run) చేయవచ్చు
ఈ ఎంపికల కోసం GitHub UI డ్రాప్డౌన్ మెనూని చూపుతుంది. ఇది టైపింగ్ తప్పులను నివారిస్తుంది మరియు డీబగ్గింగ్ను సులభతరం చేస్తుంది.
సమ్మరీ
ఈ పద్ధతులు సంక్లిష్టమైనవి కావు. ఇవి స్పష్టమైనవి. ఈ నియమాలను డాక్యుమెంట్ చేయడానికి నేను నా రిపోజిటరీలో ఒక సాధారణ మార్క్డౌన్ ఫైల్ను ఉంచుతాను. దీనివల్ల నేను కొత్త వర్క్ఫ్లోలను జోడించినప్పుడు సిస్టమ్ దెబ్బతినకుండా ఉంటుంది.
