Компьютерные сети
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
Предварительные знания
Цели урока
- Запомнить порядки: 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 'чувствуется' пользователем?