Hi 👋,

Задержка — это еще одна очень важная тема, когда мы говорим о бэкэнд-инжиниринге или сети. В этой статье мы обсудим задержку, ее важность и способы ее оптимизации для повышения производительности приложений.

Оглавление

  1. Что такое задержка?
  2. Почему это важно?
  3. Что вызывает задержку?
  4. Как измерить задержку?
  5. Как оптимизировать задержку?
  6. Вывод

1. Что такое задержка?

Задержка — это общее время между действием клиента и ответом сервера на это действие. Это просто время пути туда и обратно между браузером и сервером.

Задержка сети измеряется в миллисекундах (мс).

2. Почему это важно?

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

Давайте разберемся на простом примере, эмулируя GET-запрос в браузере.

  • Блокировка: время, в течение которого запрос находился в очереди. (Браузер Chrome может отправлять на сервер не более 6 HTTP-запросов за раз)
  • Разрешение DNS: время, затраченное на поиск DNS
  • Соединение: время, затраченное на рукопожатие TCP
  • Настройка TLS: время, необходимое для установления безопасного соединения TLS.
  • Отправка: время, затраченное на отправку HTTP-запроса на сервер.
  • Ожидание: время, затраченное сервером на подготовку ответа.
  • Получение: время, затраченное на получение ответа от сервера.

Для самого первого запроса, для первых 14 КБ данных задержка больше из-за поиска DNS, рукопожатия TCP и безопасного согласования TLS.

3. Что вызывает задержку?

Задержка играет жизненно важную роль в производительности системы. Это зависит от разных факторов:

  • Расстояние

Одной из основных причин сетевой задержки является расстояние между клиентом (который делает запрос) и сервером (отвечающим на запрос).

Например. Допустим, мой веб-сайт (pankajtanwar.in) размещен в центре обработки данных в Дели. Таким образом, для пользователя, подключающегося из Джайпура (~ 200 км от Дели), он, вероятно, ответит в течение 20–30 мс, но для пользователя, осуществляющего доступ из Нью-Йорка (~ 11000 км от Дели), он может столкнуться с задержкой, близкой к 70 мс.

  • Среда передачи

Тип среды передачи, используемой для передачи пакетов данных, также влияет на задержку. Современное оптическое волокно примерно в 200 раз быстрее, чем старые сети на основе медных кабелей.

  • Несколько маршрутизаторов

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

  • Плохо оптимизированный сервер

Несколько факторов на внутреннем сервере, такие как медленные запросы к базе данных, нехватка памяти, медленная обработка данных и неоптимизированный код, также влияют на задержку.

4. Как измерить задержку?

Существует несколько стандартных показателей для измерения задержки.

  • Время до первого байта (TTFB)

Это одна из широко распространенных матриц для измерения задержки. Как понятно из самого названия, TTFB — это время (в миллисекундах), за которое браузер получает первый байт ответа от сервера.

  • Пинг

Ping — наиболее распространенная утилита для измерения задержки. Он отправляет 32-байтовый пакет на сервер и измеряет время, необходимое для достижения пункта назначения и возврата с ответом клиенту.

  • Время приема-передачи (RTT)

Это довольно распространенная и простая матрица. Это общее время, затрачиваемое пакетом данных на перемещение от источника к месту назначения и обратно.

5. Как оптимизировать задержку?

С точки зрения оптимизации производительности приложений очень важно уменьшить причины высокой задержки. Вот основные методы, которые могут помочь нам уменьшить задержку.

  • CDN

Использование CDN (сети доставки контента) — важный шаг к уменьшению задержки. CDN кэширует контент, обслуживает его из ближайшего центра обработки данных и обеспечивает эффективный путь для перемещения пакетов данных, что значительно сокращает время прохождения туда и обратно и, следовательно, задержку.

  • HTTP/2

HTTP/2 — это высокоэффективный протокол, который снижает задержку за счет обеспечения параллельной передачи данных, мультиплексирования ответов, приоритизации запросов, минимизации служебных данных протокола за счет эффективного сжатия заголовков HTTP, сокращения круговых обходов и многого другого.

  • Кэширование на стороне клиента

Браузеры могут кэшировать некоторые ресурсы, что уменьшает количество обращений к серверу и снижает задержку.

  • Оптимизация на стороне сервера

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

6. Заключение

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

В следующей статье мы обсудим, как спроектировать многопользовательскую игру в реальном времени counter-strike (CS-Go), которая очень чувствительна к задержке (или «лагу»).

Давайте подключимсяhttps://twitter.com/the2ndfloorguy

Первоначально опубликовано на: https://blog.pankajtanwar.in/what-is-latency-lets-deep-dive-and-understand-possible-ways-to-optimise-it

Ссылки

  1. developer.mozilla.org/en-US/docs/Web/Perfor..
  2. cloudflare.com/ru-ru/learning/performance/g..
  3. en.wikipedia.org/wiki/Latency_(engineering)