Á÷Á¿µ÷ÕûºÍÏÞÁ÷¼¼Êõ
ÔÚÔçÆÚµÄ¼ÆËã»úÁìÓò£¬ÏÞÁ÷¼¼Êõ(time limiting)±»ÓÃ×÷¿ØÖÆÍøÂç½Ó¿ÚÊÕ·¢Í¨ÐÅÊý¾ÝµÄËÙÂÊ¡£ ¿ÉÒÔÓÃÀ´ÓÅ»¯ÐÔÄÜ£¬¼õÉÙÑÓ³ÙºÍÌá¸ß´ø¿íµÈ¡£ ÏÖÔÚÔÚ»¥ÁªÍøÁìÓò£¬Ò²½è¼øÁËÕâ¸ö¸ÅÄ ÓÃÀ´Îª·þÎñ¿ØÖÆÇëÇóµÄËÙÂÊ£¬ Èç¹û˫ʮһµÄÏÞÁ÷£¬ 12306µÄÇÀƱµÈ¡£ ¼´Ê¹ÔÚϸÁ£¶ÈµÄÈí¼þ¼Ü¹¹ÖУ¬Ò²ÓÐÀàËÆµÄ¸ÅÄî¡£
Á½ÖÖ³£ÓÃËã·¨
ÁîÅÆÍ°(Token Bucket)ºÍ©Ͱ(leaky bucket)ÊÇ ×î³£ÓõÄÁ½ÖÖÏÞÁ÷µÄËã·¨¡£
©ͰËã·¨
ËüµÄÖ÷ҪĿµÄÊÇ¿ØÖÆÊý¾Ý×¢Èëµ½ÍøÂçµÄËÙÂÊ£¬Æ½»¬ÍøÂçÉϵÄÍ»·¢Á÷Á¿¡£Â©Í°Ëã·¨ÌṩÁË365ÌåÓýͶע»úÖÆ£¬Í¨¹ýËü£¬Í»·¢Á÷Á¿¿ÉÒÔ±»ÕûÐ365betÌåÓýÔÚÏßÔ±ãÎªÍøÂçÌṩһ¸öÎȶ¨µÄÁ÷Á¿¡£ ©Ͱ¿ÉÒÔ¿´×÷ÊÇÒ»¸ö´øÓг£Á¿·þÎñʱ¼äµÄµ¥·þÎñÆ÷¶ÓÁУ¬Èç¹û©Ͱ£¨°ü»º´æ£©Òç³ö£¬ÄÇôÊý¾Ý°ü»á±»¶ªÆú¡£ ÓÃ˵ÈË»°µÄ½²£º
©ͰË㷨˼·ºÜ¼òµ¥£¬Ë®£¨Êý¾Ý»òÕßÇëÇó£©ÏȽøÈ뵽©ͰÀ©ͰÒÔÒ»¶¨µÄËٶȳöË®£¬µ±Ë®Á÷ÈëËٶȹý´ó»áÖ±½ÓÒç³ö£¬¿ÉÒÔ¿´³ö©ͰËã·¨ÄÜÇ¿ÐÐÏÞÖÆÊý¾ÝµÄ´«ÊäËÙÂÊ¡£
ÔÚijЩÇé¿öÏ£¬Â©Í°Ëã·¨²»Äܹ»ÓÐЧµØÊ¹ÓÃÍøÂç×ÊÔ´¡£ÒòΪ©ͰµÄ©³öËÙÂÊÊǹ̶¨µÄ²ÎÊý£¬365betÌåÓýÔÚÏߣ¬¼´Ê¹ÍøÂçÖв»´æÔÚ×ÊÔ´³åÍ»£¨Ã»Óз¢ÉúÓµÈû£©£¬Â©Í°Ëã·¨Ò²²»ÄÜʹijһ¸öµ¥¶ÀµÄÁ÷Í»·¢µ½¶Ë¿ÚËÙÂÊ¡£Òò´Ë£¬Â©Í°Ëã·¨¶ÔÓÚ´æÔÚÍ»·¢ÌØÐÔµÄÁ÷Á¿À´ËµÈ±·¦Ð§ÂÊ¡£¶øÁîÅÆÍ°Ëã·¨ÔòÄܹ»Âú×ãÕâЩ¾ßÓÐÍ»·¢ÌØÐÔµÄÁ÷Á¿¡£Í¨³££¬Â©Í°Ëã·¨ÓëÁîÅÆÍ°Ëã·¨¿ÉÒÔ½áºÏÆðÀ´ÎªÍøÂçÁ÷Á¿Ìṩ¸ü´óµÄ¿ØÖÆ¡£
ÁîÅÆÍ°Ëã·¨
ÁîÅÆÍ°Ëã·¨µÄÔÀíÊÇϵͳ»áÒÔÒ»¸öºã¶¨µÄËÙ¶ÈÍùͰÀï·ÅÈëÁîÅÆ£¬¶øÈç¹ûÇëÇóÐèÒª±»´¦Àí£¬ÔòÐèÒªÏÈ´ÓͰÀï»ñȡһ¸öÁîÅÆ£¬µ±Í°ÀïûÓÐÁîÅÆ¿Éȡʱ£¬Ôò¾Ü¾ø·þÎñ¡£ ÁîÅÆÍ°µÄÁíÍâÒ»¸öºÃ´¦ÊÇ¿ÉÒÔ·½±ãµÄ¸Ä±äËÙ¶È¡£ Ò»µ©ÐèÒªÌá¸ßËÙÂÊ£¬Ôò°´ÐèÌá¸ß·ÅÈëͰÖеÄÁîÅÆµÄËÙÂÊ¡£ Ò»°ã»á¶¨Ê±(±ÈÈç100ºÁÃë)ÍùͰÖÐÔö¼ÓÒ»¶¨ÊýÁ¿µÄÁîÅÆ£¬ ÓÐЩ±äÖÖËã·¨ÔòʵʱµÄ¼ÆËãÓ¦¸ÃÔö¼ÓµÄÁîÅÆµÄÊýÁ¿, ±ÈÈ绪ΪµÄרÀû"²ÉÓÃÁîÅÆÂ©Í°½øÐб¨ÎÄÏÞÁ÷µÄ·½·¨"(CN 1536815 A),ÌṩÁË365ÌåÓýͶע¶¯Ì¬¼ÆËã¿ÉÓÃÁîÅÆÊýµÄ·½·¨£¬ Ïà±ÈÆäËü¶¨Ê±Ôö¼ÓÁîÅÆµÄ·½·¨£¬ ËüÖ»ÔÚÊÕµ½Ò»¸ö±¨Îĺ󣬼ÆËã¸Ã±¨ÎÄÓëǰһ±¨Îĵ½À´µÄʱ¼ä¼ä¸ôÄÚÏòÁîÅÆÂ©Í°ÄÚ×¢ÈëµÄÁîÅÆÊý£¬ ²¢¼ÆËãÅжÏͰÄÚµÄÁîÅÆÊýÊÇ·ñÂú×ã´«Ë͸ñ¨ÎĵÄÒªÇó¡£
´Ó×îÖÕÓû§·ÃÎʰ²È«µÄ½Ç¶È¿´£¬ÉèÏëÓÐÈËÏ뱩Á¦Åö×²ÍøÕ¾µÄÓû§ÃÜÂ룻»òÕßÓÐÈ˹¥»÷ij¸öºÜºÄ·Ñ×ÊÔ´µÄ½Ó¿Ú£»»òÕßÓÐÈËÏë´Óij¸ö½Ó¿Ú´óÁ¿×¥È¡Êý¾Ý¡£´ó²¿·ÖÈ˶¼ÖªµÀÓ¦¸ÃÔö¼Ó Rate limiting£¬×öÇëÇóƵÂÊÏÞÖÆ¡£´Ó°²È«½Ç¶È£¬Õâ¸ö¿ÉÄÜÒ²ÊǴ󲿷ÖÄÜÏëµ½£¬µ«²»Ò»¶¨È¥×öµÄ±¡Èõ»·½Ú¡£
´ÓÕû¸ö¼Ü¹¹µÄÎȶ¨ÐԽǶȿ´£¬Ò»°ã SOA ¼Ü¹¹µÄ365ÌåÓýͶע½Ó¿ÚµÄÓÐÏÞ×ÊÔ´µÄÇé¿öÏ£¬ËùÄÜÌṩµÄµ¥Î»Ê±¼ä·þÎñÄÜÁ¦ÊÇÓÐÏ޵ġ£¼ÙÈ糬¹ý·þÎñÄÜÁ¦£¬Ò»°ã»áÔì³ÉÕû¸ö½Ó¿Ú·þÎñÍ£¶Ù£¬»òÕßÓ¦Óà Crash£¬»òÕß´øÀ´Á¬Ëø·´Ó¦£¬½«ÑÓ³Ù´«µÝ¸ø·þÎñµ÷Ó÷½Ôì³ÉÕû¸öϵͳµÄ·þÎñÄÜÁ¦É¥Ê§¡£ÓбØÒªÔÚ·þÎñÄÜÁ¦³¬ÏÞµÄÇé¿öÏ Fail Fast¡£
ÁíÍ⣬¸ù¾ÝÅŶÓÂÛ£¬ÓÉÓÚ API ½Ó¿Ú·þÎñ¾ßÓÐÑÓ³ÙËæ×ÅÇëÇóÁ¿ÌáÉýѸËÙÌáÉýµÄÌØµã£¬ÎªÁ˱£Ö¤ SLA µÄµÍÑÓ³Ù£¬ÐèÒª¿ØÖƵ¥Î»Ê±¼äµÄÇëÇóÁ¿¡£ÕâÒ²ÊÇ Little¡¯s law Ëù˵µÄ¡£
»¹ÓУ¬¹«¿ª API ½Ó¿Ú·þÎñ£¬Rate limiting Ó¦¸ÃÊÇÒ»¸ö±Ø±¸µÄ¹¦ÄÜ£¬·ñÔò¹«¿ªµÄ½Ó¿Ú²»ÖªµÀÄÄÒ»Ìì¾Í»á±»·þÎñµ÷Ó÷½ÓÐÒâÎÞÒâµÄ´ò¿å¡£
365betÌåÓýÔÚÏߣ¬Ìṩ×ÊÔ´Äܹ»Ö§³ÅµÄ·þÎñ£¬½«¹ýÔØÇëÇó¿ìËÙÅׯú¶ÔÕû¸öϵͳ¼Ü¹¹µÄÎȶ¨ÐԷdz£ÖØÒª¡£Õâ¾ÍÒªÇóÔÚÓ¦ÓòãʵÏÖ Rate limiting ÏÞÖÆ¡£
³£¼ûµÄ Rate limiting µÄʵÏÖ·½Ê½
Proxy ²ãµÄʵÏÖ£¬Õë¶Ô²¿·Ö URL »òÕß API ½Ó¿Ú½øÐзÃÎÊÆµÂÊÏÞÖÆ
Nginx Ä£¿é
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location /search/ { limit_req zone=one burst=5; }
Ïêϸ²Î¼û£º ngx_http_limit_req_module
Haproxy ÌṩµÄ¹¦ÄÜ
Ïêϸ²Î¼û£º Haproxy Rate limit Ä£¿é
RateLimitersÊÇÁîÅÆÍ°ºÍ©ͰÔÚ.NET ÖÐʵÏÖ¡£ÕâЩ²ßÂÔ¿ÉÓÃÓÚËÙÂÊÏÞÖÆÇëÇó²»Í¬µÄÍøÕ¾ÖУ¬ºó¶Ë»ò API µ÷Óõȳ¡¾°¡£
ASP.NET Web API rate limiter for IIS and Owin hosting
»ùÓÚ Redis ¹¦ÄܵÄʵÏÖ
Õâ¸öÔÚ Redis ¹Ù·½ÎĵµÓзdz£ÏêϸµÄʵÏÖ¡£Ò»°ãÊÊÓÃÓÚËùÓÐÀàÐ͵ÄÓ¦Ó㬱ÈÈç PHP¡¢Python µÈµÈ¡£Redis µÄʵÏÖ·½Ê½¿ÉÒÔÖ§³Ö·Ö²¼Ê½·þÎñµÄ·ÃÎÊÆµÂʵļ¯ÖпØÖÆ¡£Redis µÄƵÂÊÏÞÖÆÊµÏÖ·½Ê½»¹ÊÊÓÃÓÚÔÚÓ¦ÓÃÖÐÎÞ·¨×´Ì¬±£´æ×´Ì¬µÄ³¡¾°¡£
²Î¼û£ºRedis INCR rate limiter
ÍøÉÏÓÐÖÚ¶à¹ØÓÚÕâ·½ÃæµÄÎÄÕ£¬ÕâÀïÁгöÁË365betÌåÓýÔÚÏ߲ο¼µÄһЩÎĵµ¡£
- http://www.cnblogs.com/mushroom/p/4659200.html
- µçÉÌ¿ÎÌâI£º¼¯Èº»·¾³ÏÂÒµÎñÏÞÁ÷