在 App Engine 中自动缩放拉取队列

Auto scaling a Pull Queue in App Engine

我正在尝试在 PHP 中实现推送通知系统,它需要以尽可能短的延迟发送大量通知,如 described here:

我在这个架构中看到的缺点是如何自动缩放 Notification Worker。据我所知,无法计算拉入队列中的待处理任务,也无法计算活跃的工作人员。你会怎么做?

有队列统计信息,您可以在其中获取队列中的任务数https://cloud.google.com/appengine/docs/python/refdocs/google.appengine.api.taskqueue。我们用它来监控任务数量,看来它可以用于您的目的。

我用这个方法解决了这个计算通知队列中待处理任务的问题,然后根据待处理任务的数量添加工作人员:

public static function task_count($queue)
    {
        $request = new google\appengine\TaskQueueFetchQueueStatsRequest();
        $response = new  google\appengine\TaskQueueFetchQueueStatsResponse();

        $request->addQueueName($queue);            

        google\appengine\runtime\ApiProxy::makeSyncCall('taskqueue', 'FetchQueueStats', $request, $response);

        return $response->getQueueStats(0)->getNumTasks();
    }