• 一种性能资源摸底的方案


    通常线上的服务是一种多对多的结构,服务多机器部署,服务依赖多服务,例如下图:服务A部署了N台服务,即Service-A-1,Service-A-2,至Service-A-N,Service-A-VIP是服务A的统一入口(注:虚拟IP技术,Virtual IP,简写VIP);服务A可能依赖服务B、服务C、服务D等多个子服务;服务C与A一样同是一种多对多的结构,下面有子服务E、子服务F。
    因此,我们在对上层的服务如服务A进行性能测试,就需要保证他依赖的子服务(服务B、服务C、服务D)能够正常使用。而标题中“性能资源摸底方案”是指如何巧妙安全地对线上上层服务进行极限性能摸底,并进行资源调优,合理分配服务器的数量。

    安全QPS

    首先需要介绍几个概念。在性能摸底时,我们部署一个新的服务Service-A-Test,它与线上的Service-A-1~N共享子服务B/C/D。需要强调的是,我们对 Service-A-Test性能测试,绝不能把他使用到的Service B/C/D给弄挂了。故将对Service-A-Test能压测的不影响 Service B/C/D正常运作的最大QPS定义为安全QPS,即:QPSsafe。
    QPSsafe可以通过如下计算所得:

    ( QPSpeak  -  QPSperiod_max ) * N

    其中,QPSpeak  是服务历史QPS峰值,QPSperiod_max是压测时间段峰值,因此我们再这个时间段,对服务A 压测QPSperiod_max - QPSpeak这么大的QPS,他的子服务是完全扛得住的, 而N为部署服务A的机器数。

    进而,在对服务进行摸底时,只要压测QPS不超过安全QPS就不要告知下游的子服务。若对服务A压测,我们无需通知服务B/C/D的owner。

    服务性能摸底

    如图所示,我们需要对服务A进行性能摸底,可以按如下步骤操作

    1. 计算并确认安全QPS。
    2. 在一台机器上部署服务A(Service-A-Test),配置 Service-A-Test使用线上的服务B/C/D。
    3. 准备线上流程query做压测用,(因采用阶梯式压测,需要使得每个压测梯度间的query不一样,避免cache影响)
    4. 对 Service-A-Test进行压测,利用profiling等工具进行观察调优。
      因为是探测摸底,这里可以改采用阶梯式压测。QPSmax为单机服务极限QPS, QPSstart为最开始的压测QPS, QPSend是最大的压测QPS,QPSstep为每次加的QPS大小,压测次数m。

    QPSstart = QPSmax
    QPSend = min( 3 * QPSmax, QPSsafe QPS)
    QPSstep = ( QPSend - QPSstart ) / m

    资源调优

    资源利用率:QPSpeak/QPSmax,线上实际流量的最大QPS 除以 能够承受的最大QPS 为资源。
    资源红线RAratio:机器资源利用阈值。如:单机房80%、双机房40%

    单机设定为80%时,双机房为什么40%->因为在双机房的场景下,需要服务在挂掉一台的情况,另一台机器需要扛起两份的流量,所以预留一台的流量能力,故双机房为40%,以此可粗略计算三机房是80%/1.5 = 53.3%(不完全严谨正确)

    可以按如下方式进行调优:

    总结

    面的性能摸底、资源调优方案既可以适用于日常的迭代,也可以直接作用于线上服务;我们重点关注主干服务,进行全局调优;方案机制确定后,可以定期压测,即时预警;机器资源分配可以按照上游宽松,下游收缩的原则。总结如下:

    1、覆盖业务:拓扑主干,全局调优
    2、适用场景:迭代流程、线上流程
    3、执行周期:定期压测,及时预警
    4、资源红线:上游宽松,下游收缩

  • 相关阅读:
    任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。
    【每天一个Linux命令】14. Linux中locate命令的用法
    ZetCode PyQt4 tutorial signals and slots
    ZetCode PyQt4 tutorial layout management
    ZetCode PyQt4 tutorial work with menus, toolbars, a statusbar, and a main application window
    ZetCode PyQt4 tutorial First programs
    A Simple Makefile Tutorial
    Swapping eth0 and eth1 on OK335xS board
    OK335xS U-boot 环境变量解析
    OK335xS U-boot GPIO control hacking
  • 原文地址:https://www.cnblogs.com/byonecry/p/8476781.html
Copyright © 2020-2023  润新知