Анализ причин тайм-аута интерфейса и практические рекомендации

полный стек

предыстория и цели

Я часто сталкиваюсь с проблемой исключения, когда время ожидания вызова интерфейса истекло.Раньше я пытался изменить настройку времени ожидания кода клиента, кода сервера и прокси-сервера (например, nginx), не определяя причину тайм-аут Иногда проблема может быть решена случайно, но иногда это оставляет риск не лечить симптомы. Цель этой статьи - дать систематические предложения по решению проблемы тайм-аута и попытаться объективно проанализировать различные причины тайм-аута, но есть также субъективные факторы и неполнота. Приветствуются разные точки зрения.

тип тайм-аута

  1. тайм-аут клиента

    • Отправить запрос через XMLHttpRequest

    • Отправить запрос через axios (вызов XMLHttpRequest)
      • Настройки тайм-аута:GitHub.com/ax iOS/ax iOS…
      • Феномен клиента: если время ожидания установлено на 1000 мс и исключение не перехвачено, консоль Chrome сообщает о следующей ошибке.Превышение времени ожидания сообщения об ошибке в 1000 мс выдается XMLHttpRequest.
  2. Время ожидания серверного шлюза или прокси-сервера (например, nginx) истекло.

  3. Время передачи истекло

    • Концепция: клиент взаимодействует с сервером не только через шлюз сервера (такой как nginx), но и через маршрутизатор оператора, шлюз и др. Настройка тайм-аута приведет к сбою вызова интерфейса из-за тайм-аута канала передачи.

      • Феномен на стороне клиента: при вызове через axios, когда исключение не перехвачено, консоль хрома сообщает о следующей ошибке

        XMLHttpRequest выдает сообщение об ошибке Network Error, конкретная причина — ERR_EMPTY_RESPONSE.
    • Разбивка тайм-аута канала передачи
      • физ тайм-аут
        • нат концепция:NAT(преобразование сетевых адресов) помогает замедлить исчерпание доступного пространства IP-адресов за счет использования небольшого количества общедоступных IP-адресов для представления большего количества частных IP-адресов.
        • тайм-аут nat объяснил:О долгосрочном соединении TCP, NAT Timeout, пакет сердцебиения
  4. время ожидания сервера

    • настройка тайм-аута koa (потому что я больше знаком с фреймом koa, где только первая иллюстрация koa)

      • Способ 1, вызовите server.setTimeout:GitHub.com/ Кейн ах / Кейн ах / я ...
        • Феномен клиента: консоль Chrome сообщает о следующей ошибке, когда исключение вызывается через axios, и исключение не перехватываетсяИнформация об ошибке такая же, как и время ожидания канала передачи, поэтому этот метод устанавливает время ожидания только на стороне клиента и не может видеть основную причину, а стороне сервера необходимо сотрудничать с журналом для проверки.
      • Способ 2, используйте промежуточное ПО koa для возврата408 код состояния, на клиенте хорошо видно, что ошибка интерфейса вызвана таймаутом сервера

Практические советы

  1. клиент
    • Настройка тайм-аута: когда сервер установил тайм-аут, по-прежнему необходимо установить тайм-аут клиента (XMLHttpRequest и axios не установлены по умолчанию) и дать пользователю разумный запрос после тайм-аута. Потому что тайм-аут канала передачи будет запущен, когда запрос не достигнет сервера.Время ожидания обычно очень велико.Если клиент не установит время ожидания, он будет находиться в ожидании в течение длительного времени.
    • Обработка исключений: помимо обработки бизнес-ошибок и ошибок времени ожидания клиента, клиент также должен фиксировать ошибки, вызванные временем ожидания связи и временем ожидания сервера, и предоставлять пользователям разумные подсказки об ошибках.
  2. Сервер
    • Параметр тайм-аута: его необходимо установить, когда производительность и стабильность чувствительны, чтобы соединение, которое не отвечало в течение длительного времени, можно было закрыть при необходимости, а ресурсы были освобождены для ответа на новые запросы. Более того, чтобы различать тайм-аут ссылки и тайм-аут сервера на стороне клиента, стороне сервера необходимо вернутьКод состояния 408
  3. Транспортная ссылка: тайм-аут транспортной ссылкиНе могу контролировать, нельзя полностью избежать
  4. Структура интерфейса. Таким образом, даже если тайм-ауты клиента и сервера не установлены, время ожидания интерфейса истечет, потому что истечет время канала передачи. Поэтому, если интерфейс занимает много времени, необходимо рассмотреть асинхронное решение, и оно должно выполняться более 1 минуты.Асинхронная схема, конкретные схемы включают в себя http-опрос и веб-сокет и т. д. Для выбора схемы и подробностей см.:docs.Microsoft.com/en-US/azure…