മൂന്ന് API-കൾക്കായി മൂന്ന് സ്ലീപ്പ് ഇന്റർവലുകൾ
ഏപ്രിലിൽ ഞാൻ മൂന്ന് ഡയറക്ടറി സൈറ്റുകൾക്കായി ETL പൈപ്പ്ലൈനുകൾ നിർമ്മിച്ചു. ഓരോ സൈറ്റും വ്യത്യസ്തമായ API-കളാണ് ഉപയോഗിക്കുന്നത്: Steam, GitHub, HuggingFace.
ഓരോന്നിനും എനിക്ക് സ്ലീപ്പ് ഇന്റർവലുകൾ (sleep intervals) ക്രമീകരിക്കേണ്ടി വന്നു. അവയുടെ കണക്കുകളും, പരാജയപ്പെടാൻ സാധ്യതയുള്ള രീതികളും (failure modes), എറർ ഹാൻഡ്ലിംഗും (error handling) എല്ലാം വ്യത്യസ്തമാണ്. ഞാൻ എന്താണ് ഉപയോഗിക്കുന്നത് എന്നും അതിന്റെ കാരണവും താഴെ നൽകുന്നു.
Steam: 250ms സ്ലീപ്പ്
റേറ്റ് ലിമിറ്റുകളെ (rate limits) കുറിച്ച് Steam ഡോക്യുമെന്റേഷൻ വ്യക്തമല്ല. ഓരോ 5 മിനിറ്റിലും ഒരു IP-യിൽ നിന്ന് ഏകദേശം 200 റിക്വസ്റ്റുകൾ എന്ന രീതിയിലാണ് കമ്മ്യൂണിറ്റി ഡാറ്റ സൂചിപ്പിക്കുന്നത്. ഇതിനർത്ഥം 1.5 സെക്കൻഡ് ഇന്റർവൽ ഉപയോഗിക്കുന്നത് സുരക്ഷിതമാണ് എന്നാണ്.
പകരം ഞാൻ 250ms ആണ് ഉപയോഗിക്കുന്നത്. എന്റെ നൈറ്റ്ലി ജോബ് (nightly job) 60 ഗെയിം എൻട്രികൾ മാത്രമേ പ്രോസസ്സ് ചെയ്യുന്നുള്ളൂ. 250ms ഉപയോഗിക്കുമ്പോൾ ആകെ സ്ലീപ്പ് സമയം 15 സെക്കൻഡ് മാത്രമാണ്. എന്നാൽ 1.5 സെക്കൻഡ് ആണെങ്കിൽ അത് 90 സെക്കൻഡായി മാറും. ഒന്നിലധികം സൈറ്റുകൾ പ്രോസസ്സ് ചെയ്യുമ്പോൾ സമയം ലാഭിക്കുന്നത് പ്രധാനമാണ്.
Steam ഒരു എറർ നൽകിയാൽ ജോബ് നിൽക്കില്ല. അത് ആ എറർ ലോഗ് ചെയ്യുകയും അടുത്ത ഐറ്റത്തിലേക്ക് മാറുകയും ചെയ്യുന്നു. അടുത്ത ദിവസം രാത്രി ഡാറ്റ അപ്ഡേറ്റ് ചെയ്യപ്പെടും.
GitHub: 100ms സ്ലീപ്പ്
GitHub വളരെ വ്യക്തമാണ്. ഓതന്റിക്കേഷൻ ഇല്ലാത്ത ഉപയോക്താക്കൾക്ക് മണിക്കൂറിൽ 60 റിക്വസ്റ്റുകൾ ലഭിക്കും. ടോക്കൺ (token) ഉള്ള ഉപയോക്താക്കൾക്ക് മണിക്കൂറിൽ 5,000 റിക്വസ്റ്റുകൾ ലഭിക്കും.
ഒരു മര്യാദയുടെ ഭാഗമായി (politeness measure) ഞാൻ 100ms സ്ലീപ്പ് ഉപയോഗിക്കുന്നു. റേറ്റ് ലിമിറ്റിന്റെ കാര്യത്തിൽ ടോക്കൺ ആണ് പ്രധാന പങ്ക് വഹിക്കുന്നത്. എന്റെ പൈപ്പ്ലൈൻ കോർ REST API ആണ് ഉപയോഗിക്കുന്നത്, സെർച്ച് API അല്ല. ഇത് വളരെ ഉയർന്ന ലിമിറ്റുകൾ അനുവദിക്കുന്നു.
HuggingFace: No sleep
ആഴ്ചകളായി രാത്രികാലങ്ങളിൽ റൺ ചെയ്തിട്ടും ഞാൻ റേറ്റ് ലിമിറ്റിൽ എത്തിയിട്ടില്ല. എന്റെ പൈപ്പ്ലൈൻ പോലുള്ള ബാച്ച് ടൂളുകൾക്കായി രൂപകൽപ്പന ചെയ്തതാണ് ഈ രജിസ്ട്രി 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
