એક ડેવલપરે ક્લાયન્ટ-સાઇડ પોલિંગ ઇન્ટરવલને 30 સેકન્ડથી વધારીને 15 મિનિટ કરીને Neon ના સર્વરલેસ-ડેટાબેઝ કમ્પ્યુટ ચાર્જમાં ઘટાડો કર્યો. લાંબો વિરામ ડેટાબેઝને એટલો સમય નિષ્ક્રિય રહેવા દે છે કે તે 'સ્કેલ ટુ ઝીરો' (scale to zero) થઈ શકે, જેનાથી સતત 30-સેકન્ડના પોલિંગ દ્વારા વપરાતા કમ્પ્યુટ ક્રેડિટ્સ બચી જાય છે.
Neon તેના કમ્પ્યુટ એન્જિનના દરેક સેકન્ડ માટે બિલિંગ કરે છે. સામાન્ય સર્વરલેસ સેટઅપમાં, કોઈપણ વિનંતી (request)—ભલે તે ગમે તેટલી નાની હોય—એન્જિનને સક્રિય રાખે છે. લેખકનું TV ડેશબોર્ડ દર અડધી મિનિટે ડેટાબેઝ ક્વેરી કરતું હતું, ભલે ડિસ્પ્લે થયેલ ડેટા ત્યારે જ બદલાતો હતો જ્યારે વપરાશકર્તા મેન્યુઅલી સિંક કરે અથવા નવું બ્રોડકાસ્ટ શરૂ થાય. આ પેટર્નને કારણે Neon નું કમ્પ્યુટ પૂલ ક્યારેય એવા 'ઝીરો-સ્ટેટ' (zero-state) પર પહોંચી શકતું નહોતું જે બિલિંગ અટકાવે, જેના કારણે Vercel કોસ્ટ ડેશબોર્ડમાં નિયમિત વધારો (spikes) જોવા મળતો હતો.
મૂળ પોલિંગ શા માટે મહત્વનું હતું
- ડેશબોર્ડ સંપૂર્ણપણે ક્લાયન્ટ-સાઇડ React કમ્પોનન્ટ હતું, તેથી દરેક બ્રાઉઝર ઇન્સ્ટન્સ સીધું Neon ને એક્સેસ કરતું હતું.
- Neon ની કિંમત એક્ટિવ કમ્પ્યુટ સમય સાથે જોડાયેલી છે, વિનંતીઓની સંખ્યા સાથે નહીં, તેથી દર 30 સેકન્ડે એક જ વિનંતી કરવાથી બેઝલાઇન ચાર્જ ચાલુ રહેતો હતો.
- લેખકના Vercel મોનિટરિંગમાં ટ્રાફિક અને Neon કમ્પ્યુટ વપરાશ વચ્ચે સંબંધ જોવા મળ્યો હતો, જે પુષ્ટિ કરે છે કે પોલિંગ ડેટાબેઝને સક્રિય રાખતું હતું.
નિષ્ફળ ઉપાયો
ઝડપી 'ડીબાઉન્સ' (debounce)—છેલ્લી યુઝર ઇન્ટરેક્શન પછી વિનંતીમાં વિલંબ કરવો—તેથી કોઈ ફાયદો થયો નહીં કારણ કે ટાઈમર હજુ પણ દર 30 સેકન્ડે ચાલતું હતું. મેં Vercel Edge Functions નો ઉપયોગ કરવાનો પણ પ્રયાસ કર્યો, પરંતુ તેનાથી જટિલતા વધી ગઈ.
સરળ ઉકેલ
માત્ર એક જ કોડ ફેરફારની જરૂર હતી: રિફ્રેશ ઇન્ટરવલ નક્કી કરતા કોન્સ્ટન્ટ (constant) ને બદલવો:
- 30 સેકન્ડ થી → 5 મિનિટ
- પછી 5 મિનિટ થી → 15 મિનિટ
15 મિનિટના અંતરે, Neon પાસે નિષ્ક્રિયતાને ઓળખવા અને તેના કમ્પ્યુટ રિસોર્સિસને બંધ (spin down) કરવા માટે પૂરતો સમય હોય છે. ડેશબોર્ડ કાર્યરત રહે છે: જ્યારે વપરાશકર્તાઓ મેન્યુઅલી રિફ્રેશ કરે છે ત્યારે તેઓ હજુ પણ લેટેસ્ટ ડેટા જોઈ શકે છે, અને ક્યારેક થતું ઓટોમેટિક પોલિંગ સતત ખર્ચ વગર નવા બ્રોડકાસ્ટને પકડી લે છે.
ક્લાયન્ટ-સાઇડ પોલિંગ શા માટે રાખવું?
- સરળતા – કોઈ વધારાના સર્વરલેસ ફંક્શન્સ અથવા બિલ્ડ સ્ટેપ્સની જરૂર નથી.
- વપરાશકર્તાની અપેક્ષાઓ – ડેશબોર્ડ પહેલેથી જ ક્લાયન્ટ એપ જેવું વર્તન કરે છે; મેન્યુઅલ ક્લિકથી હજુ પણ ઇન્સ્ટન્ટ અપડેટ મળે છે.
- કોસ્ટ મોડલ સાથે સુસંગતતા – Neon કમ્પ્યુટના દરેક સેકન્ડ દીઠ ચાર્જ કરે છે, વિનંતી દીઠ નહીં, તેથી ફ્રીક્વન્સી ઘટાડવાથી બિલ સીધું ઘટે છે.
સર્વરલેસ ડેવલપર્સ માટે પાઠ
- પોલિંગ ફ્રીક્વન્સીને તમારા ડેટાના વાસ્તવિક અપડેટ સમય સાથે મેળવો. જો ડેટાસેટ કલાકે માત્ર થોડી જ વાર બદલાતો હોય, તો 15 મિનિટનો ઇન્ટરવલ ઘણીવાર પૂરતો હોય છે.
- સર્વરલેસ એન્વાયરમેન્ટમાં વારંવાર પોલિંગ કરવું એ છુપો ખર્ચ વધારનાર પરિબળ છે; દર મિનિટે એક વધારાની વિનંતી ડેટાબેઝને ક્યારેય સ્કેલ ડાઉન થતા અટકાવી શકે છે.
- આર્કિટેક્ચરલ ફેરફાર કર્યા વગર નાના કોન્ફિગરેશન ફેરફારોથી મોટા પ્રમાણમાં બચત કરી શકાય છે.
ટૂંકમાં: માત્ર એક કોન્સ્ટન્ટ ફેરફારથી સતત સક્રિય રહેતા ડેટાબેઝને ખરા અર્થમાં સર્વરલેસ કમ્પોનન્ટમાં બદલી નાખવામાં આવ્યો, જેનાથી ડેશબોર્ડની ઉપયોગિતા જાળવી રાખીને કમ્પ્યુટ ખર્ચમાં ઘટાડો થયો. Neon અથવા સમાન પ્રતિ-સેકન્ડ કમ્પ્યુટ સેવાઓ ચલાવતા કોઈપણ ટીમ માટે, પોલ ઇન્ટરવલની ફરી તપાસ કરવી એ આજે જ ટેસ્ટ કરવા જેવી એક ઝડપી સફળતા છે.
