ക്ലയന്റ് സൈഡ് പോളിംഗ് ഇന്റർവെൽ (polling interval) 30 സെക്കൻഡിൽ നിന്ന് 15 മിനിറ്റായി വർദ്ധിപ്പിച്ചതിലൂടെ ഒരു ഡെവലപ്പർ Neon-ന്റെ സെർവ്ലെസ് ഡാറ്റാബേസ് കമ്പ്യൂട്ട് ചാർജുകൾ കുറച്ചു. ഈ നീണ്ട ഇടവേള ഡാറ്റാബേസിനെ 'സ്കെയിൽ ടു സീറോ' (scale to zero) ചെയ്യാൻ ആവശ്യമായ സമയം നൽകുന്നു, ഇത് നിരന്തരമായ 30 സെക്കൻഡ് പോളിംഗ് മൂലമുണ്ടാകുന്ന കമ്പ്യൂട്ട് ക്രെഡിറ്റുകൾ ഒഴിവാക്കുന്നു.
Neon-ന്റെ കമ്പ്യൂട്ട് എഞ്ചിൻ പ്രവർത്തിക്കുന്ന ഓരോ സെക്കൻഡിലും ബില്ലിംഗ് നടക്കുന്നു. ഒരു സാധാരണ സെർവ്ലെസ് സെറ്റപ്പിൽ, എത്ര ചെറിയ അഭ്യർത്ഥന (request) ആണെങ്കിലും അത് എഞ്ചിനെ സജീവമായി നിലനിർത്തുന്നു. ഡാറ്റാ പ്രദർശിപ്പിക്കുന്നത് ഒരു ഉപയോക്താവ് മാനുവലായി സിങ്ക് ചെയ്യുമ്പോഴോ അല്ലെങ്കിൽ പുതിയൊരു ബ്രോഡ്കാസ്റ്റ് ആരംഭിക്കുമ്പോഴോ മാത്രമാണെങ്കിലും, എഴുത്തുകാരന്റെ ടിവി ഡാഷ്ബോർഡ് ഓരോ അര മിനിറ്റിലും ഡാറ്റാബേസിനെ ക്വറി (query) ചെയ്തിരുന്നു. ഈ രീതി Neon-ന്റെ കമ്പ്യൂട്ട് പൂൾ ബില്ലിംഗ് നിർത്തുന്ന 'സീറോ-സ്റ്റേറ്റിൽ' (zero-state) എത്തുന്നതിനെ തടയുകയും, Vercel കോസ്റ്റ് ഡാഷ്ബോർഡിൽ നിരന്തരമായ ചിലവ് വർദ്ധനവ് ഉണ്ടാക്കുകയും ചെയ്തു.
എന്തുകൊണ്ടാണ് യഥാർത്ഥ പോളിംഗ് പ്രശ്നമായത്
- ഡാഷ്ബോർഡ് പൂർണ്ണമായും ഒരു ക്ലയന്റ് സൈഡ് React കമ്പോണന്റ് ആയിരുന്നു, അതിനാൽ ഓരോ ബ്രൗസർ ഇൻസ്റ്റൻസും നേരിട്ട് Neon-നെ സമീപിച്ചു.
- Neon-ന്റെ വിലനിർണ്ണയം അഭ്യർത്ഥനകളുടെ എണ്ണത്തിനല്ല, മറിച്ച് സജീവമായ കമ്പ്യൂട്ട് സമയത്തിനാണ്, അതിനാൽ ഓരോ 30 സെക്കൻഡിലും നടത്തുന്ന ഒരു ഹിറ്റ് പോലും അടിസ്ഥാന ചാർജ് നിലനിർത്തുന്നു.
- ട്രാഫിക്കും Neon കമ്പ്യൂട്ട് ഉപയോഗവും തമ്മിലുള്ള ബന്ധം എഴുത്തുകാരന്റെ Vercel മോണിറ്ററിംഗിൽ കാണാൻ കഴിഞ്ഞു, ഇത് പോളിംഗ് ഡാറ്റാബേസിനെ സജീവമായി നിലനിർത്തുന്നുണ്ടെന്ന് സ്ഥിരീകരിച്ചു.
പരാജയപ്പെട്ട പരിഹാരങ്ങൾ
ഒരു ക്വിക്ക് ഡീബൗൺസ് (debounce)—അതായത് അവസാനത്തെ യൂസർ ഇന്ററാക്ഷന് ശേഷം അഭ്യർത്ഥന വൈകിപ്പിക്കുന്നത്—സഹായിച്ചില്ല, കാരണം ടൈമർ ഇപ്പോഴും ഓരോ 30 സെക്കൻഡിലും പ്രവർത്തിച്ചിരുന്നു. ഞാൻ Vercel Edge Functions ഉപയോഗിക്കാനും ശ്രമിച്ചു, പക്ഷേ അത് അമിതമായ സങ്കീർണ്ണത വർദ്ധിപ്പിച്ചു.
ലളിതമായ പരിഹാരം
റിഫ്രഷ് ഇന്റർവെൽ നിർവചിക്കുന്ന ഒരു കോൺസ്റ്റന്റ് (constant) മാറ്റിയാൽ മാത്രം മതിയായിരുന്നു:
- 30 സെക്കൻഡ് → 5 മിനിറ്റ്
- പിന്നീട് 5 മിനിറ്റ് → 15 മിനിറ്റ്
15 മിനിറ്റ് എന്ന ഇടവേളയിൽ, പ്രവർത്തനമില്ലായ്മ തിരിച്ചറിയാനും കമ്പ്യൂട്ട് റിസോഴ്സുകൾ സ്പിൻ ഡൗൺ (spin down) ചെയ്യാനും Neon-ന് മതിയായ സമയം ലഭിക്കുന്നു. ഡാഷ്ബോർഡ് ഇപ്പോഴും ഫലപ്രദമായി പ്രവർത്തിക്കുന്നു: ഉപയോക്താക്കൾ മാനുവലായി റിഫ്രഷ് ചെയ്യുമ്പോൾ ഏറ്റവും പുതിയ ഡാറ്റ കാണാൻ സാധിക്കും, കൂടാതെ ഇടയ്ക്കിടെയുള്ള ഓട്ടോമാറ്റിക് പോളിംഗിലൂടെ പുതിയ ബ്രോഡ്കാസ്റ്റുകൾ തടസ്സമില്ലാതെ ലഭിക്കുകയും ചെയ്യും.
എന്തുകൊണ്ട് ക്ലയന്റ് സൈഡിൽ തന്നെ പോളിംഗ് തുടരണം?
- ലളിതം – അധികമായ സെർവ്ലെസ് ഫംഗ്ഷനുകളോ ബിൽഡ് സ്റ്റെപ്പുകളോ ആവശ്യമില്ല.
- ഉപയോക്താക്കളുടെ പ്രതീക്ഷകൾ – ഡാഷ്ബോർഡ് നിലവിൽ ഒരു ക്ലയന്റ് ആപ്പ് പോലെയാണ് പ്രവർത്തിക്കുന്നത്; മാനുവൽ ക്ലിക്ക് ചെയ്യുമ്പോൾ ഇപ്പോഴും ഇൻസ്റ്റന്റ് അപ്ഡേറ്റ് ലഭിക്കുന്നു.
- ചെലവ് മാതൃകയുമായുള്ള പൊരുത്തം – Neon കമ്പ്യൂട്ട് ഉപയോഗിക്കുന്ന ഓരോ സെക്കൻഡിലും ചാർജ് ചെയ്യുന്നു, അഭ്യർത്ഥനകൾക്ക് (requests) അല്ല, അതിനാൽ പോളിംഗിന്റെ ആവൃത്തി കുറയ്ക്കുന്നത് ബില്ല് നേരിട്ട് കുറയ്ക്കുന്നു.
സെർവ്ലെസ് ഡെവലപ്പർമാർക്കുള്ള പാഠങ്ങൾ
- പോളിംഗ് ആവൃത്തി നിങ്ങളുടെ ഡാറ്റയുടെ യഥാർത്ഥ അപ്ഡേറ്റ് വേഗതയുമായി (update cadence) പൊരുത്തപ്പെടുത്തുക. ഒരു ഡാറ്റാസെറ്റ് മണിക്കൂറിൽ ഏതാനും തവണ മാത്രമേ മാറുന്നുള്ളൂ എങ്കിൽ, 15 മിനിറ്റ് ഇടവേള മതിയെന്ന് പറയാം.
- സെർവ്ലെസ് എൻവയോൺമെന്റിലെ നിരന്തരമായ പോളിംഗ് മറഞ്ഞിരിക്കുന്ന ചിലവുകൾ വർദ്ധിപ്പിക്കുന്നു; മിനിറ്റിൽ ഒരു അധിക അഭ്യർത്ഥന പോലും ഡാറ്റാബേസിനെ സ്കെയിൽ ഡൗൺ ചെയ്യുന്നതിൽ നിന്ന് തടഞ്ഞേക്കാം.
- വലിയ മാറ്റങ്ങൾ വരുത്താതെ തന്നെ ചെറിയ കോൺഫിഗറേഷൻ മാറ്റങ്ങളിലൂടെ വലിയ ലാഭമുണ്ടാക്കാൻ സാധിക്കും.
ചുരുക്കത്തിൽ: ഒരു ചെറിയ കോൺസ്റ്റന്റ് മാറ്റം കൊണ്ട് നിരന്തരം സജീവമായിരുന്ന ഡാറ്റാബേസിനെ യഥാർത്ഥ സെർവ്ലെസ് കമ്പോണന്റാക്കി മാറ്റാനും, ഡാഷ്ബോർഡിന്റെ ഉപയോഗക്ഷമത നിലനിർത്തിക്കൊണ്ടുതന്നെ കമ്പ്യൂട്ട് ചിലവ് കുറയ്ക്കാനും സാധിച്ചു. Neon അല്ലെങ്കിൽ സമാനമായ സെക്കൻഡ് അടിസ്ഥാനത്തിലുള്ള കമ്പ്യൂട്ട് സേവനങ്ങൾ ഉപയോഗിക്കുന്ന ഏതൊരു ടീമിനും, പോളിംഗ് ഇന്റർവെലുകൾ പരിശോധിക്കുന്നത് ഇന്ന് തന്നെ പരീക്ഷിച്ചു നോക്കേണ്ട ഒരു മികച്ച മാർഗമാണ്.
