【问题标题】:Load Testing Thousands of SLOW Connections负载测试数千个慢速连接
【发布时间】:2017-07-26 07:51:33
【问题描述】:

我想测试数百甚至数千个上传服务, 个 HTTPS 连接同时进行。 我想拥有很多,比如说,3G 质量的连接, 每个都受到低带宽和高延迟的限制, 每个向服务器发送几兆字节的数据, 导致服务器处理大量并发的、长期存在的请求。

有许多负载生成工具可以同时生成数千个请求。 (我目前正在使用Locust,主要是为了让我可以接受 我现有的用 Python 编写的客户端库的优势。) 此类工具通常会尽可能快地运行每个并发请求 通过共享网络链接。

有多种方法可以调整 TCP 连接的表观带宽和延迟, 比如Linux的TC 以及方便的包装器,例如 Comcast

据我所知,TC之类控制着共享链接 但他们不能限制单个请求。 如果你想限制单个请求,TC 效果很好。 理论上,许多客户端共享同一个受限制的网络链接, 每个请求都可以串行运行, 受限于带宽, 而不是同时执行大量请求, 一次几个包。 前者会导致执行的活动请求少得多 同时在服务器上。

我怀疑我想要的工具必须主动管理每个客户的发送 并接收以公平地限制它们。 有这样的工具吗?

【问题讨论】:

    标签: networking scalability load-testing throttling


    【解决方案1】:

    您可以查看Apache JMeter,它可以通过以下属性“限制”连接到可配置的吞吐量:

    httpclient.socket.http.cps=0
    httpclient.socket.https.cps=0
    

    属性可以在 user.properties 文件中定义,也可以通过-J command-line argument 传递给 JMeter

    cps 代表character per second,因此您可以将JMeter 线程(虚拟用户)“减慢”到给定的吞吐率,cps 的计算公式为:

    cps = (target bandwidth in kbps * 1024) / 8 
    

    查看How to Simulate Different Network Speeds in Your JMeter Load Test 了解更多信息。

    【讨论】:

      【解决方案2】:

      是的,这些是网络模拟器。一种非常原始的形式是 WanEM。它不会满足您的测试需求。您将需要类似于 Shunra Storm 的硬件设备,它可以使用源自与来自野外的 3、4、5g 连接相关的 Ookla(想想 speedtest.com)的模型来管理单个连接和损伤。好吧,也许我应该说,“可以管理”,因为自从惠普收购 Shunra 以来,该产品就一直缺席。

      Ixia、Agilent、PacketStorm、Spirent 等公司在网络方面还有其他一些市场竞争对手。它们都不便宜,但我明白你的需要。缓慢且特别脏的连接(如手机)会对堆栈产生不成比例的影响,并可能导致服务器耗尽资源,移动连接少于桌面连接。

      附带说明,请确保您在测试代码中包含一个代表思考时间的模型。如果您在没有思考时间或思考时间极其有限的情况下崩溃客户端-服务器模型并损害网络,则只会发生坏事。这将对您的测试的可预测性和可重复性造成特别严重的破坏。您可能还会在代码中追逐数十个与加载相关的工程幽灵,这些代码不会在生产中发生,因为自然延迟和资源释放应该发生在客户端请求之间的活动窗口期间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-20
        • 1970-01-01
        • 2021-09-01
        • 1970-01-01
        • 2016-12-14
        相关资源
        最近更新 更多