ஒரு டெவலப்பர் Neon-ன் serverless-database compute கட்டணங்களைக் குறைக்க, client-side polling இடைவெளியை 30 வினாடிகளிலிருந்து 15 நிமிடங்களாக நீட்டித்தார். இந்த நீண்ட இடைவெளி, தரவுத்தளம் (database) idle நிலையில் இருந்து 'scale to zero' நிலையை அடைய போதுமான நேரத்தை வழங்குகிறது, இதனால் ஒவ்வொரு 30 வினாடிக்கும் தொடர்ச்சியாக நடக்கும் polling-ஆல் ஏற்படும் compute credits செலவுகளைத் தவிர்க்க முடிகிறது.
Neon தனது compute engine இயங்கும் ஒவ்வொரு வினாடிக்கும் கட்டணம் வசூலிக்கிறது. ஒரு வழக்கமான serverless அமைப்பில், எவ்வளவு சிறிய கோரிக்கையாக (request) இருந்தாலும், அது engine-ஐ இயங்க வைக்கும். ஆசிரியரின் TV dashboard ஒவ்வொரு அரை நிமிடத்திற்கும் database-ஐக் கேட்டுக் கொண்டிருந்தது (queried), ஆனால் திரையில் காட்டப்படும் தரவுகள் ஒரு பயனர் கைமுறையாக sync செய்யும்போதோ அல்லது புதிய ஒளிபரப்பு தொடங்கும்போதோ மட்டுமே மாறும். இந்த முறை, Neon-ன் compute pool கட்டணத்தை நிறுத்தும் 'zero-state'-ஐ அடையவிடாமல் தடுத்ததுடன், Vercel cost dashboard-இல் அடிக்கடி செலவு அதிகரிப்பைக் காட்டியது.
அசல் polling ஏன் முக்கியத்துவம் வாய்ந்தது
- அந்த dashboard முற்றிலும் ஒரு client-side React component என்பதால், ஒவ்வொரு browser instance-ம் நேரடியாக Neon-ஐ அணுகியது.
- Neon-ன் விலை நிர்ணயம் கோரிக்கைகளின் எண்ணிக்கையை (request count) அடிப்படையாகக் கொள்ளாமல், active compute நேரத்தை அடிப்படையாகக் கொண்டது. எனவே, ஒவ்வொரு 30 வினாடிக்கும் ஒருமுறை நடக்கும் அணுகல், ஒரு அடிப்படைத் தொகையைத் தொடர்ந்து வசூலிக்கச் செய்தது.
- ஆசிரியரின் Vercel monitoring, traffic மற்றும் Neon compute பயன்பாட்டிற்கு இடையே உள்ள தொடர்பைக் காட்டியது, இதன் மூலம் polling ஆனது database-ஐத் தொடர்ந்து இயங்க வைத்தது என்பது உறுதி செய்யப்பட்டது.
தோல்வியடைந்த மாற்று வழிகள்
ஒரு விரைவான debounce (கடைசி பயனர் செயல்பாட்டிற்குப் பிறகு கோரிக்கையைத் தாமதப்படுத்துவது) உதவியாக இருக்கவில்லை, ஏனெனில் timer இன்னும் ஒவ்வொரு 30 வினாடிக்கும் இயங்கியது. நான் Vercel Edge Functions-ஐப் பயன்படுத்தவும் முயன்றேன், ஆனால் அது அதிக சிக்கலைச் சேர்த்தது.
எளிய தீர்வு
refresh interval-ஐத் தீர்மானிக்கும் ஒரு constant-ஐ மாற்றுவது மட்டுமே தேவைப்பட்ட குறியீடு (code) மாற்றமாகும்:
- 30 வினாடிகள் என்பதிலிருந்து → 5 நிமிடங்கள்
- பிறகு 5 நிமிடங்கள் என்பதிலிருந்து → 15 நிமிடங்கள்
15 நிமிட இடைவெளியில், Neon செயல்பாடற்ற நிலையை (inactivity) உணர்ந்து தனது compute resources-களை நிறுத்த (spin down) போதுமான நேரத்தைப் பெறுகிறது. Dashboard தொடர்ந்து செயல்படுகிறது: பயனர்கள் கைமுறையாக refresh செய்யும்போது சமீபத்திய தரவுகளைப் பார்க்க முடியும், மேலும் அவ்வப்போது நடக்கும் தானியங்கி polling புதிய ஒளிபரப்பைக் கண்டறியும், ஆனால் இது தொடர்ச்சியான தேவையற்ற செயல்பாடுகளைத் தவிர்க்கிறது.
ஏன் client-side polling-ஐத் தொடர வேண்டும்?
- எளிமை – கூடுதல் serverless functions அல்லது build நிலைகள் தேவையில்லை.
- பயனர் எதிர்பார்ப்புகள் – Dashboard ஏற்கனவே ஒரு client app போலச் செயல்படுகிறது; கைமுறையாக கிளிக் செய்யும்போது உடனடித் தரவுப் புதுப்பிப்பு கிடைக்கும்.
- செலவு மாதிரியுடன் பொருந்துதல் – Neon ஒவ்வொரு கோரிக்கைக்கும் (request) கட்டணம் வசூலிக்காமல், ஒவ்வொரு வினாடி compute பயன்பாட்டிற்கும் வசூலிக்கிறது, எனவே அதன் அதிர்வெண்ணைக் (frequency) குறைப்பது நேரடியாகக் கட்டணத்தைக் குறைக்கும்.
serverless டெவலப்பர்களுக்கான பாடங்கள்
- உங்கள் தரவின் நிஜ உலகப் புதுப்பிப்பு வேகத்திற்கு (update cadence) ஏற்ப polling அதிர்வெண்ணை அமைக்கவும். ஒரு dataset ஒரு மணி நேரத்திற்கு சில முறை மட்டுமே மாறினால், 15 நிமிட இடைவெளி போதுமானதாக இருக்கும்.
- serverless சூழலில் அடிக்கடி polling செய்வது மறைமுகமான செலவை ஏற்படுத்தும் காரணியாகும்; நிமிடத்திற்கு ஒரு கூடுதல் கோரிக்கை கூட database-ஐ 'scale down' ஆக விடாமல் தடுக்கும்.
- சிறிய கட்டமைப்பு மாற்றங்கள் (configuration tweaks), ஒரு பெரிய கட்டமைப்பு மாற்றமின்றி (architectural overhaul) பெரும் சேமிப்பைத் தரும்.
சுருக்கமாகச் சொன்னால்: ஒரு சிறிய constant மாற்றம், எப்போதும் இயங்கிக் கொண்டிருந்த database-ஐ ஒரு உண்மையான serverless அங்கமாக மாற்றியது, இதன் மூலம் dashboard-ன் பயனைப் பாதிக்காமல் compute செலவைக் குறைத்தது. Neon அல்லது அது போன்ற வினாடிக்குக் கட்டணம் வசூலிக்கும் சேவைகளைப் பயன்படுத்தும் எந்தவொரு குழுவிற்கும், polling இடைவெளிகளை மறுபரிசீலனை செய்வது இன்று சோதித்துப் பார்க்க வேண்டிய ஒரு சிறந்த வழியாகும்.
