Using Routing Keys and Profile Leases in Playwright Worker Queues
TimeoutError: page.click failed వంటి Playwright ఎర్రర్ తరచుగా తప్పుదారి పట్టిస్తుంది.
ఆ ఎర్రర్ స్క్రిప్ట్ ఏమి చూసిందో చెబుతుంది. కానీ స్క్రిప్ట్ అసలు ఎందుకు తప్పు ప్రదేశంలో ఉందో అది చెప్పదు.
ఒకసారి ఒకే అకౌంట్కు సంబంధించిన జాబ్స్ను రెండు వర్కర్లు తీసుకోవడం నేను చూశాను. రెండు వర్కర్లు ఒకే సమయంలో ఒకే బ్రౌజర్ ప్రొఫైల్ను ఓపెన్ చేశాయి. ఒక వర్కర్ నెమ్మదిగా ఉన్న పేజీ కోసం వేచి చూస్తుంటే, మరొక వర్కర్ మళ్ళీ ప్రయత్నించి (retry), సెషన్ స్టేట్ను మార్చడం వల్ల ఫెయిల్యూర్ సంభవించింది.
సమస్య కోడ్లో లేదు. సమస్య క్యూ (queue) లో ఉంది.
చాలా వర్కర్ క్యూలు స్టేట్లెస్ (stateless) జాబ్స్ కోసం రూపొందించబడ్డాయి.
- ఒక జాబ్ను తీసుకోవడం.
- ఖాళీగా ఉన్న వర్కర్ను కనుగొనడం.
- టాస్క్ను రన్ చేయడం.
- అది పూర్తయిందని మార్క్ చేయడం.
ఇది స్క్రీన్షాట్లు లేదా API కాల్స్ కోసం పనిచేస్తుంది. కానీ బ్రౌజర్ ఆటోమేషన్ (browser automation) విషయంలో ఇది విఫలమవుతుంది.
బ్రౌజర్ ప్రొఫైల్ అనేది స్టేట్లెస్ కాదు. అది ఒక అకౌంట్, ఒక ప్రాక్సీ మరియు ఒక సెషన్ స్టేట్కు చెందుతుంది. వేగవంతమైన వర్కర్ ఎప్పుడూ సరైన వర్కర్ కాకపోవచ్చు.
సురక్షితంగా స్కేల్ (scale) చేయాలంటే, మీరు మీ లాజిక్ను మార్చుకోవాలి.
"ఏ వర్కర్ ఖాళీగా ఉంది?" అని అడిగే బదులు, "ప్రస్తుతం ఏ అకౌంట్ ఎన్విరాన్మెంట్ (account environment) ఉపయోగించడానికి సురక్షితంగా ఉంది?" అని అడగండి.
దీనిని మీరు మూడు పొరలతో (layers) పరిష్కరించవచ్చు:
Routing Keys ఏ వర్కర్ కూడా ఏదో ఒక జాబ్ను తీసుకోవనివ్వకండి. ప్రొఫైల్ ID లేదా అకౌంట్ ID ఆధారంగా ఒక రూటింగ్ కీని ఉపయోగించండి. దీనివల్ల ఒక సమయంలో ఒక నిర్దిష్ట ప్రొఫైల్ను ఒకే వర్కర్ తాకుతుందని నిర్ధారించవచ్చు.
Profile Leases క్యూ క్లెయిమ్ (queue claim) అంటే ఒక వర్కర్ ఒక జాబ్ను కలిగి ఉన్నాడని అర్థం. ప్రొఫైల్ లీజ్ (profile lease) అంటే ఒక నిర్దిష్ట బ్రౌజర్ ప్రొఫైల్ను నిర్ణీత సమయం వరకు ఉపయోగించడానికి ఒక వర్కర్కు అనుమతి ఉందని అర్థం. హార్ట్బీట్ (heartbeat) తో కూడిన లీజ్ను ఉపయోగించండి. టాస్క్ ఊహించిన దానికంటే ఎక్కువ సమయం తీసుకుంటే, వర్కర్ ఆ లీజ్ను పునరుద్ధరించాలి (renew).
Fencing Tokens పాతబడిన (stale) వర్కర్లు ప్రమాదకరమైనవి. నెట్వర్క్ లాగ్ వల్ల ఒక వర్కర్ తన లీజ్ను కోల్పోయినా, అది రన్ అవుతూనే ఉంటే, అది డేటాను రాయడానికి ప్రయత్నించవచ్చు. ఫెన్సింగ్ టోకెన్ (fencing token) ఉపయోగించండి. పాత టోకెన్ నుండి వచ్చే ఏ రైట్లను (writes) అయినా స్టోరేజ్ లేయర్ తిరస్కరించాలి.
మీరు ఒక రెడీనెస్ గేట్ (readiness gate) ను కూడా జోడించాలి. Playwrightని ప్రారంభించే ముందు, వీటిని తనిఖీ చేయండి:
- అకౌంట్ పాజ్ చేయబడిందా?
- ప్రొఫైల్కు మానవ సమీక్ష (human review) అవసరమా?
- ప్రాక్సీ రీజియన్ జాబ్ అవసరాలకు సరిపోతుందా?
బ్లాక్ చేయబడిన జాబ్ ఎప్పుడూ ఫెయిల్ అయిన జాబ్ కాదు. అది తరచుగా సరైన సందర్భం (context) కోసం వేచి ఉన్న జాబ్ మాత్రమే.
కేవలం వేగానికి మాత్రమే ప్రాధాన్యత ఇచ్చే క్యూలను నిర్మించడం ఆపండి. అకౌంట్ స్టేట్కు (account state) ప్రాధాన్యత ఇచ్చే క్యూలను నిర్మించండి.
Source: https://dev.to/web4browser/using-routing-keys-and-profile-leases-in-playwright-worker-queues-a53
