¥¹¥Ñ¥àËɻߤʤɤΤ¿¤á¤Î¥ì¡¼¥ÈÀ©¸Â¤ò¹Ô¤¦¥¢¥ë¥´¥ê¥º¥à¤Ï¿¿ô¸ºß¤·¤Æ¤¤¤Þ¤¹¡£¤µ¤Þ¤¶¤Þ¤Ê¥¢¥ë¥´¥ê¥º¥à¤ÎÆÃħ¤ò¥¢¥Ë¥á¡¼¥·¥ç¥ó¤Ç¤ï¤«¤ê¤ä¤¹¤¯¤Þ¤È¤á¤¿¥Ö¥í¥°µ­»ö¤òChatGPT´ØÏ¢¤Î¥µ¡¼¥Ó¥¹smudge.ai¤¬³«È¯¥Ö¥í¥°¤Ë¤Æ¸ø³«¤·¤Þ¤·¤¿¡£

rate limiter - smudge.ai blog

https://smudge.ai/blog/ratelimit-algorithms

ÇÛ¿®¤Î¥Á¥ã¥Ã¥ÈÍó¤Ë¥¹¥Ñ¥à¤¬½Ð¸½¤¹¤ë¤È¤¤¤¦¾õ¶·¤Ë¤ª¤¤¤Æ¡¢¥ì¡¼¥ÈÀ©¸Â¤¬¤Ê¤¤¾ì¹ç¤Ë¤Ï¥¹¥Ñ¥Þ¡¼¤Ïû»þ´Ö¤Î¤¦¤Á¤Ë¿¿ô¤ÎÅê¹Æ¤ò¹Ô¤Ã¤Æ¥Á¥ã¥Ã¥ÈÍó¤ò°ì¿Í¤ÇËä¤á¿Ô¤¯¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£



º¸¾å¤Î¡ÖEnable rate limiting¡×¤Ë¥Á¥§¥Ã¥¯¤òÆþ¤ì¤ë¤È¥ì¡¼¥ÈÀ©¸Â¤ò²Ã¤¨¤¿¾ì¹ç¤ÎµóÆ°¤¬³Îǧ¤Ç¤­¤Þ¤¹¡£¥ì¡¼¥ÈÀ©¸Â¤¬²Ã¤ï¤Ã¤¿¤³¤È¤Ç¡¢¥¹¥Ñ¥Þ¡¼¤ÎÅê¹Æ¤Î¤Û¤È¤ó¤É¤ò¥Ö¥í¥Ã¥¯¤·¤Æ¥Á¥ã¥Ã¥ÈÍó¤ËÍ¿¤¨¤ë±Æ¶Á¤ò²¼¤²¤ë¤³¤È¤¬¤Ç¤­¤Þ¤·¤¿¡£¤³¤Î¤È¤­¡¢¾õ¶·¤Ë±þ¤¸¤ÆŬÀڤʥ¢¥ë¥´¥ê¥º¥à¤òÁªÂò¤¹¤ë¤³¤È¤Ç°ìÈ̥桼¥¶¡¼¤Î¥Á¥ã¥Ã¥È¤ËÍ¿¤¨¤ë±Æ¶Á¤ò²¼¤²¤Ä¤Ä¸ú²ÌŪ¤Ë¥¹¥Ñ¥à¤ò¥Ö¥í¥Ã¥¯¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ë¤ï¤±¤Ç¤¹¡£



¥ì¡¼¥ÈÀ©¸Â¥¢¥ë¥´¥ê¥º¥à¤È¤·¤Æ°ìÈÌŪ¤Ë»ÈÍѤµ¤ì¤Æ¤¤¤ë¤Î¤Ï¡ÖFixed windows(¸ÇÄꥦ¥£¥ó¥É¥¦)Êý¼°¡×¤Ç¡¢¤³¤Î¥¢¥ë¥´¥ê¥º¥à¤Ç¤Ï°ìÄê¤Î´ü´ÖÆâ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤ë²ó¿ô¤òÀ©¸Â¤·¤Þ¤¹¡£¥Ö¥í¥°¤Î¥¢¥Ë¥á¡¼¥·¥ç¥ó¤Ç¤Ï¥¿¥¤¥à¥é¥¤¥ó¤¬Î®¤ì¤Æ¤ª¤ê¡¢¼êÆ°¤Ç¡ÖHit¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥¢¥¯¥»¥¹¤ò¥·¥ß¥å¥ì¡¼¥È¤Ç¤­¤Þ¤¹¡£Îã¤Ï¡Ö1Æü¤´¤È¤Ë6·ï¡×¤È¤¤¤¦À©¸Â¤Ë¤Ê¤Ã¤Æ¤ª¤ê¡¢ÆüÉÕÊѹ¹Ä¾¸å¤Ë6²ó¥¢¥¯¥»¥¹¤ËÀ®¸ù¤·¤¿¸å¤½¤ÎÆü¤Î´Ö¤Ï¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£



¸ÇÄêÁëÊý¼°¤Ïñ½ã¤Ç¼ÂÁõ¤·¤ä¤¹¤¯¡¢¥æ¡¼¥¶¡¼Â¦¤âÍý²ò¤·¤ä¤¹¤¤¤Ê¤É¤ÎĹ½ê¤¬¤¢¤ê¤Þ¤¹¤¬¡¢´ü´Ö¤Î¶èÀÚ¤êÉÕ¶á¤Ç¤ÏÁÛÄê¤è¤ê¤â¿¤¯¤Î¥¢¥¯¥»¥¹¤¬½¸Ã椷¤Æ¤·¤Þ¤¦¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£



´ü´Ö¤Î¶èÀÚ¤êÉÕ¶á¤Ç¤ÎϢ³¥¢¥¯¥»¥¹¤ò¤Õ¤»¤°¤Ë¤Ï¡¢´ü´Ö¤ò¥æ¡¼¥¶¡¼¤ÎºÇ½é¤Î¥¢¥¯¥»¥¹»þÅÀ¤«¤é¥¹¥¿¡¼¥È¤¹¤ì¤ÐOK¡£¤³¤ÎÊýË¡¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢¥ì¡¼¥ÈÀ©¸Â¤¬²óÉü¤¹¤ë¤Î¤¬¤¤¤Ä¤Ê¤Î¤«¤ò¥æ¡¼¥¶¡¼¤Ë¼¨¤¹¤³¤È¤¬½ÅÍפȤΤ³¤È¡£



¸ÇÄꥦ¥£¥ó¥É¥¦°Ê³°¤Ç¤è¤¯»ÈÍѤµ¤ì¤ëÊý¼°¤Î°ì¤Ä¤¬¡ÖSliding windows(¥¹¥é¥¤¥É¥¦¥£¥ó¥É¥¦)Êý¼°¡×¤Ç¤¹¡£¥¹¥é¥¤¥É¥¦¥£¥ó¥É¥¦Êý¼°¤Ç¤Ï¥¢¥¯¥»¥¹¤¬È¯À¸¤¹¤ë¤´¤È¤Ë¥ì¡¼¥ÈÀ©¸Â¤Î´ü´Ö¤¬È¯À¸¤·¡¢°ìÄê»þ´Ö¸å¤Ë¥ì¡¼¥ÈÀ©¸Â¤¬1¤º¤Ä²óÉü¤·¤Æ¤¤¤¯¤È¤¤¤¦ÆÃħ¤¬¤¢¤ê¤Þ¤¹¡£¥¹¥é¥¤¥É¥¦¥£¥ó¥É¥¦Êý¼°¤Ï¥È¥é¥Õ¥£¥Ã¥¯¤ò¥¹¥à¡¼¥º¤Ëʬ»¶¤¹¤ë¤¿¤á¡¢¹âÉé²Ù´Ä¶­¤Ç¤ÎÍøÍѤ˸þ¤¤¤Æ¤¤¤Þ¤¹¤¬¡¢°ìÊý¤Ç¼ÂÁõ¤¬Ê£»¨¤ÇÉé²Ù¤¬¹â¤Þ¤Ã¤Æ¤·¤Þ¤¤¤¬¤Á¤È¤Î¤³¤È¡£



Éé²Ù¤ò´ËϤ¹¤ë¤¿¤á¤Ë¥ì¡¼¥ÈÀ©¸Â¤¹¤ë¾ì¹ç¡¢¥ì¡¼¥ÈÀ©¸Â¥¢¥ë¥´¥ê¥º¥à¤¬Éé²Ù¤ò¹â¤á¤Æ¤·¤Þ¤Ã¤Æ¤ÏËÜËöžÅݤǤ¹¡£¤½¤Î¤¿¤á¡¢Â¿¤¯¤Î¥µ¡¼¥Ó¥¹¤Ç¤Ï¥Õ¥í¡¼¥Æ¥£¥ó¥°¥¦¥£¥ó¥É¥¦(floating window)Êý¼°¤È¤¤¤¦¶á»÷Êý¼°¤Ç·×»»¤ò¹Ô¤¤¤Þ¤¹¡£¥Õ¥í¡¼¥Æ¥£¥ó¥°¥¦¥£¥ó¥É¥¦¤Ï¸ÇÄꥦ¥£¥ó¥É¥¦Êý¼°¤ò¥Ù¡¼¥¹¤Ë¡¢Á°¤Î¥¦¥£¥ó¥É¥¦¤ÇȯÀ¸¤·¤¿¥¢¥¯¥»¥¹²ó¿ô¤ò¸½ºß¤«¤é°ìÄê»þ´ÖÁ°¤Þ¤Ç¤Î¤¦¤ÁÁ°¤Î¥¦¥£¥ó¥É¥¦¤¬Àê¤á¤ë³ä¹ç¤Ç½Å¤ßÉÕ¤±¤·¤Æ¥ì¡¼¥ÈÀ©¸Â¤ÎÂоݤ˲䨤ޤ¹¡£

Î㤨¤Ð²¼¿Þ¤Î¾ì¹ç¡¢Á°¤Î¥¦¥£¥ó¥É¥¦¤Ç5²ó¤Î¥¢¥¯¥»¥¹¤¬È¯À¸¤·¤Æ¤ª¤ê¡¢¡Ö¸½»þÅÀ¡×¤«¤é°ìÄê»þ´ÖÁ°¤Þ¤Ç¤ËÀê¤á¤ëÁ°¤Î¥¦¥£¥ó¥É¥¦¤Î³ä¹ç¤Ï57¡ó¤Ç¤¹¡£5¡ß0.57¡á2.85¤¬¥ì¡¼¥ÈÀ©¸Â¤ÎÂоݤ˲䨤é¤ì¤ë¤¿¤á¡¢¸½ºß¤Î¥¦¥£¥ó¥É¥¦¤Ç3²ó¤·¤«¥ê¥¯¥¨¥¹¥È¤¬È¯À¸¤·¤Æ¤¤¤Ê¤¤¤Ë¤â¤«¤«¤ï¤é¤º¥ì¡¼¥ÈÀ©¸Â¤¬È¯À¸¤·¤Æ¥ê¥¯¥¨¥¹¥È¤¬¼ºÇÔ¤·¤Þ¤¹¡£



¸·Ì©¤Ë¤Ï¥¹¥é¥¤¥É¥¦¥£¥ó¥É¥¦Êý¼°¤È¥Õ¥í¡¼¥Æ¥£¥ó¥°¥¦¥£¥ó¥É¥¦Êý¼°¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤ë¥¿¥¤¥ß¥ó¥°¤Ï°Û¤Ê¤ë¤â¤Î¤Î¡¢¥¢¥¯¥»¥¹¤¹¤ë²ó¿ô¤ÏÊ¿¶ÑŪ¤Ë¤ß¤ÆƱ¤¸¤Ë¤Ê¤ë¤¦¤¨¡¢¥Õ¥í¡¼¥Æ¥£¥ó¥°¥¦¥£¥ó¥É¥¦Êý¼°¤Ï¼ÂÁõ¤¬¤Ï¤ë¤«¤Ë´Êñ¤ÇÉé²Ù¤â·Ú¤¤¤È¤¤¤¦¥á¥ê¥Ã¥È¤¬Â¸ºß¤·¤Æ¤¤¤Þ¤¹¡£



¤Þ¤¿Ê̤Υ졼¥ÈÀ©¸ÂÊý¼°¤È¤·¤Æ¡¢¡Ö¥È¡¼¥¯¥ó¥Ð¥±¥Ã¥È(Token buckets)Êý¼°¡×¤¬¾Ò²ð¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥È¡¼¥¯¥ó¥Ð¥±¥Ã¥ÈÊý¼°¤Ç¤Ï´ü´ÖÆâ¤Î¥¢¥¯¥»¥¹¤òÄÉÀפ¹¤ëÂå¤ï¤ê¤Ë¡¢¡Ö°ìÄê»þ´Ö¤´¤È¤Ë¥È¡¼¥¯¥ó¤¬¤¿¤Þ¤ë¥Ð¥±¥Ã¥È¡×¤ò»ÈÍѤ·¤Þ¤¹¡£¥Ð¥±¥Ã¥ÈÆâ¤Ë¥È¡¼¥¯¥ó¤¬Â¸ºß¤·¤Æ¤¤¤ì¤Ð¥¢¥¯¥»¥¹¤¬µö²Ä¤µ¤ì¡¢¥È¡¼¥¯¥ó¤ò»È¤¤Àڤ俸å¤ÏÊä½¼¤µ¤ì¤ë¤Þ¤Ç¥ì¡¼¥ÈÀ©¸Â¤¬È¯À¸¤¹¤ë»ÅÁȤߤǤ¹¡£



¥È¡¼¥¯¥ó¥Ð¥±¥Ã¥ÈÊý¼°¤Ç¤Ï¥È¥é¥Õ¥£¥Ã¥¯¤ÎµÞ·ã¤Ê¾å¾º¤¬È¯À¸¤¹¤ë²ÄǽÀ­¤Ï»Ä¤ë¤â¤Î¤Î¡¢°ìÄê´ü´Ö¤Î¥¢¥¯¥»¥¹¤òÄÉÀפ»¤º¤È¤âϢ³¥¢¥¯¥»¥¹¿ô¤Î¾å¸Â¤òÌÀ³Î¤Ë¤Ç¤­¤ë¤Û¤«¡¢Ä¹´üŪ¤ÊµöÍÆÊ¿¶Ñ¥¢¥¯¥»¥¹¥ì¡¼¥È¤Ï¥È¡¼¥¯¥ó¤ÎÊä½¼´Ö³Ö°ÊÆâ¤Ë¤Ê¤ë¤È¤¤¤¦ÆÃħ¤¬Â¸ºß¤·¤Æ¤¤¤Þ¤¹¡£

¤µ¤é¤Ë¥È¡¼¥¯¥ó¥Ð¥±¥Ã¥ÈÊý¼°¤Ï½ÀÆðÀ­¤¬¹â¤¯¡¢Â¾¤ÎÊý¼°¤òÌÏÊ魯¤ë¤³¤È¤â²Äǽ¤È¤Î¤³¤È¡£Î㤨¤Ð¥È¡¼¥¯¥ó¤òËè²ó¾å¸Â¤ÈƱ¤¸¿ô¤À¤±Êä½¼¤¹¤ëÀßÄê¤Ë¤¹¤ë¤³¤È¤Ç¡¢¥æ¡¼¥¶¡¼¤Î¥¢¥¯¥»¥¹»þÅÀ¤«¤é´ü´Ö¤¬»Ï¤Þ¤ë¸ÇÄꥦ¥£¥ó¥É¥¦Êý¼°¤ÈƱ¤¸¥ì¡¼¥ÈÀ©¸Â¤ò¼Â¸½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£



¤¤¤º¤ì¤ÎÊý¼°¤òÍøÍѤ¹¤ë¾ì¹ç¤Ç¤â¡¢¥ì¡¼¥ÈÀ©¸Â¤Ë¤è¤Ã¤Æ¥æ¡¼¥¶¡¼¤Î¥¢¥¯¥»¥¹¤òµñÈݤ·¤¿¾ì¹ç¤Ë¤Ï429¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤ä¡ÖRateLimit-Remaining¡×¡ÖRateLimit-Reset¡×¤Ê¤É¤ÎHTTP¥Ø¥Ã¥À¤Ç¥æ¡¼¥¶¡¼¤ËÄÌÃΤ¹¤ë¤Ù¤­¤È¤Î¤³¤È¡£

¸µ¤Î¥Ö¥í¥°¤ÎËöÈø¤Ç¤Ïº£²ó¼è¤ê¾å¤²¤é¤ì¤Æ¤¤¤ë¥ì¡¼¥ÈÀ©¸Â¤ÎÊý¼°¤òÈæ³Ó¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¥¤¥ó¥¿¥é¥¯¥Æ¥£¥Ö¤Ê¥¢¥Ë¥á¡¼¥·¥ç¥ó¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢µ¤¤Ë¤Ê¤ë¿Í¤Ï³Îǧ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£

´ØÏ¢µ­»ö

¡Ö¥¢¥ë¥´¥ê¥º¥à¤Ã¤Æ²¿¡©¡×¤òÀìÌç²È¤¬Ê¬¤«¤ê¤ä¤¹¤¯²òÀâ - GIGAZINE

¡Ö¥¢¥ë¥´¥ê¥º¥à¡×¤È¤¤¤¦¸ÀÍÕ¤ÎͳÍè¤Ï¡© - GIGAZINE

¥³¥ó¥Ô¥å¡¼¥¿¤ò¿Ê²½¤µ¤»¤Æ¤­¤¿°ÎÂç¤Ê¤ë¥¢¥ë¥´¥ê¥º¥à¤Þ¤È¤á - GIGAZINE

¥Ï¥Ã¥·¥å´Ø¿ô¡ÖSHA-256¡×¤Î·×»»¥×¥í¥»¥¹¤ò¤ï¤«¤ê¤ä¤¹¤¯»ë³Ð²½¤·¤Æ¤¯¤ì¤ë¡ÖSha256 Algorithm Explained¡× - GIGAZINE

¶½Ì£¤Î¤¢¤ë¤â¤Î¤ò¥ª¥¹¥¹¥á¤·¤Æ¤¯¤ì¤ë¡Ö¥ì¥³¥á¥ó¥Ç¡¼¥·¥ç¥ó¡×¤Ë·ç¤«¤»¤Ê¤¤5¤Ä¤Î¥¢¥ë¥´¥ê¥º¥à - GIGAZINE