ఒక డెవలపర్ క్లయింట్-సైడ్ పోలింగ్ ఇంటర్వల్ను (polling interval) 30 సెకన్ల నుండి 15 నిమిషాలకు పెంచడం ద్వారా Neon యొక్క సర్వర్లెస్-డేటాబేస్ కంప్యూట్ ఛార్జీలను తగ్గించారు. ఈ ఎక్కువ సమయం గ్యాప్ వల్ల డేటాబేస్ తగినంత సమయం ఖాళీగా (idle) ఉంటుంది, దీనివల్ల అది 'స్కేల్ టు జీరో' (scale to zero) స్థితికి చేరుకుంటుంది. దీనివల్ల ప్రతి 30 సెకన్లకు జరిగే పోలింగ్ వల్ల అయ్యే కంప్యూట్ క్రెడిట్స్ ఆదా అవుతాయి.
Neon తన కంప్యూట్ ఇంజిన్ నడుస్తున్న ప్రతి సెకనుకు బిల్లు వేస్తుంది. సాధారణ సర్వర్లెస్ సెటప్లో, ఎంత చిన్న రిక్వెస్ట్ అయినా ఇంజిన్ను యాక్టివ్గా ఉంచుతుంది. ప్రదర్శించబడే డేటా వినియోగదారు మాన్యువల్గా సింక్ చేసినప్పుడు లేదా కొత్త బ్రాడ్కాస్ట్ ప్రారంభమైనప్పుడు మాత్రమే మారుతున్నప్పటికీ, రచయిత యొక్క TV డ్యాష్బోర్డ్ ప్రతి అర నిమిషానికి డేటాబేస్ను క్వెరీ (query) చేసేది. ఈ విధానం వల్ల Neon కంప్యూట్ పూల్ బిల్లింగ్ను ఆపే 'జీరో-స్టేట్' (zero-state) స్థితికి చేరుకోలేకపోయింది, దీనివల్ల Vercel కాస్ట్ డ్యాష్బోర్డ్లో ఖర్చులు నిరంతరం పెరుగుతూనే ఉన్నాయి.
అసలు పోలింగ్ ఎందుకు సమస్యగా మారింది
- డ్యాష్బోర్డ్ పూర్తిగా క్లయింట్-సైడ్ React కాంపోనెంట్, కాబట్టి ప్రతి బ్రౌజర్ ఇన్స్టాన్స్ నేరుగా Neonని హిట్ చేసేది.
- Neon ధర నిర్ణయం రిక్వెస్ట్ కౌంట్పై కాకుండా, యాక్టివ్ కంప్యూట్ టైమ్పై ఆధారపడి ఉంటుంది, కాబట్టి ప్రతి 30 సెకన్లకు ఒక రిక్వెస్ట్ రావడం వల్ల నిరంతరం బేస్లైన్ ఛార్జీలు పడుతున్నాయి.
- ట్రాఫిక్ మరియు Neon కంప్యూట్ వినియోగం మధ్య సంబంధం ఉందని రచయిత యొక్క Vercel మానిటరింగ్ చూపించింది, దీనివల్ల పోలింగ్ వల్ల డేటాబేస్ నిరంతరం యాక్టివ్గా ఉందని నిర్ధారితమైంది.
విఫలమైన పరిష్కారాలు
డీబౌన్స్ (debounce) పద్ధతిని ఉపయోగించి—అంటే చివరి యూజర్ ఇంటరాక్షన్ తర్వాత రిక్వెస్ట్ను ఆలస్యం చేయడం—పని చేయలేదు, ఎందుకంటే టైమర్ ఇంకా ప్రతి 30 సెకన్లకు రన్ అవుతూనే ఉంది. నేను Vercel Edge Functions ఉపయోగించడానికి కూడా ప్రయత్నించాను, కానీ అది అనవసరమైన సంక్లిష్టతను పెంచింది.
సరళమైన పరిష్కారం
రిఫ్రెష్ ఇంటర్వల్ను నిర్వచించే ఒక కాన్స్టాంట్ను (constant) మార్చడం ద్వారా మాత్రమే ఈ సమస్య పరిష్కారమైంది:
- 30 సెకన్ల నుండి → 5 నిమిషాలకు
- ఆపై 5 నిమిషాల నుండి → 15 నిమిషాలకు
15 నిమిషాల ఇంటర్వల్తో, Neon డేటాబేస్ నిష్క్రియాత్మకతను (inactivity) గుర్తించి, తన కంప్యూట్ రిసోర్స్లను స్పిన్ డౌన్ (spin down) చేయడానికి తగినంత సమయం దొరుకుతుంది. డ్యాష్బోర్డ్ పనితీరు దెబ్బతినదు: వినియోగదారులు మాన్యువల్గా రిఫ్రెష్ చేసినప్పుడు తాజా డేటాను చూడగలరు, మరియు అప్పుడప్పుడు జరిగే ఆటోమేటిక్ పోలింగ్ ద్వారా కొత్త బ్రాడ్కాస్ట్లను కూడా గుర్తించవచ్చు.
క్లయింట్-సైడ్లోనే పోలింగ్ను ఎందుకు కొనసాగించాలి?
- సరళత – అదనపు సర్వర్లెస్ ఫంక్షన్లు లేదా బిల్డ్ స్టెప్స్ అవసరం లేదు.
- వినియోగదారుల అంచనాలు – డ్యాష్బోర్డ్ ఇప్పటికే ఒక క్లయింట్ యాప్లా పనిచేస్తుంది; మాన్యువల్ క్లిక్ చేసినప్పుడు వెంటనే అప్డేట్ వస్తుంది.
- ఖర్చు నమూనాతో అనుసంధానం – Neon ప్రతి రిక్వెస్ట్కు కాకుండా, కంప్యూట్ సెకనుకు ఛార్జ్ చేస్తుంది, కాబట్టి ఫ్రీక్వెన్సీని తగ్గించడం ద్వారా బిల్లును నేరుగా తగ్గించవచ్చు.
సర్వర్లెస్ డెవలపర్ల కోసం పాఠాలు
- మీ డేటా యొక్క వాస్తవ ప్రపంచ అప్డేట్ వేగంతో (cadence) పోలింగ్ ఫ్రీక్వెన్సీని సరిపోల్చండి. ఒక డేటాసెట్ గంటకు కొన్నిసార్లు మాత్రమే మారుతుంటే, 15 నిమిషాల ఇంటర్వల్ సరిపోతుంది.
- సర్వర్లెస్ వాతావరణంలో తరచుగా పోలింగ్ చేయడం అనేది ఒక దాగి ఉన్న ఖర్చు; నిమిషానికి ఒక అదనపు రిక్వెస్ట్ కూడా డేటాబేస్ స్కేల్ డౌన్ అవ్వకుండా అడ్డుకోవచ్చు.
- ఆర్కిటెక్చరల్ మార్పులు చేయకుండానే, చిన్న చిన్న కాన్ఫిగరేషన్ మార్పుల ద్వారా భారీ మొత్తంలో ఆదా చేయవచ్చు.
ముగింపు ఏమిటంటే: ఒకే ఒక కాన్స్టాంట్ మార్పుతో, నిరంతరం యాక్టివ్గా ఉండే డేటాబేస్ను నిజమైన సర్వర్లెస్ కాంపోనెంట్గా మార్చారు, దీనివల్ల డ్యాష్బోర్డ్ ఉపయోగితావాన్ని కాపాడుతూనే కంప్యూట్ ఖర్చు తగ్గింది. Neon లేదా అదే తరహా సెకనుకు కంప్యూట్ ఛార్జ్ చేసే సర్వీసులను ఉపయోగిస్తున్న ఏ టీమ్ అయినా, పోలింగ్ ఇంటర్వల్స్ను మళ్ళీ ఒకసారి పరిశీలించడం అనేది ఈరోజే పరీక్షించదగ్గ ఒక గొప్ప మార్పు.
