并发用户对前端应用程序和后端应用程序的要求是否可以相同?

时间:2018-04-16 08:45:50

标签: multithreading jmeter performance-testing

我正在测试一个应用程序(后端,它暴露了很少的API)。满足TPS,满足响应时间。但是,当我增加线程(在Jmeter中)时,测试失败,开始给出错误。 (我正在将Threads作为并发用户阅读)所以,我们现在已经说过我的应用程序是瓶颈。要求是前端应用程序的1000个并发用户。前端应用程序中1个事务的用户旅程大约需要2到3分钟。但是,我测试的应用程序是无状态应用程序(后端),它以毫秒为单位响应,并且所需的TPS本身就满足50个线程。但我被要求用1000个线程测试我的应用程序以及前端应用程序有这个要求。 他们说得对吗?前端应用程序的1000个并发用户的需求也可以应用于后端应用程序。

2 个答案:

答案 0 :(得分:0)

前端是后端的Web表示,不是吗?所以没有后端,前端就无法工作。

通常,提供业务non-functional requirements的产品所有者不关心底层实现(前端,后端,数据库,负载平衡器等),因此1000个并发用户的要求适用于<强>整个集成系统。

现在您的目标是确定瓶颈,通常过程如下:

  • 为此设置应用程序ation under test side (CPU, RAM, Swap, network, disk, etc.). You can use JMeter PerfMon Plugin上的基准性能计数器的监视。
  • 使用1个虚拟用户和gradually increase the load开始测试,除非响应时间超过可接受的阈值或错误开始发生(无论第一个是什么)
  • 检查是否缺少资源(CPU,RAM等)。如果是 - 您只需迁移到功能更强大的服务器或扩展应用程序或进行优化。如果不是 - 检查您的应用程序基础结构(Web服务器,数据库服务器等的设置),因为它可能不适合更高的负载。
  • 您的应用程序代码本身也可能是瓶颈。在这种情况下,使用profiling tools来识别最慢的函数,最大的对象,最长的数据库查询等。

答案 1 :(得分:0)

如果你有一个没有NIO的琐碎tomcat,前端知道你不支持足够的并发用户的唯一方法是serversocket TCP syn队列太短。 (客户端获得TCP RST)

jetty和tomcat都设置为使服务器队列队列更长。这是以某种方式阻止任何人检测并发请求限制的最简单方法。

例如,您只能“提供”30个线程和连接,但在serversocket接受队列中仍有1000个TCP SYN待处理。这意味着连接排队,因此被接受,并且就客户端可以判断而言,并发。他们恰好有更长的E2E时间,因为在服务之前这个队列有所延迟。

无论后端是什么,在某些时候这些1000个请求都不会并发:也许它们在cassandra连接中汇集到4个线程中,或者在穷人bean验证缓存前面的一些大锁中漏斗,等...

通过排队,您可以保持对可靠性的控制以保持性能的甜点,并且任何多余的请求会逐渐转换为更多的E2E时间来遍历队列并获得服务。

所以,是的,他们可以要求你能够接受1000个请求,但他们无法知道时间是如何分解的。