Компьютерные сети

Latency Numbers Every Programmer Should Know

Знание latency numbers - суперсила на system design интервью. Когда кандидат говорит 'нам нужен cache, потому что network call добавит 500µs, а RAM - 100ns', интервьюер видит глубину понимания. Это отличает senior от junior.

  • **Google**: Jeff Dean's latency numbers - обязательное знание для SRE и system design
  • **HFT**: микросекунды имеют значение - firmware оптимизации для минимизации latency
  • **Gaming**: 16ms frame budget требует понимания каждого компонента pipeline

Предварительные знания

  • Why Networks Exist

Цели урока

  • Запомнить порядки: L1 ~1ns, RAM ~100ns, SSD ~100µs, datacenter RTT ~0.5ms, cross-region ~150ms
  • Различать throughput vs latency: 10GbE = 1.25 GB/s но один RTT всё равно стоит 0.5ms
  • Оценивать сценарий fan-out: 100 параллельных RPC по 1ms = ~1ms wall-clock; sequential = 100ms
  • Применять numbers на интервью: 'нужен cache' обосновывается '100ns vs 500µs' а не 'кеш быстрее'
  • Понимать почему physical limits (speed of light NYC-SF ~21ms one-way) ставят дно для cross-continent RTT

Latency Hierarchy

Понимание порядков величины latency критично для system design. Разница между L1 cache (1ns) и network call (100ms) - это **8 порядков**. Оптимизация должна фокусироваться на bottleneck.

**Правило большого пальца**: RAM ~100ns, SSD ~10µs, Network within DC ~500µs, Cross-continent ~100ms. Каждый уровень - примерно 10-100x медленнее.

Jeff Dean (Google) популяризировал эти числа. Они меняются с развитием hardware (NVMe SSD быстрее SATA, DDR5 быстрее DDR4), но порядки величин остаются.

Сколько RAM reads (100ns) можно сделать за время одного network round trip в datacenter (500µs)?

Network Latency

Сетевая latency состоит из: **propagation delay** (скорость света в кабеле ~200,000 km/s), **transmission delay** (размер/bandwidth), **queuing delay** (ожидание в буферах), **processing delay** (обработка на каждом hop).

**Speed of light limit**: NYC-London минимум 56ms RTT. Никакие технологии не сократят это - только CDN (приближение контента к пользователю).

High-frequency trading (HFT) фирмы платят миллионы за microwave links (быстрее fiber из-за прямой линии) и colocation (сервера рядом с биржей). Каждая микросекунда = деньги.

Почему CDN критичен для глобального сайта?

Disk vs Memory

**SSD** изменил ландшафт: random read 10-100µs vs HDD 2-10ms. Но RAM всё ещё на порядки быстрее. Понимание разницы critical для выбора между in-memory cache и disk storage.

**Sequential vs Random**: HDD head seek 2-10ms, но sequential read 200MB/s. SSD не имеет mechanical seek, но всё равно sequential быстрее (parallelism, prefetching).

Databases оптимизируют под это: B-trees минимизируют random seeks, LSM-trees (RocksDB) делают sequential writes. Write-ahead log - sequential write для durability.

Почему Redis (in-memory) на порядки быстрее PostgreSQL (disk-based) для simple key-value?

Estimation Techniques

На system design интервью нужно быстро оценивать throughput и latency. Ключевые benchmarks: **1 server = 1000 RPS** (typical web), **1 modern server = 10,000-50,000 RPS** (optimized), **1 database = 5000-10,000 QPS** (simple queries).

**Little's Law**: Concurrency = Throughput × Latency. Если 100ms latency и нужен 10,000 RPS, нужно 1000 concurrent connections. Полезно для sizing thread pools.

При estimation округляйте до powers of 10. Цель - порядок величины, не точное число. 1 million vs 10 million важнее чем 1.2 vs 1.8 million.

Сервис с 10ms latency и 100 threads. Какой максимальный throughput (Little's Law)?

Back-of-Envelope Calculations

**Back-of-envelope** - быстрые приблизительные расчёты на салфетке. На интервью показывают понимание scale и способность обосновать архитектурные решения числами.

**Powers of 2 for quick math**: 2^10 ≈ 1000 (KB), 2^20 ≈ 1M (MB), 2^30 ≈ 1B (GB), 2^40 ≈ 1T (TB). Day = 86,400s ≈ 100,000s for easy division.

Важные approximations: 1 day ≈ 100K seconds, 1 month ≈ 2.5M seconds, 1 year ≈ 30M seconds. 1 million requests/day ≈ 10 RPS average.

Latency numbers устаревают и их не нужно знать точно

Точные числа меняются, но порядки величины (ns, µs, ms) стабильны. Важно понимать: RAM ~100ns, SSD ~10µs, Network DC ~500µs, Cross-continent ~100ms. Эти соотношения определяют архитектурные решения

Выбор между in-memory cache и database, CDN и origin, sharding и replication - все основаны на понимании latency hierarchy. Числа дают intuition для правильных trade-offs.

1 миллион запросов в день. Сколько это RPS в среднем?

Ключевые числа для запоминания

  • **RAM**: ~100ns random read
  • **SSD**: ~10-100µs random read (NVMe быстрее SATA)
  • **Network within DC**: ~500µs round trip
  • **Cross-continent**: ~100-200ms round trip
  • **1 server**: ~1000-10,000 RPS (web), ~100,000 ops/sec (Redis)

Связанные темы

Latency numbers - фундамент для system design:

  • System Design Cases — Применение estimation в реальных кейсах
  • Caching — Понимание почему cache критичен (RAM vs Network)
  • CDN — Почему CDN необходим (propagation delay)

Вопросы для размышления

  • Как изменятся эти числа через 5-10 лет? Что останется константой?
  • Когда стоит платить за более быстрый storage tier?
  • Как latency влияет на UX? Какая latency 'чувствуется' пользователем?

Связанные уроки

  • rt-36
Latency Numbers Every Programmer Should Know

0

1

Войти