æçµæŽæ°:
APIã¬ãŒããªãããã®ä»çµã¿ â 429ãåºããäœã確èªããïŒ
䜿ããåæ°ãšãåŸ
ã¡æ¹ãåããŠèãã
å·Šã¯è£å
åã®ããŒã¯ã³ãã±ããã®äŸã§ããå³ã®30ç§ã¯èª¬æçšã®å¿çã§ããã¹ãŠã®APIã®å¶éå€ã§ã¯ãããŸããã
ã²ãã ååæ€çŽ¢
APIãäœåºŠãåŒãã ãã429ã£ãŠè¿ã£ãŠãããã
ãã³ã®ã³å
ç æ±ºããããæéå
ã®åŒã³åºãéãå¶éãã
ã¬ãŒããªãããã«éããã®ãããããªããããŸãå¿çãš
APIã®èŠçŽã確èªããããäžã§ã¯ãåã60ç§æ ã§3åãŸã§ããšããå°ããªäŸããèŠããã
ã²ãã ããŒããªãã§ããããå¶éããã®ïŒãããã䜿ãããŠãããã°ããã®ã«ïŒ
ãã³ã®ã³å
ç æ°æã¡ã¯åãããã©ãå¶éããªããšå€§å€ãªããšã«ãªãããããšãã°1人ã®ãŠãŒã¶ãŒãæ¯ç§1äžåãªã¯ãšã¹ããéã£ãããåŠçèœåãè¶
ãããšä»ã®ãŠãŒã¶ãŒã䜿ããªããªãããããããã
ã¬ãŒããªãããã«ã¯äž»ã«3ã€ã®ç®çããããã ã
ãµãŒããŒã®ä¿è·ããŠãŒã¶ãŒéã®å
¬å¹³æ§ã®ç¢ºä¿ããããŠ
DDoSæ»æã®ãããªæªæããã¢ã¯ã»ã¹ãžã®é²åŸ¡ã ãã
ã²ãã ãªãã»ã©ãã¿ããªãå¿«é©ã«äœ¿ããããã«ããããã®ä»çµã¿ãªãã ãïŒå
·äœçã«ã¯ã©ããã£ãŠåæ°ãæ°ããŠãã®ïŒ
ãã³ã®ã³å
ç äžçªã·ã³ãã«ãªã®ã¯ãåºå®ãŠã£ã³ããŠæ¹åŒãã ããããšãã°ã1åéã«100åãŸã§ããšããã«ãŒã«ãªããæ¯å00ç§ã«ã«ãŠã³ã¿ãŒããŒãã«
ãªã»ããããŠããªã¯ãšã¹ããæ¥ããã³ã«1ãè¶³ããŠããã100åãŸã§ã¯åãä»ãã101åç®ããæ¬¡ã®
ãªã»ãããŸã§æåŠãããã ãå®è£
ãç°¡åã ããåºã䜿ãããŠããã
ã²ãã ã·ã³ãã«ã§ãããïŒã§ãäœã匱ç¹ãšãããã®ïŒ
ãã³ã®ã³å
ç ãããšããã«æ°ã¥ããããåºå®ãŠã£ã³ããŠã«ã¯ãå¢çåé¡ãããããã ãããšãã°0:59ã«100åã1:00ã«ãŸã100åãªã¯ãšã¹ããéããšãå®è³ª2ç§éã«200åã®ã¢ã¯ã»ã¹ãéäžãã¡ãããããã解決ããã®ãã
ã¹ã©ã€ãã£ã³ã°ãŠã£ã³ããŠæ¹åŒãã§ãçŽè¿ã®æéçªãèŠãŠå€å®ãããã ãåã
ã®æå»ãå³å¯ã«èšé²ããæ¹åŒãªããã®äŸã®éäžãé²ããããã©ãæéãåºéã«åããŠè¿äŒŒããå®è£
ãããã®ã§ã粟床ãšèšç®éã«éãããããã
ã²ãã
ãã³ã®ã³å
ç æåãªã®ãã
ããŒã¯ã³ãã±ããæ¹åŒãã ãããã±ãã®äžã«ããŒã¯ã³ïŒèš±å¯èšŒïŒãå
¥ã£ãŠããŠããªã¯ãšã¹ããéããã³ã«ããŒã¯ã³ã1ã€æ¶è²»ãããããŒã¯ã³ã¯äžå®ã®ããŒã¹ãããšãã°1ç§ã«10åãã€èªåã§è£å
ããããã ããã±ãã空ã«ãªã£ãããªã¯ãšã¹ãã¯æåŠããããã©ããã±ãã«ã¯å®¹éã®äžéãããã貯ãŸã£ãããŒã¯ã³ã®ç¯å²ã§ããŒã¹ãã蚱容ããããå¹³åçãªæµéãå¶éãã€ã€ãäžæçãªéäžã¯æè»ã«åãå
¥ããŠããããã©ã³ã¹ã®ããæ¹åŒã ãã
ã²ãã ããŒã¯ã³ã貯ãŸã£ãŠãã°äžæ°ã«äœ¿ããã®ã¯äŸ¿å©ã ãïŒãšããã§ãããšã©ãããããªã¯ãšã¹ãã§ãããã£ãŠã©ããã£ãŠç¥ãã®ïŒ
ãã³ã®ã³å
ç APIã«ãã£ãŠã¯
HTTPã¬ã¹ãã³ã¹ããããŒã§æããŠãããããããšãã°
GitHubã®
REST APIã§ã¯ãX-RateLimit-Limitãäžéåæ°ãX-RateLimit-Remainingãæ®ãåæ°ãX-RateLimit-Resetã
ãªã»ãããããæå»ã ãããã ãããããŒåãåäœã¯
APIããšã«éãããå¥ã®äºæ¬¡å¶éããããæ®ãåæ°ã ãã§æ¬¡ã®æåãä¿èšŒãããã®ã§ã¯ãªããã
ã²ãã ããã§ã429ãšã©ãŒãåºã¡ãã£ããšãã¯ã©ãããã°ããã®ïŒ
ãã³ã®ã³å
ç ãã®ãšãã¯ã
ææ°ããã¯ãªããã§
ãªãã©ã€ããã®ãæ¹æ³ã®1ã€ã ãã1åç®ã®
ãªãã©ã€ã¯1ç§åŸã2åç®ã¯2ç§åŸã3åç®ã¯4ç§åŸâŠãšåŸ
ã¡æéãåã
ã«å¢ãããŠããæ¹æ³ã ããRetry-Afterã¯åŸ
æ©ããç§æ°ãŸãã¯
HTTPæ¥æãªã®ã§ããã®å€ãš
APIã®å詊è¡èŠçŽã«åŸãããå詊è¡åæ°ã«ã¯äžéãèšããåŸ
ã¡æéã«ã©ã³ãã ãªãããå
¥ãããšäžæå詊è¡ãæžããããã絶察ã«ãã£ãŠã¯ãããªãã®ã¯ã429ãè¿ã£ãŠããã®ã«å³åº§ã«
ãªãã©ã€ãç¶ããããšã
ãµãŒããŒã«ããã«è² è·ããããŠããŸã£ãŠãç¶æ³ãæªåããã ãã ãã
ã²ãã åã
ã«åŸ
ã€ã®ã¯è³¢ãããæ¹ãªãã ãïŒ
ã¬ãŒããªãããã£ãŠã¢ããªã®ã³ãŒãã§å®è£
ãããã®ãªã®ïŒ
ãã³ã®ã³å
ç èªåã§å®è£
ããããšãã§ãããã©ãæè¿ã¯
API Gatewayã
CDNã®æ©èœãšããŠæäŸãããããšãå€ãããããšãã°
AWSã®
API Gatewayãªããã¬ãŒããšããŒã¹ã容éãèšå®ã§ããããã ãäžéã¯
ãã¹ããšãã©ãŒãã®ç®æšå€ã§ãå³å¯ãªæå€§åæ°ã®ä¿èšŒã§ã¯ãªããããšããžåŽã«å¶éã眮ãã°ãæ¡ä»¶ã«åããªã¯ãšã¹ãã
ãµãŒããŒãžè»¢éããåã«æ¢ããèšèšãã§ãããã
ã¬ãŒããªãããã ãã§ãã¹ãŠã®DDoSãé²ããããã§ã¯ãªããã ãå€§èŠæš¡ãªãµãŒãã¹ã§ã¯ããŠãŒã¶ãŒããšã»
APIããŒããšã»
IPã¢ãã¬ã¹ããšã«å¥ã
ã®å¶éãèšãããããããã
ãŸãã¯ãååæ€çŽ¢ã4åç¶ããŠåŒã¶å Žé¢ãèŠã
ã¬ãŒããªãããã¯ã決ããæéå
ã®åŒã³åºãéãå¶éããä»çµã¿ã§ããååãæ€çŽ¢ããAPIãžãåãå©çšè
ããé£ç¶ã§4åã¢ã¯ã»ã¹ãããšããŸãã
ãåãåºå®ã®60ç§æ ã§3åãŸã§ããšããç·Žç¿çšã®ã«ãŒã«ãªããæ¬¡ã®ããã«å€å®ã§ããŸããå®éã®ãµãŒãã¹ã®å¶éå€ã§ã¯ãããŸããã
| åŒã³åºã | æ å
ã®åæ° | å€å® |
|---|
| 1åç® | 1 | åãä»ãã |
| 2åç® | 2 | åãä»ãã |
| 3åç® | 3 | åãä»ãã |
| 4åç® | æ¢ã«3 | ä»ã¯åãä»ããªã |
HTTPã§ã¯ãå¶éã«éããããšã429 Too Many Requestsã§äŒããæ¹æ³ããããŸãããã ãã429ãå¿
ãè¿ããšã¯éãããè² è·ãèšèšã«ãã£ãŠæ¥ç¶ãæåŠããå ŽåããããŸãã誰ãåãå©çšè
ãšããŠæ°ããããAPIããšãå
šäœãã¯ããµãŒãã¹ã®èŠçŽã確èªããŸãã
429ãè¿ã£ããããŸãå¿çãšèŠçŽãèªã
次ã¯èª¬æçšã®å¿çã®äžéšã§ãã
HTTP/1.1 429 Too Many Requests
Retry-After: 30
ãã®Retry-Afterã¯ãå¿çãåããŠãã30ç§åŸ
ã€æå®ã§ããHTTPæ¥æã§ç€ºãããå ŽåããããŸããå¿
ãä»ããŠããããããŒã§ã¯ãªãã®ã§ãAPIã®åè©Šè¡æé ã確èªããŠãã ããã
- åããªã¯ãšã¹ããéãç¶ããåŠçãæ¢ããã
- Retry-AfterãAPIã®å¶éã»å詊è¡èŠçŽã確èªããã
- å詊è¡ã§ããåŠçã確ãããåæ°ãšåŸ
ã¡æéã«äžéãä»ããã
- æ¹åããªããã°ãåŒã³åºãåæ°ãäžŠåæ°ããã£ãã·ã¥ãèŠçŽãã
èªã¿åããšæ³šæã»æ±ºæžã§ã¯ãå詊è¡ã®æå³ãéããŸããçµæãåãããªãæžã蟌ã¿ãç¹°ãè¿ãå Žåã¯ãäºéåŠçãé²ãèšèšãå¿
èŠã§ãã
çªã®å¢ç®ãšãããŒã¯ã³ã®è£å
ã¯å¥ã®æ¹åŒ
åºå®ãŠã£ã³ããŠã§ã¯ãåãæ ã®äžéå
ã§ããã°ãçµããéãšæ¬¡ã®æ ã®å§ãã«åŒã³åºããéäžãåŸãŸããäŸãã°åæ 3åãªããå¢ç®ããŸããçæéã«åèš6åãåãä»ããããšããããŸãããä»»æã®çŽè¿60ç§ã§ãå¿
ã3åãã§ã¯ãããŸããã
ã¹ã©ã€ãã£ã³ã°ãŠã£ã³ããŠã«ã¯ãåã
ã®æå»ãè¿œãæ¹åŒããåºéããšã«è¿äŒŒããæ¹åŒããããŸããããŒã¯ã³ãã±ããã§ã¯ãäžéãŸã§èš±å¯èšŒã貯ããæ±ºããããŒã¹ã§è£å
ããŠæ¶è²»ããŸãã貯ãŸã£ãåã®äžæçãªéäžã¯èš±ããŸãããè£å
ã§å®¹éãè¶
ããŠå¢ããç¶ããããã§ã¯ãããŸããã
å³ã®ããŒã¯ã³3æã¯ä»çµã¿ãèŠãããã®äŸã§ãã1åã«ã€ã1æãªããåæç¹ã§4åç®ãéãåã«è£å
ããªããã°ãèš±å¯èšŒãè¶³ããŸããã
éçšã§ã¯ãæ°ããåäœãã確ããã
IPåäœã§ã¯ãåããããã¯ãŒã¯ã®è€æ°å©çšè
ãæ ãå
±æããå ŽåããããŸããå©çšè
ãAPIããŒåäœãªããèªèšŒã®æ±ãã確èªããŸããè€æ°ãµãŒããŒã§å¥ã
ã«æ°ããå®è£
ã¯ããµãŒãã¹å
šäœã®å³å¯ãªäžéã«ãªããªãããšããããŸãã
GitHubã®X-RateLimit-Remainingãªã©ã®å€ã¯å€æææã§ãããäžæ¬¡å¶éãšã¯å¥ã®å¶éããããæ®æ°ãããããæ¬¡ã®æåãä¿èšŒãããã®ã§ã¯ãããŸãããAWS API Gatewayã®äžéããã¹ããšãã©ãŒãã®ç®æšå€ã§ããã¬ãŒããªãããã ãã§ããã¹ãŠã®DDoSæ»æãé²ããããã§ããããŸããã
èŠãæ¹ã𿬡ã®äžæ©
ãã¬ãŒããªããããã£ãŠåºãŠããããäžå®ã®æéã«åãä»ããéã®å¶éããšæãã°ã ãããOKïŒ
次ã¯APIéçºå
¥éã§å¿çã確èªãããµãŒããããã¬ãŒã«ãŒãšãéãå¶éããä»çµã¿ã»é害æã«é®æããä»çµã¿ãæ¯ã¹ãããŸãã
åèè³æ