Что происходило с сайтом на последнем проекте при перезапуске сервера

Ответ

При перезапуске сервера сайт мог вести себя по-разному в зависимости от конфигурации:

  1. Статический контент (HTML, CSS, JS) - обычно загружался без проблем, если файлы уже были собраны и лежали в папке сборки.

  2. API запросы - могли временно не работать (504/502 ошибки), пока сервер не поднялся полностью. Мы обрабатывали это в коде:

async function fetchData() {
  try {
    const response = await fetch('/api/data');
    return await response.json();
  } catch (error) {
    if (error.message.includes('Failed to fetch')) {
      showReconnectMessage();
      setTimeout(fetchData, 5000); // Повторный запрос через 5 сек
    }
  }
}
  1. WebSocket соединения - автоматически переподключались благодаря логике в клиенте.

  2. SSR - если использовался, мог быть недоступен до запуска Node.js сервера.

Мы минимизировали влияние:

  • Настроили health checks для балансировщика
  • Добавили заглушку "Сервер обновляется" при 502 ошибке
  • Использовали Service Worker для кеширования критичных ресурсов

Ответ 18+ 🔞

Ага, слушай, вот это реально жизненная ситуация, когда сервер взял и накрылся медным тазом. Ну, перезапустили его, а сайт-то, сука, как себя поведёт? Всё зависит от того, как его там, блядь, настроили.

Ну, во-первых, вся эта статика — твои HTML-шки, CSS и JS-файлы — они обычно выживают, как танки. Если их уже собрали и запихнули в папку, то они просто отдаются, и хоть ты тресни. Прям как будто ничего и не случилось, ебать мои старые костыли.

А вот с API начинается настоящий цирк, ёпта. Пока сервер не отойдёт от перезагрузки и не встанет в полный рост, запросы туда могут просто лететь в пустоту. Клиент получает в ответ эти прекрасные ошибки — 504, 502, мол, «шлюз недоступен», «таймаут». Мы эту хуйню, конечно, на клиенте ловили. Смотри, какой приколный код писали:

async function fetchData() {
  try {
    const response = await fetch('/api/data');
    return await response.json();
  } catch (error) {
    if (error.message.includes('Failed to fetch')) {
      showReconnectMessage();
      setTimeout(fetchData, 5000); // Повторный запрос через 5 сек
    }
  }
}

Видишь? Поймали ошибку, показали пользователю, что, мол, «сорян, браток, сервер прилёг», и через пять секунд — хуяк! — пробуем ещё разок. Авось, очухается.

Дальше — вебсокеты. Ну, с ними вообще отдельная песня. Соединение рвётся, конечно, но нормальный клиент, если он не совсем мартышлюшка, сам начнёт тыкаться, пытаясь переподключиться. Там своя логика есть, переживать не за что.

А если у тебя там ещё и SSR затесался (рендеринг на стороне сервера), то тут вообще писец может наступить. Пока Node.js-сервер не запустится, страницы-то генерировать некому, блядь. Может белая пустота вылезти или ещё какая дичь.

Но мы, естественно, не лыком шиты. Чтобы пользователи не охуели полностью, подстраховались:

  • Настроили health checks для балансировщика нагрузки, чтобы он не совал трафик в ещё дохлый сервер.
  • Сделали симпатичную заглушку на случай 502 ошибки, типа «Идёт техническое обновление, скоро всё будет, не кипятитесь».
  • И самый жирный козырь — Service Worker. Эта хитрая жопа умеет кешировать самое важное, так что даже если сервер лег, у пользователя хотя бы интерфейс останется на экране, а не просто «ошибка загрузки», в рот меня чих-пых.

Вот так вот, в двух словах. Вроде мелочь, а без таких подпорок — один сплошной пиздец и волнение ебать.