Назад | Перейти на главную страницу

Очистить кеш DNS в Google App Engine

Недавно у нас было приложение Google App Engine, которое не смогло должным образом переключиться при отказе во время планового обслуживания нашего сервера базы данных (размещенного в Aiven).

Во время планового обслуживания сервер БД переключится на заменяющий сервер путем обновления записи DNS. Предполагается, что это произойдет мгновенно, но мы обнаружили, что наше приложение узла, работающее в GAE, вылетало из-за сбоев подключения в течение нескольких минут.

Ошибка подключения воспринимается как серьезная ошибка, поэтому приложение узла закрывается, а затем немедленно заменяется новым процессом путем повторного запуска npm start. Однако этот процесс также не удался, так как он также не мог подключиться и так далее, пока GAE не решила, что сервер является неполноценным, и не заменила его.

К тому времени, когда экземпляры были заменены, похоже, проблема с подключением была решена, но я не понимаю, почему она так долго решалась.

Я подозреваю, что старое имя хоста базы данных могло быть кэшировано и поэтому зависло при попытке подключиться к старому IP.

В качестве работы мне интересно, можно ли очистить кеш DNS в экземпляре движка приложения Google (из экземпляра)?

Я искал документацию о том, как App Engine разрешает DNS, но в итоге попал на страницы о настройке пользовательского или внутреннего DNS.

Подводя итог: наше приложение узла, работающее на GAE, подключается к внешней базе данных и идентифицирует узел с помощью поиска DNS.

Итак, кеш, который мне нужно очистить, - это тот, который кэширует поиск публичной записи DNS. не размещен в Google, но запрашивается приложением GAE.

то есть:

Node GAE App -> { Public Internet } -> Database

Думаю, решением должно быть небольшое изменение архитектуры.

Как PaaS, у вас не слишком много доступа к GAE для выполнения некоторых административных операций.

Зная это, я предлагаю следующие изменения архитектуры:

  1. Используйте виртуальный IP-адрес для работающего сервера базы данных и переключайтесь между серверами при аварийном переключении. DNS будет сопоставлен только с виртуальным IP.

ИЛИ

  1. Проверьте TTL записи DNS и уменьшите его до минимального времени ожидания репликации DNS, например, 60 секунд. Проблема в том, что машины будут чаще обращаться к DNS-серверам.

ИЛИ

  1. Поместите балансировщик нагрузки перед серверами баз данных и измените сопоставление балансировщика нагрузки при отработке отказа. DNS будет отображаться на балансировщик нагрузки.