当前位置: 首页 > 知识库问答 >
问题:

控制每秒吞吐量

华英睿
2023-03-14

我有一个类女巫负责向客户端发送数据,所有其他类在需要发送数据时都使用这个。让我们称之为“数据ender.class”。

现在客户端要求我们将吞吐量控制在每秒最多50次调用

我需要在这个类上创建一个algoritm(如果可能的话),以保持当前秒的调用次数,如果它达到50的最大值,保持进程要么睡眠或某事,并继续而不丢失数据。也许我必须实现一个队列或比简单的睡眠更好的东西。我需要建议或遵循的方向。

为了简单起见,想象一下每个人都在使用这样的东西,我现在无法改变他们对我的称呼。post()返回是同步的,但可能我可以更改(还不确定):

DataSender ds = new DataSender();
ds.setdata(mydata);
if (ds.post()) {
   //data send succesfull
}

共有1个答案

呼延博易
2023-03-14

如果我没弄错的话,你想要的是节流或限速。

正如Andrew S指出的,您将需要一个队列来容纳额外的请求和一个发送方算法。

要点是,因为您没有立即发送数据,所以呼叫者需要意识到,当他们的呼叫返回时,数据不一定会发送。通常发送者不会高兴,如果他们的呼叫返回,他们假设数据被发送,然后数据丢失。在这种情况下,数据可能丢失的原因有很多。正如Andrew S所指出的,让发件人意识到这将是一个异步发送队列,也许在成功发送时会有确认,这将是一个更安全或正确的方法。

您需要决定队列的大小,您必须限制大小,否则您可以运行内存溢出。您需要决定当队列已满时请求会发生什么。此外,当终端无法访问时会发生什么(服务器关闭,网络问题,太阳耀斑),继续接受html" target="_blank">数据排队或拒绝/抛出异常。

提示:如果你有50个请求的限制,不要先爆开50个请求,然后再睡1秒。计算发送之间的间隔,发送一个请求,做一个短间隔睡眠。

Pro提示:如果发送的新数据使之前请求发送但尚未发送的数据无效,则可以通过从队列中删除无效数据来优化发送的数据。这叫做合并。通常的例子是股市价格。假设你十秒钟前收到ACME 100的价格,无论出于什么原因,数据都没有发送。如果您现在收到ACME 101的新价格,发送100价格记录通常没有用处,只需发送101价格即可。

 类似资料:
  • 在我的测试计划中,我有24个吞吐量控制器,它们的执行率不同,最小的是1%。10个不同的吞吐量控制器有1%的执行率。每个吞吐量控制器下面都有许多事务控制器。当我运行一个测试1小时时,在某些最小百分比吞吐量控制器下定义的采样器甚至不会执行一次。我已经确保所有24个吞吐量控制器的总数增加到100%。如何确保在所有吞吐量控制器上定义的所有采样器至少执行一次? 对于吞吐量最少的控制器,我将其更改为“Tota

  • 我需要一些帮助来使用JMeter。我想记录两个不同的场景,比如单击两个不同的按钮。如果我尝试为两个用户运行,一个用户应该点击第一个按钮,另一个用户应该同时点击另一个按钮。 我知道这是一个基本问题。但我对这一点还不熟悉。这就是为什么在这里问。我试过如下方法: 当我使用CSV数据集配置与两个用户一起运行时,两个登录使用相同的用户。 我还需要测试并发性。我不知道如何正确地执行这个。有人能帮我吗?

  • 我需要用一些百分比来划分我的应用程序的负载。登录模块-60%,账户-10%,其他模块-30%。经过很少的研究,我发现了一个选项下的吞吐量控制器部分,我可以使用它来控制这些百分比。我在那里找到一个名为“每个用户”的复选框。现在我没有得到这个复选框。 根据blazemeter博客,我尝试了一个场景,如下所示,选中了“每个用户”复选框。 从下拉列表中选择“总执行” 标记吞吐量为40 使用的线程数-10,

  • 主要内容:创建JMeter测试计划,添加采样器,添加监听器,保存并执行测试计划,验证输出,添加吞吐量控制器,验证输出在本节中,我们将学习如何使用吞吐量控制器在JMeter中创建分布式负载测试计划。 出于测试目的,我们将在我们网站 www.yiibai.com 的URL下的某些网页上创建分布式负载。这些网页包括: 主页: www.yiibai.com 第1页(Java): www.yiibai.com/cplusplus/ 第2页(C语言): www.yiibai.com/cprogramming

  • 问题内容: 我正在寻找一个Java Executor,它允许我指定节流/吞吐量/节奏限制,例如,每秒最多可以处理100个任务- 如果提交了更多任务,则应将它们排队并在以后执行。其主要目的是避免在遇到外部API或服务器时遇到限制。 我想知道是基础Java(我怀疑,因为我检查过)还是其他可靠的地方(例如Apache Commons)提供了此功能,还是我必须编写自己的Java。最好是轻巧的东西。我不介意

  • 我是azure事件网格概念的新手,目前正在研究在我们的项目中实现的事件网格。任何人都可以告诉我事件网格的吞吐量、每秒可以推送多少事件以及每秒事件网格的出口是多少,这意味着每秒从事件网格输出的事件数。