微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查一秒钟处理了多少作业?

如何解决检查一秒钟处理了多少作业?

我正在尝试使用 Redis 实现速率限制。我需要调用具有 TPS 100 或每秒可调用 100 次的 API。我有一个限制,我不能调用 API 进行测试。如何测试我的 API 在一秒钟内被调用次数不超过 100 次?

Redis::throttle('key')->allow(100)->every(1)->then(function () {
    // API called that has rate limit
},function () {
    // Could not obtain lock...

    return $this->release(10);
});

解决方法

速率限制不是一项微不足道的任务。由于往返时间,在第二级找到确切的计数变得困难。在您的情况下,由于您已指定 100 作为最大计数,Larval 保证它会在一秒内处理最多 100 条消息。

除非您的 Redis 始终以微秒为单位提供响应,否则每个方法调用都会增加 1-5 毫秒的执行时间。

最好的办法是,您对 Redis 调用进行基准测试,并查看使用 Laravel 限制原语可以获得多少锁。作为基本测试,将油门设置为 10_000 并简单地运行打印语句并检查您可以进行多少次调用(您应该在生产中进行),这个数字将为您提供一秒钟内可以获得的最大锁数。

如果您可以在一秒钟内获得超过 100 个锁,那么没有什么可以阻止您使用您提到的原语。

对于测试,您可以执行以下操作

  • 查找该 API 的 p99/p95/p90 响应时间
  • 在您的系统中添加一个虚拟 API/方法,API/方法可以简单地花费 p99/p95/p90 秒。为简单起见,它可以只休眠所需的时间间隔。

现在你可以点击你的虚拟方法/API,在这里你可以做各种各样的计数来确定你是否超过了油门限制,你可以使用毫秒记录日志并在几秒钟内聚合以识别任何问题,运行这个一个小时左右。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。