zoukankan      html  css  js  c++  java
  • 如何提高系统的吞吐量(QPS/TPS)

    一.系统吞度量要素:

    一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。

    系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

    QPS(TPS):每秒钟request/事务 数量

    并发数: 系统同时处理的request/事务数

    响应时间: 一般取平均响应时间

    (很多人经常会把并发数和TPS理解混淆)

    理解了上面三个要素的意义之后,就能推算出它们之间的关系:

    QPS(TPS)= 并发数/平均响应时间 或者 并发数 = QPS*平均响应时间

    举个例子:

    银行窗口业务,早上8点上班,窗口数量为10个窗口,平均每个人办理业务的时候为5分钟。可以用下面的方法计算。

    并发数=10个窗口

    平均响应时间为 = 5*60 秒

    QPS = 10/(5*60) 事务/秒

    一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。

    决定系统响应时间要素

    我们做项目要排计划,可以多人同时并发做多项任务,也可以一个人或者多个人串行工作,始终会有一条关键路径,这条路径就是项目的工期。

    系统一次调用的响应时间跟项目计划一样,也有一条关键路径,这个关键路径是就是系统影响时间;

    关键路径是有CPU运算、IO、外部系统响应等等组成。

    二.如何提高系统QPS?

    由前面的公式:QPS(TPS)= 并发数/平均响应时间 可以看出,要提高qps,我们必须做2个方面努力

    增加并发数

    1. 比如增加tomcat并发的线程数,开喝服务器性能匹配的线程数,可以更多满足服务请求。

    2. 增加数据库的连接数,预建立合适数量的TCP连接数

    3. 后端服务尽量无状态话,可以更好支持横向扩容,满足更大流量要求

    4. 调用链路上的各个系统和服务尽量不要单点,要从头到尾都是能力对等的,不能让其中某一点成为瓶颈。

    5. RPC调用的尽量使用线程池,预先建立合适的连接数。

    减少平均响应时间

    1. 请求尽量越前结束,越好,这样压力就不要穿透到后面的系统上,可以在各个层上加上缓存
    2. 流量消峰。放行适当的流量,处理不了的请求直接返回错误或者其他提示。和水坝道理很类似
    3. 减少调用链
    4. 优化程序
    5. 减少网络开销,适当使用长连接
    6. 优化数据库,建立索引

    最后,要优化的地方还有很多,上面只是列举常见一些要注意的地方,优化的指导原则就是

    增加并发数 和减少平均响应时间

    参考

    优秀不够,你是否无可替代

    软件测试交流QQ群:721256703,期待你的加入!!

    欢迎关注我的微信公众号:软件测试君


  • 相关阅读:
    漫谈设计模式(三):桥接(Bridge)模式 —— 将类功能、结构两层次分离
    深入理解spring中的AOP原理 —— 实现MethodInterceptor接口,自已动手写一个AOP
    Python面向对象之什么是类(1)
    Python常用模块之logging模块
    Python常用模块之xml模块
    Python常用模块之hashlib
    linux基础命令(一)
    DateTime字段控件值显示短格式的做法
    .net中除去IList中的多余项
    jquery点击按钮显示和隐藏DIv
  • 原文地址:https://www.cnblogs.com/longronglang/p/15650366.html
Copyright © 2011-2022 走看看