zoukankan      html  css  js  c++  java
  • 组合设计qps【重点】

    1 原则

    1.1 同步:

    上游最大生产速度(总最大生产速度)==下游最大生产速度==qps==qps1 * qps2/qps1 + qps2 <min{qps1, qps2}

    池n2==下游服务并发数(看客户端异步、服务端异步与并发事务处理数、连接数的关系),n2 <= n1,开多了也没用,当n2=n1时,整体吞吐量理论最大,但要视下游服务是否能承受n2并发

    下游资源等待时间=n1/n2*t2-t2,当n1==n2时,等待时间为0

    qps2>=当前总生产速度(用户生产)>qps时,理论上阻塞模型理论-下游无需做限流,因为上游qps定死了,只能放这些流量到下游,上游做限流(放弃用户请求);

      但实际中,qps1>s>qps2>qps是可能发生的,上游服务由于未知原因没垮掉,而且出于自保偷偷多开并发放了超越qps的流量s,当s>qps2时,就要注意限流了限流怎么做(战略)

      比如,用户-业务服务代码(2500qps)-db(500qps),组合qps 417,当用户生产>417时,一般也差不多要顶到qps2了,这也是为什么db一般要限流保护的原因

    1.2 异步:

    下游执行时间为0情况下(比如下游异步),上游最大生产速度(总最大生产速度)==下游最大生产速度==qps1

    上游执行时间为0情况下,上游最大生产速度(总最大生产速度)==下游最大生产速度==qps2

    n2无论设置多大,都是无穷大,因为异步情况下,t2约=0,n2与下游并发数脱离关系;

        那么下游并发数与什么有关,看客户端异步、服务端异步与并发事务处理数、连接数的关系,如同步,则下游并发数仍==连接池大小n2,如异步,那并发数就不好说了

    下游异步,qps2无穷大,上游最大生产速度(总最大生产速度)==下游最大生产速度==qps1,若qps1>qps2',可能压垮下游服务,要做限流限流怎么做(战略)

    2 具体算法

    以一个redis连接池应用为例:

    2.1 同步

    两种算法:

    2.1.1 单线程耗时法

    2.1.1.1 redis n2=n1,n=n1=n2=5,单线程响应时间=30+20=50ms,单线程qps=1/0.05=20,总qps=单线程qps*n=100

    2.1.1.2 redis n2=1,n=n1=5,单线程响应时间=30+100=130ms,单线程qps=1/0.13=7.69,总qps=7.69*5=38.46

    下游 连接池等待时间=n1/n2*t2-t2=80ms,执行时间20ms

    2.1.2 公式法

      

    2.1.2.1 业务线程qps=1/0.03*5=166.67,redisqps=1/0.02*5=250,总qps=100

    2.1.2.2 业务qps=167,redisqps=1/0.02*1=50,总qps=38.56

    2.2 异步

    异步 qps2趋于无穷,qps=qps1,这也是为什么异步吞吐量大,qps恒<=qps1

     

    ========================================================================

    草稿 

  • 相关阅读:
    WDM驱动加载方式理解
    应用程序与设备对象交换数据的三种方法
    IRP完成例程返回值理解
    关于IoCallDriver使用的疑惑
    Ring0打开其他设备对象三种方式整理
    DPC和ISR的理解
    Windows驱动开发技术详解HelloWDM例子win7下无法安装
    wdk中ramdisk代码解读
    内核编程键盘过滤几种方法思路整理
    IOAPIC重定位中断处理函数思路整理
  • 原文地址:https://www.cnblogs.com/silyvin/p/12079785.html
Copyright © 2011-2022 走看看