ಮೂರು APIಗಳಿಗಾಗಿ ಮೂರು ಸ್ಲೀಪ್ ಇಂಟರ್ವಲ್ಗಳು
ನಾನು ಏಪ್ರಿಲ್ನಲ್ಲಿ ಮೂರು ಡೈರೆಕ್ಟರಿ ಸೈಟ್ಗಳಿಗಾಗಿ ETL ಪೈಪ್ಲೈನ್ಗಳನ್ನು ನಿರ್ಮಿಸಿದೆ. ಪ್ರತಿಯೊಂದು ಸೈಟ್ ವಿಭಿನ್ನ API ಅನ್ನು ಬಳಸುತ್ತದೆ: Steam, GitHub, ಮತ್ತು HuggingFace.
ನಾನು ಪ್ರತಿಯೊಂದಕ್ಕೂ ಸ್ಲೀಪ್ ಇಂಟರ್ವಲ್ಗಳನ್ನು (sleep intervals) ಹೊಂದಿಸಬೇಕಾಯಿತು. ಅವುಗಳ ಸಂಖ್ಯೆಗಳು, ವೈಫಲ್ಯದ ವಿಧಾನಗಳು (failure modes) ಮತ್ತು ಎರರ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್ (error handling) ಎಲ್ಲವೂ ವಿಭಿನ್ನವಾಗಿವೆ. ನಾನು ಏನನ್ನು ಬಳಸುತ್ತೇನೆ ಮತ್ತು ಏಕೆ ಎಂಬುದು ಇಲ್ಲಿದೆ.
Steam: 250ms ಸ್ಲೀಪ್
Steam ಡಾಕ್ಯುಮೆಂಟೇಶನ್ ರೇಟ್ ಲಿಮಿಟ್ಗಳ (rate limits) ಬಗ್ಗೆ ಅಸ್ಪಷ್ಟವಾಗಿದೆ. ಸಮುದಾಯದ ದತ್ತಾಂಶದ ಪ್ರಕಾರ ಪ್ರತಿ IP ಗೆ ಪ್ರತಿ 5 ನಿಮಿಷಕ್ಕೆ ಸರಿಸುಮಾರು 200 ರಿಕ್ವೆಸ್ಟ್ಗಳು ಇರುತ್ತವೆ. ಇದರರ್ಥ 1.5 ಸೆಕೆಂಡ್ಗಳ ಇಂಟರ್ವಲ್ ಸುರಕ್ಷಿತವಾಗಿದೆ.
ಬದಲಾಗಿ ನಾನು 250ms ಬಳಸುತ್ತೇನೆ. ನನ್ನ ರಾತ್ರಿ ಕೆಲಸವು (nightly job) ಕೇವಲ 60 ಗೇಮ್ ಎಂಟ್ರಿಗಳನ್ನು ಪ್ರೊಸೆಸ್ ಮಾಡುತ್ತದೆ. 250ms ನಲ್ಲಿ, ಒಟ್ಟು ಸ್ಲೀಪ್ ಸಮಯ 15 ಸೆಕೆಂಡ್ಗಳು. 1.5 ಸೆಕೆಂಡ್ಗಳಲ್ಲಿ, ಅದು 90 ಸೆಕೆಂಡ್ಗಳಾಗುತ್ತದೆ. ನೀವು ಹಲವಾರು ಸೈಟ್ಗಳನ್ನು ಪ್ರೊಸೆಸ್ ಮಾಡುವಾಗ ಸಮಯ ಉಳಿಸುವುದು ಮುಖ್ಯವಾಗುತ್ತದೆ.
Steam ಒಂದು ಎರರ್ ಅನ್ನು ನೀಡಿದರೆ, ಕೆಲಸವು ನಿಲ್ಲುವುದಿಲ್ಲ. ಅದು ಎರರ್ ಅನ್ನು ಲಾಗ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಮುಂದಿನ ಐಟಂಗೆ ಚಲಿಸುತ್ತದೆ. ದತ್ತಾಂಶವು ಮರುದಿನ ರಾತ್ರಿ ಅಪ್ಡೇಟ್ ಆಗುತ್ತದೆ.
GitHub: 100ms ಸ್ಲೀಪ್
GitHub ಬಹಳ ಸ್ಪಷ್ಟವಾಗಿದೆ. ಅನ್ಅಥೆಂಟಿಕೇಟೆಡ್ (Unauthenticated) ಬಳಕೆದಾರರಿಗೆ ಗಂಟೆಗೆ 60 ರಿಕ್ವೆಸ್ಟ್ಗಳು ಸಿಗುತ್ತವೆ. ಟೋಕನ್ ಹೊಂದಿರುವ ಬಳಕೆದಾರರಿಗೆ ಗಂಟೆಗೆ 5,000 ರಿಕ್ವೆಸ್ಟ್ಗಳು ಸಿಗುತ್ತವೆ.
ನಾನು ಮರ್ಯಾದೆಯ ಕ್ರಮವಾಗಿ (politeness measure) 100ms ಸ್ಲೀಪ್ ಬಳಸುತ್ತೇನೆ. ರೇಟ್ ಲಿಮಿಟ್ಗಾಗಿ ಟೋಕನ್ ಹೆಚ್ಚಿನ ಕೆಲಸ ಮಾಡುತ್ತದೆ. ನನ್ನ ಪೈಪ್ಲೈನ್ ಕೋರ್ REST API ಅನ್ನು ಬಳಸುತ್ತದೆ, ಸರ್ಚ್ API ಅಲ್ಲ. ಇದು ಹೆಚ್ಚಿನ ಮಿತಿಗಳಿಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ.
HuggingFace: ಯಾವುದೇ ಸ್ಲೀಪ್ ಇಲ್ಲ
ವಾರಗಟ್ಟಲೆ ರಾತ್ರಿ ಕೆಲಸಗಳ ನಂತರವೂ ನಾನು ರೇಟ್ ಲಿಮಿಟ್ಗೆ ತಲುಪಿಲ್ಲ. ರಿಜಿಸ್ಟ್ರಿ API ಅನ್ನು ನನ್ನಂತೆಯೇ ಇರುವ ಬ್ಯಾಚ್ ಟೂಲ್ಗಳಿಗಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ.
ನಾನು ಏಕಕಾಲದಲ್ಲಿ 100 ಮಾಡೆಲ್ಗಳವರೆಗೆ ಫೆಚ್ ಮಾಡುತ್ತೇನೆ. ಮಿತಿಗಳನ್ನು ಇನ್ನಷ್ಟು ಹೆಚ್ಚಿಸಲು ನಾನು ಅಥೆಂಟಿಕೇಶನ್ ಟೋಕನ್ ಬಳಸುತ್ತೇನೆ. 100 ಮಾಡೆಲ್ಗಳಿಗಾಗಿ, ಯಾವುದೇ ಸ್ಲೀಪ್ ಇಲ್ಲದಿರುವುದು ಸರಳವಾದ ಪರಿಹಾರವಾಗಿದೆ.
ಸಾರಾಂಶ ಕೋಷ್ಟಕ (Summary Table):
• Steam: 250ms ಸ್ಲೀಪ್. ನಾನ್-ಫೇಟಲ್ ಎರರ್ಗಳು (Non-fatal errors). • GitHub: 100ms ಸ್ಲೀಪ್. ನಾನ್-ಫೇಟಲ್ ಎರರ್ಗಳು (Non-fatal errors). • HuggingFace: ಯಾವುದೇ ಸ್ಲೀಪ್ ಇಲ್ಲ. ನಾನ್-ಫೇಟಲ್ ಎರರ್ಗಳು (Non-fatal errors).
ಸ್ಲೀಪ್ ಇಂಟರ್ವಲ್ ಒಂದು ಊಹೆಯಾಗಿದೆ. ನಿಜವಾದ ರಕ್ಷಣೆ ಎಂದರೆ ನಾನು ಎರರ್ಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತೇನೆ ಎಂಬುದು. ಪ್ರತಿಯೊಂದು API ಕಾಲ್ ಕೂಡ try/catch ಬ್ಲಾಕ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಒಂದು ಕಾಲ್ ವಿಫಲವಾದರೆ, ಸಿಸ್ಟಮ್ ಕ್ರ್ಯಾಶ್ ಆಗುವ ಬದಲು ಫಾಲ್ಬ್ಯಾಕ್ ರೋ (fallback row) ಅನ್ನು ಬರೆಯುತ್ತದೆ.
ಸ್ಲೀಪ್ ಇಂಟರ್ವಲ್ ನೀವು ಎಷ್ಟು ಬಾರಿ ಮಿತಿಯನ್ನು ತಲುಪುತ್ತೀರಿ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. ಎರರ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್ ನೀವು ಮಿತಿಯನ್ನು ತಲುಪಿದಾಗ ಏನಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ.
Optional learning community: https://t.me/GyaanSetuAi
