在php高并发中, 应该在什么地方做限流处理?

  1. nginx里有limit_conn和limit_req模块.
  2. laravel框架里有限流中间件 throttle.
  3. 还可以自己写算法实现.
  4. 其它各种限流方式

这些有什么区别吗? 怎样选用呢?

阅读 362
评论 2019-09-11 提问
    4 个回答
    nicce
    • 236

    限流方式很多,不同公司有不同的做法。
    1.在网关做,利用布隆过滤器实现
    2.在 nginx 层做,利用nginx limit_conn和limit_req模块,或者nginx +实现
    3.代码层做,比如php 本身实现限流

    如果在代码层做,其实流量已经进来了,服务器压力还是有的,但是它可以自定义对某些接口自由配置限流,现在一般在Nginx 层或者网关做的会比较多

    评论 赞赏 2019-09-12
      零玖
      • 7.7k

      越前沿的方案,越有效,可以最大限度的减少服务器开支,但是缺点就是距离业务太远,以至于无法由业务来进行调配。

      比如,通过 Nginx 进行限制,那么就会在 Nginx 层对流量进行限制,不会把请求交给 fpm ,节约了 fpm 资源。

      而通过 php 代码去限制,这时候请求已经是交给 fpm 处理了,也更加贴近任务,可由业务去自由调配限度等,但是这里还是浪费了资源。

      当然,大部分情况下这种限流的主要目的都是为 数据库 减轻压力。

      评论 赞赏 2019-09-11
        1. nginx是协议级别的限流,优点是配置简单,不需要编码,效果最好,缺点是无法根据业务来处理,但是
        2. 进入到PHP代码级别后可以基于业务限流,优点是可定制型强,缺点么,压力已经到PHP上面了。

        生产环境下一般用nginx对每个IP每分钟或者每秒做个统一限流,防止恶意请求,此外,部分接口可以使用PHP来针对性限流

        评论 赞赏 2019-09-11

          现在高并发场景基本不做限流了,上了防火墙拦截攻击后,所有流量都收。
          负载均衡,CDN,分布式搞起来还怕带不动吗?

          评论 赞赏 2019-09-11
            撰写回答

            登录后参与交流、获取后续更新提醒