• 提高QPS


    常用方案

    1.异步化+MQ
    即非阻塞,化繁为简,拿到你需要处理的资源后尽快回复。适用于事务处理场景,且无需对上游返回数据场景。

    2.无锁设计
    本质上是要降低锁冲突,基于数据版本的乐观锁 有效的减少了互斥资源的范围,优点不言而喻。

    3.batch处理
    批量查询、批量commit,基本上操作慢速设备或者不能并行化的对象或者资源时,使用batch 永远是最好的手段。

    4.副本设计
    使用cache、静态化等手段,其核心思想在于 提前将结果准备好,实现的难点数据的更新。

    5.集群+负载均衡
    多个相同功能的节点均摊请求压力

    6、系统拆分、分库分表、垂直拆分+水平拆分
    分库:减少同库的连接数量,减少同库cpu、内存的负载
    分表:减少sql时间

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

    要提高qps,我们必须做2个方面努力

    1、增加并发数

    1.比如增加tomcat并发的线程数,开喝服务器性能匹配的线程数,可以更多满足服务请求。
    2.增加数据库的连接数,预建立合适数量的TCP连接数
    3.后端服务尽量无状态话,可以更好支持横向扩容,满足更大流量要求
    4.调用链路上的各个系统和服务尽量不要单点,要从头到尾都是能力对等的,不能让其中某一点成为瓶颈。
    5.RPC调用的尽量使用线程池,预先建立合适的连接数。

    2、减少平均响应时间

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

  • 相关阅读:
    多线程常见面试题
    Redis常见面试题总结
    ehcache缓存技术的特性
    sar 命令详解
    面试题
    BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)
    课后习题-10
    ulimit 命令详解
    课后习题-9
    netstat 命令详解
  • 原文地址:https://www.cnblogs.com/jis121/p/11239102.html
Copyright © 2020-2023  润新知