【高并发项目】面对 QPS 太高我该怎么办?

本文介绍了QPS(每秒查询数)和TPS(每秒事务数)的概念,强调它们在评估系统性能中的重要性。文章提供了统计QPS的工具,如Prometheus和ApacheJMeter,并提出了面对高QPS时的策略,包括水平扩展、数据库优化、缓存、异步处理、代码优化和使用CDN。此外,还讨论了限流、降级服务和熔断机制在保护系统稳定性和可用性方面的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人

Java知识图谱点击链接:体系化学习Java(Java面试专题)

💕💕 感兴趣的同学可以收藏关注下不然下次找不到哟💕💕

✊✊ 感觉对你有帮助的朋友,可以给博主一个三连,非常感谢 🙏🙏🙏

在这里插入图片描述

写在前面

🔔 QPS 一直悬在知道它和不知道它的这群人心上,知道的人,项目上面对大流量高 QPS,没日没夜的加班处理;不知道的人,没做过高并发项目的人,面试时想写它,又怕经不起面试官的蹂躏。所以它一直是我们心里的一道坎,今天我们就一起来讨论下如何对付项目上大 QPS 的场景。

1、快速了解什么是 QPS

在这里插入图片描述
🔔 QPS 是 Queries Per Second 的缩写,意为每秒查询数。它是衡量系统或服务在单位时间内能够处理的查询或请求的数量。QPS 是评估系统性能和承载能力的重要指标之一。通常,较高的 QPS 值表示系统能够处理更多的请求,而较低的 QPS 值可能意味着系统容量不足或存在性能瓶颈。因此,对于高流量的应用或系统,需要确保 QPS 值在系统能够处理的范围内,并采取相应的优化措施来提高系统的性能和可扩展性。

我们的系统以首页为例,例如我点击下首页有10个请求,那么也就是我点击这1秒,请求了10次,如果同时只有一个用户,那么 QPS 就是 10,如果我们同时在线 100人,那么 QPS 就是 1000,当然这只是辅助大家理解,具体的 QPS,我们还是要用工具去统计的。

2、快速了解什么是 TPS

在这里插入图片描述
🔔 TPS 是 Transactions Per Second 的缩写,意为每秒事务数。与 QPS 类似,TPS 是衡量系统或服务在单位时间内能够处理的事务数量的指标。事务可以是数据库事务、网络事务或其他系统中定义的操作单元。TPS 的高低可以反映系统的并发处理能力和性能。较高的 TPS 值表示系统能够处理更多的事务,而较低的 TPS 值可能意味着系统容量不足或存在性能瓶颈。对于高并发的应用或系统,需要确保 TPS 值在系统能够处理的范围内,并采取相应的优化措施来提高系统的性能和可扩展性。

3、难道我不知道我们系统的 QPS 吗?

你们的项目你有统计过 QPS 吗?下面这些工具可以用来统计 QPS:

  1. Prometheus:一个开源的监控和警报系统,可以通过使用 Prometheus 的客户端库来收集和记录 QPS 数据。

  2. Grafana:一个用于可视化数据的开源工具,可以与 Prometheus 结合使用来创建仪表盘和图表,以展示 QPS 数据。

  3. Apache JMeter:一个功能强大的负载测试工具,可以模拟多个并发用户发送请求,并提供报告和统计数据,包括 QPS。

  4. Siege:一个命令行工具,用于对 Web 服务器进行压力测试,并提供有关 QPS 和其他性能指标的统计信息。

  5. Nginx Access Logs:如果你使用 Nginx 作为 Web 服务器,你可以分析访问日志文件来获取 QPS 数据。

  6. Metrics :也可以自己基于 Metrics 去实现统计,Metrics 是用于测量、监控和评估系统、应用程序或服务性能的量化数据。在计算机领域,指标可以是各种各样的数据,如请求次数、响应时间、错误率等。通过收集和分析指标数据,可以帮助我们了解系统的运行情况、发现潜在问题,并进行性能优化和决策制定。常见的指标收集和监控工具包括 Prometheus、Grafana、ELK等。

这些工具可以帮助你监控和统计 QPS 数据,以便了解系统的负载和性能状况。具体选择哪个工具取决于你的需求和技术栈。

4、面对上万的 QPS 我有哪些策略可以参考呢?

1. 水平扩展:: 首先不要想到软件上优化,优先考虑硬件,除非公司没有钱,那这个就没办了,只能去考虑软件方案。
水平扩展是增加服务器、增加资源以处理更多的请求。可以考虑使用负载均衡来分发请求,确保每个服务器都能均衡地处理负载。 例如我们负载下游的节点只有3台虚拟机,那么我们就增加节点,或者增加机器配置。

2. 数据库优化:优化数据库查询,确保查询语句的性能最佳化,使用适当的索引和查询优化技术。考虑使用缓存技术,如Redis或Memcached,来减轻数据库的负载。

3. 异步处理:将一些耗时的操作转换为异步任务,如使用消息队列来处理后台任务,从而减少请求的响应时间。

4. 缓存:使用缓存来存储频繁访问的数据,减少对数据库或其他后端系统的请求。可以使用分布式缓存系统,如Redis集群,来提高性能和扩展性。

5. 代码优化:检查应用程序代码,识别并优化性能瓶颈,如减少不必要的计算、避免重复查询等。

6. 资源优化:使用监控工具来实时监测系统性能,并根据指标数据进行调优和优化。检查系统的资源利用率,优化代码和配置,减少不必要的资源消耗。

7. CDN加速:这是有钱人的用法,使用内容分发网络(CDN)来缓存和分发静态资源,减轻服务器的负载,提高用户访问速度。

如果以上能用的我们都用了,不能用的实在是因为公司硬性条件的原因不能用。那么我还有剩下的几个策略,这几个策略 屡试不爽

1. 降级服务:在面对大流量时,可以暂时关闭或降低某些非关键服务的可用性,以减轻服务器负载。例如,可以关闭某些不必要的功能模块或限制某些操作的访问频率。

降级服务的目的是在高流量或系统故障时,通过牺牲非关键或次要的功能,保证系统的核心功能能够继续正常运行。通过降级服务,可以减少系统的负载,防止系统崩溃或出现严重的性能问题。

降级服务的具体策略可以根据系统的特点和需求来制定,常见的降级策略包括:

  • 关闭非关键功能: 暂时关闭一些非关键的功能或服务,以减轻系统的负载。
  • 限制服务范围: 限制服务的范围,只提供给核心用户或关键业务,暂时不接受其他请求。
  • 降低服务质量: 降低服务的响应速度或降低服务的容错性,以减少对系统资源的消耗。
  • 异常处理: 对于异常或错误的请求,可以直接返回错误响应,避免进一步的处理。

通过合理使用降级服务,可以在面对大流量或系统压力时,保证系统的稳定性和可用性。但需要注意的是,降级服务应该是临时的解决方案,一旦系统负载降低或问题解决,应及时恢复正常的服务功能。

2. 限流措施: 通过设置请求频率限制或并发连接数限制,限制系统接受的请求量。可以使用令牌桶算法或漏桶算法等限流算法来控制请求的流量。

限流的原理是通过设置系统能够处理的最大请求数量或速率来限制流量。当请求达到限制时,系统会拒绝额外的请求或者将其放入等待队列。这样可以确保系统在可承受的范围内处理请求,避免过载。
常见的限流策略包括:

  • 固定窗口限流: 在固定的时间窗口内,限制处理请求的数量或速率。
  • 滑动窗口限流: 根据最近一段时间内的请求情况,动态调整处理请求的数量或速率。
  • 令牌桶限流: 基于令牌桶算法,为每个请求分配令牌,只有拥有令牌的请求才能被处理。
  • 漏桶限流: 基于漏桶算法,控制请求的流出速率,超过桶容量的请求将被丢弃或延迟处理。

通过合理设置限流策略,可以保护系统免受大流量的冲击,确保系统的稳定运行。同时,还可以通过合理的限流策略来提供公平的资源分配,避免某些请求过度占用系统资源。

3. 熔断(Circuit Breaking):熔断是一种针对服务间依赖关系的保护机制。当某个服务出现故障或响应时间过长时,可以进行熔断,即暂时断开对该服务的请求,避免故障的扩散和影响其他服务。熔断可以快速失败,减少对故障服务的依赖,保护整个系统的可用性。

服务熔断可以保护系统免受过大的负载压力,防止系统崩溃或性能下降。 服务熔断的原理是通过设置阈值来监控系统的负载情况。当系统负载超过预设的阈值时,熔断器会触发,并暂时停止对该服务的请求。这样可以避免请求继续堆积,导致系统资源耗尽或响应时间过长。

熔断器通常会有一个熔断时间窗口,在该窗口内,所有对该服务的请求都会被快速失败,而不会传递到后端服务。在熔断时间窗口结束后,系统会尝试重新接受请求,如果请求成功,则熔断器会进入半开状态,继续接受请求。如果请求失败,则熔断器会重新触发熔断。

通过服务熔断,可以有效地控制系统的负载,保护后端服务的稳定性。在大流量情况下,服务熔断可以防止系统崩溃,并提供更好的用户体验。

相关文章

1、Nginx 限流算法大揭秘

💕💕 本文由激流原创,原创不易,希望大家关注、点赞、收藏,给博主一点鼓励,感谢!!!
💕💕 博主主页: jiliu.blog.csdn.net
🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃
在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

激流丶

感觉小弟写的不错,给点鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值