Получить доступ

Какие порядки задержек нужно знать разработчику?

MiddleХранение данных
Ещё спрашивают так:
  • Насколько память быстрее диска?
  • Сколько стоит запрос в другой дата-центр?
  • Latency numbers every programmer should know
Коротко

Наносекунды — процессор и кэши, ~100 нс — оперативная память, десятки–сотни микросекунд — SSD и сеть внутри дата-центра, миллисекунды — диск HDD и другой город, ~100 мс — другой континент.

  • Каждый уровень дальше от процессора — в 10–1000 раз медленнее
  • Последовательный доступ намного быстрее случайного — и к памяти, и к диску
  • Сетевой вызов внутри ДЦ ≈ 0,5 мс — в тысячи раз дороже обращения к памяти

А ещё Отсюда кэши, пакетная обработка и «не ходить в сеть в цикле»

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Абсолютные цифры меняются с железом, порядки — нет. Приблизительно:

ОперацияВремя
обращение к кэшу L1~1 нс
неудачное предсказание перехода~3 нс
кэш L2~4 нс
захват свободного мьютекса~20 нс
оперативная память~100 нс
сжатие 1 КБ быстрым алгоритмом~2 мкс
случайное чтение 4 КБ с NVMe SSD~20–100 мкс
последовательное чтение 1 МБ из памяти~10 мкс
последовательное чтение 1 МБ с SSD~0,3 мс
оборот по сети внутри дата-центра~0,2–0,5 мс
поиск на HDD~5–10 мс
Москва — Санкт-Петербург и обратно~10 мс
Москва — Франкфурт и обратно~40 мс
через океан и обратно~100–150 мс

Как применять:

  • кэш в памяти против базы — обращение к памяти ~100 нс, к базе по сети с запросом — миллисекунда: разница в 10 000 раз;
  • запросы в цикле — 1000 последовательных вызовов по 1 мс — секунда; одним пакетным запросом — несколько миллисекунд. Это проблема N+1;
  • последовательный доступ — и память (кэш-линии, предвыборка), и диски (особенно HDD) быстрее читают подряд. Поэтому журналы, Kafka и LSM-деревья пишут последовательно;
  • география — скорость света в оптоволокне ~200 000 км/с: из Москвы во Владивосток и обратно физически не быстрее ~65 мс. Синхронная репликация между континентами прибавляет это к каждой записи;
  • оценки на собеседовании — «сервис делает 5 последовательных походов в другие сервисы и 3 запроса в базу» — уже 5–10 мс без всякой работы.

Пропускная способность — отдельная ось: память — десятки ГБ/с, NVMe — единицы ГБ/с, сеть 10–100 Гбит/с. Задержка говорит, сколько ждать один запрос, пропускная способность — сколько данных пройдёт за секунду.

Пример

Страница делает 30 запросов к базе последовательно, по 0,8 мс:   24 мс
То же одним запросом с IN (...):                                1,5 мс
Тот же ответ из локального кэша в памяти:                      < 0,01 мс

Что хотят услышать

  • Порядки величин по уровням: кэш, память, SSD, сеть ДЦ, межгород, континент.
  • Последовательный доступ против случайного.
  • Выводы: кэши, пакетирование, меньше сетевых обходов.
  • Разница задержки и пропускной способности.

Частые ошибки

  • Заучивать точные цифры, не понимая отношений между уровнями.
  • Считать SSD «почти как память».

Что спросят дальше

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем