zoukankan      html  css  js  c++  java
  • 互联网进行限流策略的Semaphore信号量使用

    在Semaphore信号量非常适合高并发访问,新系统在上线之前,要对系统的访问量进行评估,当然这个值肯定不是随便拍拍脑袋就能想出来的,是经过以往的经验、数据、历年的访问量,已经推广力度进行一个合理的评估,当然评估标准不能太大也不能太小,太大的话投入的资源达不到实际效果,纯粹浪费资源,太小的话,某个时间点一个高峰值的访问量上来直接可以压垮系统。

    相关概念:

      PV(page view)网络的总访问量,页面浏览量或点击量,用户每刷新一次就会被记录一次。

      UV(unique Visitor)访问网站的一台电脑客户端为一个访客。一般来讲,时间上以00:00 - 24:00 之内相同ip的客户端只记录一次。

      QPS(query per second)即每秒查询数,qps很大程度上代表了系统业务上的繁忙程度,每次请求的背后,可能对应着多次磁盘I/O,多次网络请求,多个cpu时间片等。我们通知qps可以非常直观的了解当前系统业务情况,一旦当前qps超过所设定的预警阀值,可以考虑增加机器对集群扩容,以免压力过大导致宕机,可以根据前期的压力测试得到估值,在结合后期综合运维情况,估算出阀值。

      RT(response time)即请求的响应时间,这个指标非常关键,直接说明前端用户的体验,因此任何系统设计师都想降低rt时间。当然还涉及cpu、内存、网络、磁盘等情况,更细节的问题很多,如select、update、delete/ps等数据库层面的统计。

    下面同样。看一个小的demo:

    为了能方便的看清楚这段代码的打印顺序,特地加了时间,以便打印的结果更能看出Semaphore的作用,下面看一下运行的结果:

    看一部分打印的结果,首先是5个任务同时开始执行,然后在一个任务结束后,才会执行一个新的任务,体现了一个限流的概念,不过现在大部分互联网公司都会使用redis。

    最后看一下信号量的值到底应该是多少,

    容量评估:一般来说通过开发、运维、测试、以及业务等相关人员,综合出系统的一系列阀值,然后我们根据关键阀值如qps、rt等,对系统进行有效的变更。一般来讲,我们进行多轮压力测试以后,可以对系统进行峰值评估,采用所谓的80/20原则,即80%的访问请求将在20%的时间内到达。这样我们可以根据系统对应的PV计算出峰值qps。

    峰值qps = (总PV × 80%)/(60 × 60 × 24 × 20%)

    然后在将总的峰值qps除以单台机器所能承受的最高的qps值,就是所需要机器的数量;机器数 = 总得峰值qps / 压测得出的单机极限qps

    当然不排除系统在上线前进行大型促销活动,或者双十一,双十二热点时间吗、遭受到DDos攻击等情况,系统的开发和运维人员急需要了解当前系统运行的状态和负载情况,一般都会有后台系统去维护。

    Semaphore可以控制系统的流量:

    拿到信号量的线程可以进入,否则就等待。通过acquire()和release()获取和释放访问许可。

  • 相关阅读:
    Spring之调度器(Scheduler)
    Spring之拦截器(Interceptor)
    ThreadLocal相关
    hibernate操作数据库
    文件操作的工具类
    日期操作工具类
    有关mysql的utf8和utf8mb4,以及Illegal mix of collations for operation 'like'
    [原]nginx 一下快一下慢的问题
    再谈微信公众号网页授权的40163错误
    用DBCC CHECK修复SQL2000的数据库一致性问题
  • 原文地址:https://www.cnblogs.com/shmilyToHu/p/6478623.html
Copyright © 2011-2022 走看看