Любые рекомендации по решению проблем производительности LightsailClient с AWS SDK для PHP 3.x.? Варианты параллельного выполнения? - PullRequest
0 голосов
/ 26 марта 2020

Я использую AWS SDK для PHP 3.x, в частности LightsailClient, для разработки веб-приложения для отображения снимков экземпляров Lightsail.

В отличие от EC2Client, LightsailClient не возвращает все shapshots при вызове:

$result = $client->getInstanceSnapshots();

Результаты разбиты на страницы по умолчанию с 20 результатами вместе с токеном для получения следующего набора результатов.

После извлечения первых результатов я перебираю следующие результаты, используя:

while(!empty($result['nextPageToken'])){
                    $result = $client->getInstanceSnapshots([
                        'pageToken' => $result['nextPageToken'],

                    ]);
    /process the result  
    ...
}


Я извлекаю снимки и объединяю их в массив для последующей обработки.

Как выполнять запросы параллельно?

Мне нужно проверить все снимки всех экземпляров во всех регионах. Это легко сделать для первых 20 снимков, так как я могу использовать методы __asyn c, встроенные в AWS, но я не могу сделать это после первой итерации, поскольку у меня должен быть токен разбиения на страницы.

Как я могу получить снимки асинхронно из всех регионов, примерно так:

foreach ($regions as $region){
    /* get the snapshots asynchronously 
}
/* wait for results
/* process results

Прямо сейчас я просто l oop последовательно через регионы. Пока это терпимо, но не масштабируется. Я подозреваю, что нам, возможно, придется перенести это в фоновые задания, а панели мониторинга не будут генерировать данные в режиме реального времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...