laravel - 查看一秒内处理了多少个Job?

标签 laravel redis laravel-5.6 laravel-queue laravel-jobs

我正在尝试使用 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 throttle 原语可以获取多少锁。作为基本测试,将 throttle 设置为 10_000 并简单地运行打印语句并检查您可以进行多少次调用(您应该在生产中进行),这个数字将为您提供每秒可以获得的最大锁数。

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

为了测试,你可以做一些事情,比如

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

现在您可以使用您的虚拟方法/API,在这里您可以进行各种计数以确定您是否超过节流限制,您可以使用毫秒进行记录并按秒聚合以识别任何问题,运行此一个小时左右。

关于laravel - 查看一秒内处理了多少个Job?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66102802/

相关文章:

php - 带自定义选择/连接/顺序的 Laravel Eloquent 模型查询

node.js - Redis 发布/订阅 vs Node 事件发射器

php - 如何查询所有的 Multi-Tenancy 数据库?

sockets - 如何将套接字连接更改为超时而不是完全关闭?

php - Laravel 寻找错误的表

php - Laravel Controller 类型提示

php - 在 Laravel Storage 和 AWS S3 中使用通配符列出文件

php - Laravel "partial"播种

php - Laravel 5.1 分页计数

redis - 将redis服务器从1.2.6更新到最新