Что такое HTTP-ошибка 503 (Service Unavailable) и как её тестировать?

Ответ

503 Service Unavailable — статусный код HTTP, означающий, что сервер временно не может обработать запрос из-за перегрузки или проведения технических работ. Это не ошибка клиента, а указание на временную проблему на стороне сервера.

Типичные причины с точки зрения тестировщика:

  • Сервер или микросервис "упал".
  • Балансировщик нагрузки не может направить запрос на работающий инстанс.
  • Исчерпаны ресурсы (память, соединения с БД).
  • Плановое техническое обслуживание.

Как тестировать и проверять:

  1. Мониторинг и нагрузочное тестирование: Целенаправленно создавать условия, при которых сервер может начать возвращать 503.
  2. Проверка Retry-After заголовка: Сервер может (но не обязан) вернуть заголовок Retry-After, указывающий, когда повторить запрос.
    HTTP/1.1 503 Service Unavailable
    Retry-After: 3600
    Content-Type: text/html
  3. Тестирование отказоустойчивости клиента: Проверять, корректно ли клиентское приложение (или другой сервис) обрабатывает эту ошибку — использует ли retry с экспоненциальной задержкой, переключается ли на fallback-режим.
  4. Верификация логов: При получении 503 в тестах необходимо проверять логи сервера для установления точной причины.

Ответ 18+ 🔞

А, ну это классика, ёпта! Сидит себе пользователь, тычет в кнопку, а ему в ответ — 503 Service Unavailable. По-нашему, по-простому: «Сервер, братан, прилёг, не до тебя сейчас». Это не ты косячишь, это где-то там, на той стороне, всё накрылось медным тазом.

Что это за зверь такой? Это когда сервер такой: «Э, сабака сука, овердохуища запросов, я больше не могу!» Или его админы на время вырубили, чтобы что-то починить. Короче, проблема не у тебя, а у них. Но понимать-то от этого легче не становится, когда твоё приложение встало колом.

Из-за чего обычно бывает? Глазами тестировщика:

  • Сервис или микросервис просто взвыл и лёг. Как будто его вырубили.
  • Балансировщик нагрузки, этот хитрая жопа, бегает туда-сюда, а живого сервера не находит.
  • Закончилась память, кончились подключения к базе — ресурсов ноль ебать.
  • Плановые работы, всем известные, но всем же мешающие.

И как эту хрень ловить и проверять?

  1. Устроить ад. Самый честный способ — это нагрузочное тестирование. Надо давить на систему, пока она не захрипит и не начнёт плеваться этими самыми 503-ми. Если не падает — молодцы. Если падает — ну, ебать копать, есть над чем работать.
  2. Ловить заголовок Retry-After. Сервер может, если не совсем пидарас шерстяной, подсказать, когда вернуться. Типа: «Отстань на час, потом приходи».
    HTTP/1.1 503 Service Unavailable
    Retry-After: 3600
    Content-Type: text/html

    Проверяй, шлёт ли он эту бумажку. А то бывает, ошибку кинул, а когда ждать — не сказал. Доверия ебать ноль к такому.

  3. Смотреть, как клиент охуевает. Самое важное! Твоё приложение или соседний сервис, получив 503, не должно просто сдохнуть. Оно должно э бошка думай: «Ладно, щас отстану, а через секундочку спрошу ещё разок». И так несколько раз, с паузами. А если всё совсем плохо — перейти в аварийный режим. Надо тестить, как он это делает.
  4. Копаться в логах. Получил в тестах 503 — это полдела. Надо лезть в логи сервера и смотреть, какого хуя это произошло. Может, память кончилась, а может, кот сука собака на провода наступил. Без логов ты так и останешься в дураках.

Вот и вся магия. Статус как бы говорит: «Не ты мудя, а я временно пизда рулю. Подожди чутка». Задача тестировщика — убедиться, что это «чутка» не превращается в вечность, и что все вокруг умеют эту ситуацию переживать.