<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>限流 on Leanku 的博客</title><link>https://www.leanku.com/tags/%E9%99%90%E6%B5%81/</link><description>Recent content in 限流 on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 11 Jul 2025 20:46:01 +0800</lastBuildDate><atom:link href="https://www.leanku.com/tags/%E9%99%90%E6%B5%81/index.xml" rel="self" type="application/rss+xml"/><item><title>高并发系统设计-限流</title><link>https://www.leanku.com/post/microservice/%E9%AB%98%E5%B9%B6%E5%8F%91%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1-%E9%99%90%E6%B5%81/</link><pubDate>Fri, 11 Jul 2025 20:46:01 +0800</pubDate><guid>https://www.leanku.com/post/microservice/%E9%AB%98%E5%B9%B6%E5%8F%91%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1-%E9%99%90%E6%B5%81/</guid><description>&lt;h1 id="高并发系统设计-限流"&gt;高并发系统设计-限流&lt;/h1&gt;&#10;&lt;h1 id="一什么是限流"&gt;一、什么是限流&lt;/h1&gt;&#10;&lt;p&gt;限流（Rate Limiting）是指&lt;strong&gt;限制单位时间内允许进入系统的请求数量&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;简单来说，就是：&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;控制流量进入系统的速度，而不是等系统崩溃之后再处理。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;例如：&lt;/p&gt;&#10;&lt;p&gt;某接口限制：1000 Request / Second&lt;/p&gt;&#10;&lt;p&gt;如果一秒钟来了：1500 Request&lt;/p&gt;&#10;&lt;p&gt;那么：1000正常处理，500拒绝访问&lt;/p&gt;&#10;&lt;p&gt;通常返回：HTTP 429 Too Many Requests&lt;/p&gt;&#10;&lt;p&gt;限流的本质就是：&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;宁可拒绝一部分请求，也不要让整个系统崩溃。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="二为什么需要限流"&gt;二、为什么需要限流&lt;/h2&gt;&#10;&lt;p&gt;因为系统资源是有限的。&lt;/p&gt;&#10;&lt;p&gt;例如：&lt;/p&gt;&#10;&lt;p&gt;服务器配置：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;CPU：8 Core&#10;Memory：16GB&#10;MySQL连接池：100&#10;Redis连接池：200&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这些资源都存在上限。&lt;/p&gt;&#10;&lt;p&gt;假设数据库最大只能处理： 5000 QPS&lt;/p&gt;&#10;&lt;p&gt;如果突然来了：30000 QPS&lt;/p&gt;&#10;&lt;p&gt;没有限流：30000全部访问MySQL-&amp;gt;连接池耗尽-&amp;gt;CPU100%-&amp;gt;慢SQL-&amp;gt;超时-&amp;gt;&amp;hellip;-&amp;gt;系统崩溃&lt;/p&gt;&#10;&lt;p&gt;有了限流：30000-&amp;gt;Gateway-&amp;gt;允许5000-&amp;gt;25000直接拒绝-&amp;gt;系统稳定&lt;/p&gt;&#10;&lt;p&gt;虽然部分用户会收到&amp;quot;系统繁忙&amp;quot;的提示，但系统整体仍然保持可用。&lt;/p&gt;&#10;&lt;p&gt;这正是限流存在的意义&lt;/p&gt;&#10;&lt;h2 id="三典型应用场景"&gt;三、典型应用场景&lt;/h2&gt;&#10;&lt;p&gt;限流几乎存在于所有互联网系统中。&lt;/p&gt;&#10;&lt;h3 id="1登录接口"&gt;1、登录接口&lt;/h3&gt;&#10;&lt;p&gt;例如：POST /login&lt;/p&gt;&#10;&lt;p&gt;限制：每个IP 5次/分钟&lt;/p&gt;&#10;&lt;p&gt;防止：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;暴力破解密码&lt;/li&gt;&#10;&lt;li&gt;恶意攻击&lt;/li&gt;&#10;&lt;li&gt;短时间大量登录&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="2短信验证码"&gt;2、短信验证码&lt;/h3&gt;&#10;&lt;h3 id="3支付接口"&gt;3、支付接口&lt;/h3&gt;&#10;&lt;h3 id="4秒杀系统"&gt;4、秒杀系统&lt;/h3&gt;&#10;&lt;h3 id="5开放api"&gt;5、开放API&lt;/h3&gt;&#10;&lt;h2 id="四限流的位置"&gt;四、限流的位置&lt;/h2&gt;&#10;&lt;p&gt;限流通常不是只有一层。&lt;/p&gt;&#10;&lt;p&gt;一般有四层。&lt;/p&gt;&#10;&lt;h3 id="第一层cdn"&gt;第一层：CDN&lt;/h3&gt;&#10;&lt;p&gt;例如：&#10;Cloudflare-&amp;gt;限制恶意流量&lt;/p&gt;&#10;&lt;p&gt;主要抵御：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;CC攻击&lt;/li&gt;&#10;&lt;li&gt;DDoS&lt;/li&gt;&#10;&lt;li&gt;Bot&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="第二层nginx--gateway"&gt;第二层：Nginx / Gateway&lt;/h3&gt;&#10;&lt;p&gt;例如：&#10;Client-&amp;gt;Gateway-&amp;gt;Application&lt;/p&gt;&#10;&lt;p&gt;nginx示例&lt;/p&gt;</description></item></channel></rss>