Go1.12 2nd Gen AppEngine Standard не может отправлять запросы на внешние ресурсы - PullRequest
0 голосов
/ 18 сентября 2019

Я столкнулся с очень странной проблемой, связанной с поведением AppEngine.В настоящее время мы переходим с версии 1.9 на версию 1.12, поскольку версия 1.9 устареет после 1 октября.Все прошло гладко, все API перенесены и т. Д., И т. Д. Протестировано в промежуточной среде (отдельный проект GC в течение нескольких дней).

После перехода в производство все было хорошо в течение примерно 6 часов (!), Послечто все запросы истекают.Предыдущая версия 1.9 поддерживалась и трафик перенаправлялся на нее.

Теперь это, по-видимому, не проблема загрузки: после инцидента развертывание среды выполнения Go 1.12 без переключения ее в качестве активной версии и частного доступа (один запрос!) не может быть обработан своевременно, если обработчик приложения должен сделать какой-либо запрос: к хранилищу, хранилищу данных или даже простому http-запросу не работает!например, даже сузив его до:

, поместив этот код в main до того, как все остальное выдаст время ожидания после развертывания!

Стандартная среда AppEngine.Go1.12.Так что нет urlfetch.Пример кода (даже без запросов, несколько URL-адресов проверены, все работают локально и в STG Google Cloud Project с одним и тем же кодом):

func main() {
    fmt.Printf("Testing request to external server\n")
    resp, err := http.Get("https://www.example.com")
    if err != nil {
        fmt.Printf("Error making request to external server: %v\n", err)
    }

    data, err := ioutil.ReadAll(resp.Body)
    if len(string(data)) > 255 {
        fmt.Printf("Content: %v\n", string(data)[0:255])
    } else {
        fmt.Printf("Content: %v\n", string(data))
    }
    resp.Body.Close()
    ...
    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), r))
}

Это сообщение появляется при запуске экземпляра после развертывания

Error making request to external server: Get https://www.example.com: dial tcp 123.123.123.123: i/o timeout
Start program failed: failed to detect app after start: ForAppStart(): [aborted, context canceled. subject:"app/valid" Timeout:30m0s, attempts:6073 aborted, context canceled. subject:"app/invalid" Timeout:30m0s, attempts:6074]

(2-я строка понятна - она ​​просто не может подключиться и ждет слишком долго).

Самое странное, если этот код развернуть в промежуточной среде (точно такой же файл), он работает.Похоже, что у GAE закончились попытки подключения или что-то подобное в производственной среде за несколько часов (это довольно загруженный проект) и не может быть продолжено.

В чем может быть проблема такого поведения?Это ошибка?Что может быть утечка и как это диагностировать?У меня заканчиваются идеи, я гуглю часами, любая помощь будет признательна.

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