如何提高qps,提高qps大白话方案

宏观角度

  1. 横向扩展 : 从单应用的cpu利用率,提高cpu核数,到增加集群数.
  2. excuteTime: 减少接口相应时间,也就是减少qps的被除数,从而提高qps.

从客户点击按钮开始说起

  1. 客户点击按钮经历的第一关可能是 nginx.

nginx 的作用反向代理和负载均衡. 其实他还可以有一个作用. 比如这个请求是获取用户信息的请求. 用户信息请求保存在了redis中. 那么通过nginx的url规则识别到该请求后, 直接走脚本语言去请求redis,从而绕过了应用服务器. 达到快速相应的目的.
nginx本身也有处理请求数量的限制.不过这个一般不是提高qps的瓶颈. 方式也很简单明了,两个参数 一个 线程数(理解为cpu核数),一个单线程最大连接数(最大上限是Linux进程最大打开文件数)

  1. 应用中提高相应时间-锁降级

这个降级就是悲观降乐观, 数据库级别的锁降为内存级别的锁(redis,zk)

  1. 应用中提高相应时间-异步思路

在用户体验容忍度以内,进行整个相应链路的异步处理.客观讲就是用户请求进行数据组装汇总后,执行处理的过程扔到mq,或者其他异步的形式中.

  1. 应用中提高相应时间-流式计算思路

这个在jdk1.8之前是需要啰嗦很多话. 但是现在无脑steam的并行处理方案就可以了.

  1. 数据库级别提高相应时间

数据库这边需要举一个例子. 比如说疫情封城,早上8点app限时抢白菜,库存就10颗大白菜. 产品要求可以支持10w人同时抢单(一般都是redis处理,但我只能想到这个例子了)
我们简单理解为10w的qps,一个典型的减库存场景,首先

  1. 读写分离,利用数据库主从同步的功能, 在减库存操作前,进行从库查询操作,从而避免大部分主库无效操作.
  2. 分库, 10颗大白菜, 我搞5台数据库,一平均的话, 一台2w的处理量.
posted @ 2023-01-31 21:50  博文43231  阅读(141)  评论(0编辑  收藏  举报