Какое ограничение скорости REST API для стандартной службы поиска Azure? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть конвейер выпуска в DevOps Azure, который создает 36 поисковых индексов в стандартной службе поиска Azure с максимальным значением 50.

Я использую сценарий Powershell, который читает файлы json в репозитории, для непосредственного создания поисковых индексов с использованием REST API.

Сначала я удаляю все индексы, а затем создаю их снова. (для учета любых изменений в json-файлах, хранящихся в репо)

Кажется, что можно выполнить около 25 вызовов API REST, прежде чем я получу сообщение об ошибке:

(503) Server Unavailable. You are sending too many requests. Please try again later.

Даже если я вставляю задержку в 4 секунды между каждым вызовом API REST (который либо удаляет, либо создает индекс) Я все равно получаю ту же ошибку.

Что-нибудь особенное, что мне нужно сделать? Документированы ли где-нибудь ограничения скорости вызовов REST API? (Я думал здесь , но, к сожалению, нет.)

Фрагмент скрипта Powershell: ($ indexFiles - это список файлов json, которые нужно применить)

$headers = @{"Content-Type" = "application/json"
             "api-key" = $SearchAPIKey }

$indexesUrl = "https://$SearchSiteName.search.windows.net/indexes?api-version=$SearchAPIVersion"

Write-Host "Applying the following $($indexFiles.count) index files: "

$indexFiles | ForEach-Object {  $indexData = Get-Content -Path $_.FullName -raw
                                $filename = $_.Name
                                try
                                {
                                    Start-Sleep -Milliseconds $APICallDelay
                                    $response = Invoke-WebRequest -Method Post -Uri $indexesUrl -Headers $headers -Body $indexData
                                    if ($response.StatusCode -eq 201)
                                    {
                                        Write-Host "- $filename applied"
                                    }
                                    else
                                    {
                                        Write-Error "Issues with creating index $filename with Url $indexesUrl. Status code returned was $($response.StatusCode). Msg: $($response.StatusDescription)"
                                    }
                                 }
                                 catch 
                                 {
                                    $summaryMsg = $_.Exception.Message
                                    $detailed = $_.ErrorDetails.Message | ConvertFrom-Json 
                                    $detailedMsg = $detailed.error.message
                                    Write-Error "Error with creating index $filename. $summaryMsg. Detailed error: $detailedMsg"
                                 }
                             }

Если кто-нибудь может предложить какие-либо предложения, это будет с благодарностью!

1 Ответ

0 голосов
/ 16 мая 2019

Сообщено о текущих ограничениях для служб поиска Azure:

  • Создать индекс (POST) можно вызывать до 12 раз в минуту
  • Обновление индекса (PUT) может вызываться до 360 раз в минуту
  • Удалить индекс можно вызывать до 12 раз в минуту
  • Получить индекс можно вызывать до 600 раз в минуту
  • Списочные индексы можно вызывать до 300 раз в минуту

Так что в настоящее время у нас нет другого выбора, кроме как вставить Start-Sleep -Minutes 2 в наш код, если у нас есть более 12 индексов для развертывания одновременно. (

...