ಒಬ್ಬ ಡೆವಲಪರ್ ಕ್ಲೈಂಟ್-ಸೈಡ್ ಪೋಲಿಂಗ್ ಇಂಟರ್ವಲ್ ಅನ್ನು 30 ಸೆಕೆಂಡುಗಳಿಂದ 15 ನಿಮಿಷಗಳಿಗೆ ವಿಸ್ತರಿಸುವ ಮೂಲಕ Neon ನ ಸರ್ವರ್‌ಲೆಸ್-ಡೇಟಾಬೇಸ್ ಕಂಪ್ಯೂಟ್ ಶುಲ್ಕವನ್ನು ಕಡಿಮೆ ಮಾಡಿದರು. ಈ ದೀರ್ಘ ವಿರಾಮವು ಡೇಟಾಬೇಸ್ ಅನ್ನು ಸುದೀರ್ಘ ಕಾಲ ನಿಷ್ಕ್ರಿಯವಾಗಿರಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ, ಇದರಿಂದ ಅದು 'scale to zero' ಸ್ಥಿತಿಗೆ ತಲುಪಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಇದು ನಿರಂತರವಾದ 30-ಸೆಕೆಂಡ್ ಪೋಲಿಂಗ್‌ನಿಂದ ವ್ಯಯವಾಗುತ್ತಿದ್ದ ಕಂಪ್ಯೂಟ್ ಕ್ರೆಡಿಟ್‌ಗಳನ್ನು ಉಳಿಸುತ್ತದೆ.

Neon ತನ್ನ ಕಂಪ್ಯೂಟ್ ಇಂಜಿನ್ ಚಾಲನೆಯಲ್ಲಿರುವ ಪ್ರತಿ ಸೆಕೆಂಡಿಗೂ ಬಿಲ್ ಮಾಡುತ್ತದೆ. ಸಾಮಾನ್ಯ ಸರ್ವರ್‌ಲೆಸ್ ಸೆಟಪ್‌ನಲ್ಲಿ, ಯಾವುದೇ ವಿನಂತಿ (request)—ಅದು ಎಷ್ಟೇ ಚಿಕ್ಕದಿದ್ದರೂ—ಇಂಜಿನ್ ಅನ್ನು ಸಕ್ರಿಯವಾಗಿರಿಸುತ್ತದೆ. ಲೇಖಕರ ಟಿವಿ ಡ್ಯಾಶ್‌ಬೋರ್ಡ್ ಪ್ರತಿ ಅರ್ಧ ನಿಮಿಷಕ್ಕೊಮ್ಮೆ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಕ್ವೆರಿ ಮಾಡುತ್ತಿತ್ತು, ಆದರೆ ಪ್ರದರ್ಶಿತ ಡೇಟಾ ಬಳಕೆದಾರರು ಮ್ಯಾನುಯಲ್ ಆಗಿ ಸಿಂಕ್ ಮಾಡಿದಾಗ ಅಥವಾ ಹೊಸ ಪ್ರಸಾರವು ಪ್ರಾರಂಭವಾದಾಗ ಮಾತ್ರ ಬದಲಾಗುತ್ತಿತ್ತು. ಈ ಮಾದರಿಯು Neon ನ ಕಂಪ್ಯೂಟ್ ಪೂಲ್ ಬಿಲ್ಲಿಂಗ್ ನಿಲ್ಲಿಸುವ 'zero-state' ತಲುಪದಂತೆ ತಡೆಯುತ್ತಿತ್ತು, ಇದರಿಂದಾಗಿ Vercel ವೆಚ್ಚದ ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ನಲ್ಲಿ ನಿಯಮಿತವಾಗಿ ವೆಚ್ಚದ ಏರಿಳಿತಗಳು ಕಂಡುಬರುತ್ತಿದ್ದವು.

ಮೂಲ ಪೋಲಿಂಗ್ ಏಕೆ ಮುಖ್ಯವಾಗಿತ್ತು

  • ಡ್ಯಾಶ್‌ಬೋರ್ಡ್ ಸಂಪೂರ್ಣವಾಗಿ ಕ್ಲೈಂಟ್-ಸೈಡ್ React ಕಾಂಪೊನೆಂಟ್ ಆಗಿತ್ತು, ಆದ್ದರಿಂದ ಪ್ರತಿ ಬ್ರೌಸರ್ ಇನ್‌ಸ್ಟೆನ್ಸ್ ನೇರವಾಗಿ Neon ಅನ್ನು ಸಂಪರ್ಕಿಸುತ್ತಿತ್ತು.
  • Neon ನ ಬೆಲೆ ನಿಗದಿಪಡಿಸುವಿಕೆ ವಿನಂತಿಗಳ ಸಂಖ್ಯೆಗೆ (request count) ಬದಲಾಗಿ ಸಕ್ರಿಯ ಕಂಪ್ಯೂಟ್ ಸಮಯಕ್ಕೆ (active compute time) ಸಂಬಂಧಿಸಿದೆ, ಆದ್ದರಿಂದ ಪ್ರತಿ 30 ಸೆಕೆಂಡಿಗೆ ಒಂದೇ ಒಂದು ವಿನಂತಿಯು ಮೂಲ ಶುಲ್ಕವನ್ನು ಮುಂದುವರಿಸುತ್ತಿತ್ತು.
  • ಲೇಖಕರ Vercel ಮಾನಿಟರಿಂಗ್ ಟ್ರಾಫಿಕ್ ಮತ್ತು Neon ಕಂಪ್ಯೂಟ್ ಬಳಕೆಯ ನಡುವೆ ಸಂಬಂಧವಿದೆಯೆಂದು ತೋರಿಸಿತು, ಇದು ಪೋಲಿಂಗ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಸಕ್ರಿಯವಾಗಿರಿಸುತ್ತಿತ್ತು ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿತು.

ವಿಫಲವಾದ ಪರಿಹಾರಗಳು

ಒಂದು ಕ್ವಿಕ್ ಡಿಬೌನ್ಸ್ (debounce)—ಕೊನೆಯ ಬಳಕೆದಾರರ ಸಂವಹನದ ನಂತರ ವಿನಂತಿಯನ್ನು ವಿಳಂಬ ಮಾಡುವುದು—ಯಾವುದೇ ಪ್ರಯೋಜನ ನೀಡಲಿಲ್ಲ, ಏಕೆಂದರೆ ಟೈಮರ್ ಇನ್ನೂ ಪ್ರತಿ 30 ಸೆಕೆಂಡಿಗೆ ಕಾರ್ಯಗತಗೊಳ್ಳುತ್ತಿತ್ತು. ನಾನು Vercel Edge Functions ಬಳಸಲು ಪ್ರಯತ್ನಿಸಿದೆ, ಆದರೆ ಅದು ಹೆಚ್ಚಿನ ಸಂಕೀರ್ಣತೆಯನ್ನು ಸೇರಿಸಿತು.

ಸರಳ ಪರಿಹಾರ

ರಿಫ್ರೆಶ್ ಇಂಟರ್ವಲ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವ ಕಾನ್ಸ್ಟಂಟ್ (constant) ಅನ್ನು ಬದಲಾಯಿಸುವುದು ಮಾತ್ರ ಅಗತ್ಯವಿರುವ ಏಕೈಕ ಕೋಡ್ ಬದಲಾವಣೆಯಾಗಿತ್ತು:

  • 30 ಸೆಕೆಂಡುಗಳಿಂದ5 ನಿಮಿಷಗಳು
  • ನಂತರ 5 ನಿಮಿಷಗಳಿಂದ15 ನಿಮಿಷಗಳು

15 ನಿಮಿಷಗಳ ಅಂತರದಲ್ಲಿ, Neon ನಿಷ್ಕ್ರಿಯತೆಯನ್ನು ಗುರುತಿಸಲು ಮತ್ತು ತನ್ನ ಕಂಪ್ಯೂಟ್ ಸಂಪನ್ಮೂಲಗಳನ್ನು ನಿಲ್ಲಿಸಲು (spin down) ಸಾಕಷ್ಟು ಸಮಯವನ್ನು ಪಡೆಯುತ್ತದೆ. ಡ್ಯಾಶ್‌ಬೋರ್ಡ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ: ಬಳಕೆದಾರರು ಮ್ಯಾನುಯಲ್ ಆಗಿ ರಿಫ್ರೆಶ್ ಮಾಡಿದಾಗ ಇತ್ತೀಚಿನ ಡೇಟಾವನ್ನು ನೋಡಬಹುದು ಮತ್ತು ಸಾಂದರ್ಭಿಕ ಸ್ವಯಂಚಾಲಿತ ಪೋಲಿಂಗ್ ಯಾವುದೇ ನಿರಂತರ ಗದ್ದಲವಿಲ್ಲದೆ ಹೊಸ ಪ್ರಸಾರವನ್ನು ಪತ್ತೆಹಚ್ಚುತ್ತದೆ.

ಕ್ಲೈಂಟ್-ಸೈಡ್ ಪೋಲಿಂಗ್ ಅನ್ನು ಏಕೆ ಉಳಿಸಿಕೊಳ್ಳಬೇಕು?

  1. ಸರಳತೆ – ಯಾವುದೇ ಹೆಚ್ಚುವರಿ ಸರ್ವರ್‌ಲೆಸ್ ಫಂಕ್ಷನ್‌ಗಳು ಅಥವಾ ಬಿಲ್ಡ್ ಹಂತಗಳ ಅಗತ್ಯವಿಲ್ಲ.
  2. ಬಳಕೆದಾರರ ನಿರೀಕ್ಷೆಗಳು – ಡ್ಯಾಶ್‌ಬೋರ್ಡ್ ಈಗಾಗಲೇ ಕ್ಲೈಂಟ್ ಆಪ್‌ನಂತೆ ವರ್ತಿಸುತ್ತದೆ; ಮ್ಯಾನುಯಲ್ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ಇಂದಿಗೂ ತಕ್ಷಣದ ಅಪ್‌ಡೇಟ್ ಸಿಗುತ್ತದೆ.
  3. ವೆಚ್ಚದ ಮಾದರಿಯೊಂದಿಗೆ ಹೊಂದಾಣಿಕೆ – Neon ಪ್ರತಿ ವಿನಂತಿಗೆ ಅಲ್ಲದೆ, ಪ್ರತಿ ಸೆಕೆಂಡ್ ಕಂಪ್ಯೂಟ್ ಬಳಕೆಗೆ ಶುಲ್ಕ ವಿಧಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಪೋಲಿಂಗ್ ಆವರ್ತನವನ್ನು ಕಡಿಮೆ ಮಾಡುವುದು ನೇರವಾಗಿ ಬಿಲ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.

ಸರ್ವರ್‌ಲೆಸ್ ಡೆವಲಪರ್‌ಗಳಿಗೆ ಪಾಠಗಳು

  • ನಿಮ್ಮ ಡೇಟಾದ ನೈಜ-ಪ್ರಪಂಚದ ಅಪ್‌ಡೇಟ್ ವೇಗಕ್ಕೆ (cadence) ಪೋಲಿಂಗ್ ಆವರ್ತನವನ್ನು ಹೊಂದಿಸಿ. ಒಂದು ಡೇಟಾ ಸೆಟ್ ಗಂಟೆಗೆ ಕೆಲವೇ ಬಾರಿ ಬದಲಾಗುತ್ತಿದ್ದರೆ, 15 ನಿಮಿಷಗಳ ಅಂತರವು ಸಾಕು.
  • ಸರ್ವರ್‌ಲೆಸ್ ಪರಿಸರದಲ್ಲಿ ಪದೇ ಪದೇ ಪೋಲಿಂಗ್ ಮಾಡುವುದು ಒಂದು ಗುಪ್ತ ವೆಚ್ಚದ ಕಾರಣವಾಗಿದೆ; ಪ್ರತಿ ನಿಮಿಷಕ್ಕೆ ಒಂದು ಹೆಚ್ಚುವರಿ ವಿನಂತಿಯು ಡೇಟಾಬೇಸ್ ಎಂದಿಗೂ ಸ್ಕೇಲ್ ಡೌನ್ ಆಗದಂತೆ ತಡೆಯಬಹುದು.
  • ಸಣ್ಣ ಕಾನ್ಫಿಗರೇಶನ್ ಬದಲಾವಣೆಗಳು ಯಾವುದೇ ವಾಸ್ತುಶಿಲ್ಪದ (architectural) ಸಂಪೂರ್ಣ ಬದಲಾವಣೆಯಿಲ್ಲದೆ ದೊಡ್ಡ ಮಟ್ಟದ ಉಳಿತಾಯವನ್ನು ನೀಡಬಹುದು.

ಅಂತಿಮವಾಗಿ: ಕೇವಲ ಒಂದು ಕಾನ್ಸ್ಟಂಟ್ ಬದಲಾವಣೆಯು ನಿರಂತರವಾಗಿ ಸಕ್ರಿಯವಾಗಿದ್ದ ಡೇಟಾಬೇಸ್ ಅನ್ನು ನಿಜವಾದ ಸರ್ವರ್‌ಲೆಸ್ ಕಾಂಪೊನೆಂಟ್ ಆಗಿ ಪರಿವರ್ತಿಸಿತು, ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ನ ಉಪಯುಕ್ತತೆಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತಲೇ ಕಂಪ್ಯೂಟ್ ವೆಚ್ಚವನ್ನು ಕಡಿಮೆ ಮಾಡಿತು. Neon ಅಥವಾ ಅಂತಹ ಪ್ರತಿ-ಸೆಕೆಂಡ್ ಕಂಪ್ಯೂಟ್ ಸೇವೆಗಳನ್ನು ಬಳಸುವ ಯಾವುದೇ ತಂಡಕ್ಕೆ, ಪೋಲಿಂಗ್ ಇಂಟರ್ವಲ್‌ಗಳನ್ನು ಮರುಪರಿಶೀಲಿಸುವುದು ಇಂದು ಪರೀಕ್ಷಿಸಲು ಯೋಗ್ಯವಾದ ಒಂದು ಸುಲಭ ಮತ್ತು ಪರಿಣಾಮಕಾರಿ ಕ್ರಮವಾಗಿದೆ.