一、问题解析
如果你的系统流量大幅增加,比如“双十一”流量,你可能会因为性能问题而不知所措。为了解决这个问题,你需要了解当流量增加数倍时,整个系统中哪些组件和服务成为瓶颈。到时候就必须进行全链路压测。
那么什么是压力测试? 完整链接如何运行压力测试?
40.1 什么是压力测试
您可能在业内多次听说过压力测试(或简称压力测试)这个术语。当然,您可能在项目开发过程中进行过压力测试。
但请记住您是如何进行压力测试的。你和很多学生一样吗?首先搭建一个与你的正式环境功能相同的测试环境,导入或生成批量的测试数据,然后在单独的服务器上启动多个线程,对你想要压力测试的接口同时进行压力测试。通常参数设置相同。例如,如果您对检索产品信息的接口进行压力测试,则压力测试时将使用相同的产品ID。最后,你是通过统计访问日志或者检查测试环境的监控系统来记录最终的压测QPS并直接交叉吗?
做这个压力测试其实是错误的。主要错误有:
首先,压力测试时最好使用在线数据和在线环境。我们不知道搭建的测试环境与正式环境的差异是否会影响压力测试的结果。进行压力测试时,我们不能使用模拟请求,而是使用在线流量。复制流量允许您将在线流量复制到您的压力测试环境。模拟流量的访问模型与线上流量有很大不同,因此对压测结果影响比较大。 例如,当检索产品信息时,在线流量会检索有关各种产品的数据。其中一些产品数据可能会也可能不会命中缓存。如果使用相同的产品ID进行压力测试,则只有第一个请求不会命中缓存。发出请求后,数据库中的数据将被播种回缓存中,以确保后续请求命中缓存。各种压力测试数据不再有用。不要从一台服务器发起流量。这很容易导致服务器性能瓶颈,阻碍您提高压测QPS,最终影响压测结果。此外,为了尽可能真实地模拟用户请求,流量生成机器往往放置在靠近用户的地方,例如CDN节点。如果不具备这个条件,可以放在单独的机房,以保证压力测试结果的可靠性。
很多同学之所以出现这个问题,主要是因为没有完全理解压力测试的概念。只要你是使用多个线程同时请求一个服务接口,那么就认为是压力测试为了。
那么压力测试到底是什么?压力测试是指在高并发、大规模流量下进行的测试,让测试人员观察系统在峰值负载时的性能,发现系统内潜在的性能风险。
一些数据也存储在Elasticsearch 中。这部分数据可以放在单独的、单独的索引表中。
您可以通过对下游流量进行特殊处理并向上游流量添加影子库来隔离压力测试流量。
40.2 如何搭建全链路压测平台
当你复制了你的线上流量并完成了你的线上系统的转换后,你就可以进行压力测试了。在此之前通常会有压力测试目标,例如整个系统QPS 需要达到200,000/秒。
但在压测时,请求量并不是一下子增加到每秒20万个请求,而是按照固定的步长逐步增加(例如每次压测增加10000个QPS)。增加一次流量后,让系统稳定运行一段时间,观察系统性能。如果您发现依赖的服务或组件存在瓶颈,请首先减少压力测试流量。例如,回滚到上次压测的QPS,保证服务稳定性,然后针对该流量进行扩容。修改服务或组件,继续增加流量压力。
为了减少压力测试期间的人力成本,可以开发具有多个预配置性能阈值的流量监控组件。例如,您可以将容器CPU使用率阈值设置在60%到70%之间,将系统平均响应时间上限设置为1%。
当系统性能达到该阈值时,流量监控组件及时检测,通知压测流量分发组件减少压测流量,并提醒开发和运维同学快速排除故障。如果性能是瓶颈,请在解决问题或扩容后继续进行压力测试。
对于全链路压测平台,业界已经有很多考虑,阿里巴巴、京东、美团、微博等一些大公司都有适合自己业务的全链路压测平台。在我看来,所有这些压力测试平台都是一样的,都会经历复制流量、死亡和分离流量、节流、监控和合并等步骤。这些都与本课程介绍的核心思想相关。因此,如果您正在考虑开发一个适合自己项目的全链路压测平台,也可以遵循这个成熟的套路。
40.2.1 压测数据的产生
根据我多年从初学者到架构师的学习经验,我整理了一份50万字的面试分析文档、简历模板、学习路线图和必读的Java学习书籍。有需要的朋友请留言或点击。有问题可以在评论区提问。
#[Java]以上关于如何设计生产中全链路压测平台的相关内容来源网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92847.html