Сети и протоколы
Граница физического уровня
Каждые несколько лет вендор анонсирует link-технологию, звучащую как научная фантастика — свет через воздух, терагерцовое радио, квантово-защищённые ключи. Большинство инженеров считает, что каждый раз нужно заново изучать физический уровень. Не нужно: одна модель расшифровывает их все.
Дальняя оптика — аналоговая борьба
Свет через 5 000 км одномодового стекла — не чистый цифровой канал, а аналоговый сигнал, который медленно разрушается. Три основных нарушения. Хроматическая дисперсия: разные длины волн распространяются с немного разными скоростями, поэтому импульс расплывается и перетекает в следующий символ. Поляризационная модовая дисперсия (PMD): две ортогональные поляризации света приходят с немного разным временем. Четырёхволновое смешение: в DWDM-системе с 60+ длинами волн в одном волокне нелинейные эффекты заставляют соседние каналы генерировать паразитные тоны, мешающие соседям.
Десятилетиями решением была физика: модули компенсации дисперсии (DCM) — катушки специально разработанного волокна, «загибающего» дисперсию обратно. Современная дальняя оптика перенесла борьбу в DSP. Когерентное детектирование восстанавливает не только амплитуду света, но и его фазу — так же как радиоприёмник смешивается с местным генератором. Имея фазу, можно применять модуляцию высокого порядка (16-QAM, 64-QAM на свете) и позволить цифровому процессору отменить хроматическую дисперсию и PMD программно. Результат впечатляющий: современный когерентный трансивер несёт 800 Гбит/с на одной длине волны, и 60+ длин волн делят одно волокно — десятки терабит на пару волокон.
FEC — то, что делает SNR-запас реальным
Необработанный оптический канал на длинном подводном участке имеет BER около 1e-6 — одна плохая битная ошибка на миллион, слишком шумно для передачи. Но доставляемый BER лучше 1e-12. Весь разрыв — это прямое исправление ошибок. Дальняя оптика использует каскадную схему: LDPC (Low-Density Parity Check) внутренний код с итерационным мягким декодированием, обёрнутый в Reed-Solomon внешний код, убирающий оставшиеся пакетные ошибки. Результат — 10 дБ и более coding gain — канал ведёт себя так, как будто у него на десять децибел больше сигнала, что напрямую означает больше бит на символ или большую дистанцию между усилителями.
Компромисс — задержка и кремний: FEC добавляет избыточные биты (накладные расходы 7–25%), декодер сжигает мощность и добавляет фиксированную задержку обработки, и когда канал ограничен FEC, он отказывает обрывом — немного опустить SNR ниже порога коррекции, и BER прыгает с 1e-12 до неисправного без постепенного предупреждения.
- Когерентная дальняя оптика
- 800 Гбит/с/λ, 60+ λ/волокно
- Coding gain FEC (подводный)
- необработанный BER 1e-6 → после FEC 1e-12, 10+ дБ
- Wi-Fi 7 (802.11be)
- 320 МГц каналы, 4096-QAM (12 бит/символ)
- Hollow-core волокно
- ~50% быстрее твёрдого стекла (свет в воздухе)
- QKD по волокну
- ~100 км без квантовых повторителей
- Post-quantum (ML-KEM)
- поставляется в TLS сейчас, NIST FIPS 203
Радиорубеж: Wi-Fi 7, 5G-Advanced, 6G
Радио продолжает использовать те же рычаги Шеннона — больше полосы, больше бит на символ. Wi-Fi 7 (802.11be) удваивает ширину канала до 320 МГц, поднимает модуляцию до 4096-QAM (12 бит на символ против 10 для Wi-Fi 6) и добавляет Multi-Link Operation — один клиент передаёт на 2.4, 5 и 6 ГГц одновременно. 5G-Advanced (3GPP Release 18, финализирован в 2024) — апгрейд 5G на полпути: AI/ML-оптимизация радиоинтерфейса, снижение мощности RAN на 20%+, более тесная интеграция со спутниками (non-terrestrial networks). 6G (2030+) стремится к терагерцовым частотам, AI-native радиоинтерфейсу, созданному вокруг обученных компонентов с первого дня, и интегрированному зондированию — сеть использует свои радиосигналы для картирования физической среды.
Почему это работает
Почему hollow-core волокно важнее, чем кажется. Свет в твёрдом стекле движется со ~200 000 км/с — стекло замедляет его на треть. Hollow-core волокно проводит свет через воздух, удерживаемый внутри микроструктурной стеклянной решётки, и он распространяется почти со скоростью вакуума: примерно на 50% быстрее твёрдого стекла. Для большинства нагрузок это несущественно. Для latency-bound бизнесов — высокочастотного трейдинга, где трансатлантический round-trip, сокращённый на миллисекунды, стоит реальных денег — это переписывает экономику. Это редкое изменение физического уровня, которое снижает сам потолок задержки — потолок, который никакая программная оптимизация не может преодолеть. Полевые испытания идут сейчас; массовое развёртывание — дело конца 2020-х годов.
Co-packaged оптика, LEO и квантовый вопрос
Ещё два сдвига, заслуживающих отслеживания. Co-packaged optics (CPO) переносит оптический трансивер с pluggable-панели и интегрирует его непосредственно в корпус ASIC коммутатора — сокращая электрическое расстояние, резко снижая мощность per-port и позволяя создавать более плотные фабрики по мере роста портовых скоростей за 800G. LEO-спутниковые созвездия (Starlink и аналоги) меняют компромисс задержки-покрытия: орбита ~550 км даёт 20–50 мс RTT — на порядок лучше ~600 мс GEO, при охвате мест, куда оптика никогда не дойдёт.
Затем квантовый вопрос, где стоит отделить хайп от практики. Квантовое распределение ключей (QKD) использует физику фотонов для обнаружения любого перехватчика при обмене ключами — но работает по волокну с жёстким ограничением дальности ~100 км, потому что квантовое состояние нельзя усилить, а квантовые повторители — ещё исследовательская проблема. Практически важное сейчас — противоположное: постквантовая криптография. ML-KEM и ML-DSA (стандартизированные NIST решётчатые алгоритмы, FIPS 203/204) — это классическое программное обеспечение, устойчивое к атаке будущего квантового компьютера, и оно уже поставляется в TLS-хендшейках. QKD — это более десяти лет до изменения повседневной работы сети; постквантовая криптография меняет её в этом году.
Какой стандарт IEEE 802.11 определяет Wi-Fi 7 с 320 МГц каналами и 4096-QAM?
Вендор предлагает QKD как решение против квантовых компьютеров, взламывающих TLS. Какова реалистичная позиция для fullstack-инженера сегодня?
Долговечная модель
Документация по link-технологиям занимает сотни страниц и продолжает поступать. Не нужно читать их от корки до корки. Когда встречаешь незнакомую link-технологию — новую версию Wi-Fi, оптический стандарт, промышленный fieldbus — три раздела дают 80% того, что нужно:
- Физическая среда — медь, волокно или радиодиапазон. Задаёт скорость распространения (минимальная задержка) и среду шумов.
- Схема кодирования — порядок модуляции, линейное кодирование и FEC. Задаёт бит на символ и то, как канал деградирует.
- Формат кадра — заголовок, границы полезной нагрузки, MTU. Задаёт накладные расходы и передачу от канального уровня к сетевому.
Сопоставив эти три, можно оценить полосу, задержку, поведение при ошибках и где реальные развёртывания столкнутся с трудностями — без чтения всего стандарта.
Компания по высокочастотному трейдингу хочет минимально возможный RTT NYC↔Chicago. Выберите инвестицию физического уровня.
Применение модели трёх вопросов
1/3- 01Что когерентное детектирование восстанавливает, чего не делает прямое детектирование, и почему это важно для дальней оптики?
- 02Необработанный BER на подводном участке ~1e-6, но доставляемый BER ~1e-12. Объясни разрыв и его стоимость.
- 03Что три вещи нужно читать о незнакомой link-технологии и что каждая говорит?
Дальнее одномодовое волокно — аналоговая борьба с хроматической дисперсией, PMD и четырёхволновым смешением; когерентное детектирование восстанавливает фазу, позволяя DSP отменять нарушения и применять модуляцию высокого порядка, неся 800 Гбит/с на λ. FEC — LDPC внутренний плюс Reed-Solomon внешний — покупает 10+ дБ coding gain, превращая необработанный BER 1e-6 в доставляемый 1e-12, ценой накладных расходов и отказа-обрывом. Радиорубеж использует те же рычаги Шеннона: Wi-Fi 7 с 320 МГц каналами и 4096-QAM, 5G-Advanced (3GPP Release 18), исследования 6G в терагерцах. Hollow-core волокно — редкое изменение, снижающее сам минимальный потолок задержки; постквантовая криптография (ML-KEM) — практическая квантовая защита, поставляющаяся в TLS сегодня, пока QKD остаётся дальнобойным исследованием. Долговечный вывод: читай три вещи — среда, кодирование, формат кадра — и любая новая link-технология расшифрована на 80%.
встречается в162
- Путь запроса: семь остановок от сокета до ответаjunior
- Accept и парсинг: от очереди ядра до типизированного запросаmiddle
- Маршрутизация и middleware: что выполняется и в каком порядкеmiddle
- Обработчик и ответ: от бизнес-логики до байтов на проводеmiddle
- Стриминг и backpressure: когда клиент читает медленнее, чем вы пишетеsenior
- Таймауты и хвостовая задержка: бюджеты, дедлайны и ловушка fan-outsenior
- Middleware и DI: два паттерна, формирующие любой backendjunior
- Пишем middleware: сигнатуры, next() и три модели фреймворковmiddle
- Инверсия управления: как зависимости добираются до классаmiddle
- Скоупы и время жизни DI: singleton, request, transientmiddle
- DI как шов для тестов: фейки, моки и граница, которая важнаsenior
- DI-контейнеры в продакшене: графы разрешения, циклы и когда не стоитsenior
- Блокирующий vs неблокирующий I/O: два способа ждатьjunior
- Event loop: один поток, упорядоченные фазыmiddle
- Что блокирует цикл: CPU-работа и синхронные вызовыmiddle
- Вынос CPU-работы: worker threads и пул libuvmiddle
- Backpressure и ограниченная конкурентностьsenior
- Пропускная способность под нагрузкой: хвостовая задержка и насыщениеsenior
- Зачем пул: цена создания соединенияjunior
- Размер пула: почему больше не значит быстрееmiddle
- Взятие и таймауты: очередь ожидания — настоящий дроссель задержкиmiddle
- Стратегии retry: backoff, jitter и thundering herdmiddle
- Наблюдаемость, production-инциденты и дизайн для глобального масштабаsenior
- Задачи, микрозадачи и scheduler.yield()middle
- Точность таймеров, троттлинг и фоновая работаmiddle
- Event loop Node.js: фазы, nextTick и задержка циклаsenior
- Стратегии рендеринга: SSG, SSR, ISR, streaming и гидратацияjunior
- SSG, SSR, ISR, streaming и RSC — как работает каждая стратегияmiddle
- Цена гидратации: selective, progressive, острова, resumabilitymiddle
- Core Web Vitals: что измеряют LCP, INP и CLSjunior
- LCP: четыре фазы, одна доминирующая стоимостьmiddle
- INP: input delay, processing, presentationmiddle
- Lab vs field: почему они расходятся и как использовать каждыйmiddle
- Трейдоффы метрик, RUM-атрибуция и цикл CI+полеsenior
- Общая картина: от URL до LCP до INP как эстафетаjunior
- Восемь слоёв трассировки: от service worker до второй навигацииmiddle
- Пять канонических поломок: где производство стабильно ломаетсяsenior
- Метод трёх треков: чтение трасс и построение системы мониторингаsenior
- Что такое индекс и как он ускоряет запросыjunior
- Leading-column rule: почему порядок столбцов в composite-индексе важенmiddle
- Partial, expression и covering-индексыmiddle
- Типы индексов: GIN, GiST, BRIN, Hash, Bloom и HOT-обновленияmiddle
- Index-only scan, Visibility Map и INCLUDEsenior
- Типичные сбои в продакшне и аудит индексовsenior
- Упражнение по проектированию индексов: стратегия полнотекстового поискаsenior
- EXPLAIN и планы выполнения: что решает планировщик и почемуjunior
- Типы сканирования: Seq, Index, Bitmap, Index-Onlymiddle
- Алгоритмы соединения и каскад ошибок оценки строкmiddle
- pg_statistic, ANALYZE и производственная наблюдаемостьmiddle
- Расширенная статистика: исправление ошибок оценки для коррелированных колонокsenior
- Кеш планов, настройка константных стоимостей и внутренности планировщикаsenior
- Производственные режимы отказа и стабильность плановsenior
- Connection pool: зачем амортизировать стоимость backend Postgresjunior
- Режимы PgBouncer: session, transaction и statementmiddle
- Размер пула: формула (ядра × 2) + шпинделей и двухуровневый стекmiddle
- Исчерпание пула и idle-in-transaction: сценарий отказа в 3 ночиmiddle
- Миграция на transaction mode: план развёртывания и prepared statements в PgBouncer 1.21middle
- Процессная модель Postgres и почему увеличение max_connections снижает производительностьsenior
- Ландшафт пулеров 2026, serverless connection storms и полная таксономия отказовsenior
- ADD COLUMN: мгновенно в PG 11+ против перезаписи в старом Postgresjunior
- Режим отказа очереди блокировок: почему мгновенный DDL может заморозить базуmiddle
- Безопасные DDL-паттерны: NOT VALID, CONCURRENTLY и исправления небезопасных операцийmiddle
- Таксономия сбоев миграций и дисциплина продакшнаsenior
- Выбор ключа шарда: стратегии hash, range, list и directorymiddle
- Ко-локация и Citus: инвариант, делающий шардирование пригодным к использованиюmiddle
- Режим отказа hot shard: обнаружение, изоляция и долгосрочная политикаmiddle
- Онлайн-решардинг, 2PC и операционная стоимость шардированияsenior
- Семь актов: от CREATE TABLE до Citusjunior
- Акты 1–3 в глубину: схема, индексы и статистика планировщикаmiddle
- Акты 4–6 в глубину: MVCC bloat, connection pooling и безопасные миграцииmiddle
- Акт 7 в глубину: шардинг, co-location и семиуровневый каскад трейдоффовmiddle
- Наблюдаемость, антипаттерны и производственный триажsenior
- Что такое три сигнала: метрики, логи, трейсыjunior
- Метрики и cardinality: cost-модель time-series databasemiddle
- Логи и объём: cost-модель структурного логированияmiddle
- Трейсы и сэмплирование: cost-модель distributed tracingmiddle
- Join-ключи и exemplar''''ы: как три сигнала становятся компонуемымиmiddle
- Observability 2.0: широкие события и сдвиг стоимостиsenior
- Режимы сбоя и инженерная практика: cardinality budget''''ы, PII и сэмплированиеsenior
- Зачем нужны структурные логи: дневник против таблицыjunior
- Схема продакшн-лога: поля, которые несёт каждая строкаmiddle
- Log levels и маршрутизация алертовmiddle
- Стратегии sampling и стоимость логовmiddle
- PII-редакция и log injectionsenior
- Propagation trace-контекста в логахsenior
- OTel Logs Data Model и audit-логи как подсистемаsenior
- Сигналы OTel, Semantic Conventions и проводной формат OTLPmiddle
- Авто-инструментирование и ручные спаны: правило 80/20 в OTelmiddle
- Collector OTel: receivers, processors, exporters и паттерны развёртыванияmiddle
- Стратегии сэмплирования: head, tail и parent-basedmiddle
- Vendor-нейтральность, eBPF-инструментирование, Operator и OTel в браузере и serverlesssenior
- Эксплуатация OTel Collector: надёжность, version skew, режимы отказа и управлениеsenior
- RED и USE: два чек-листа, одна дисциплина триажаjunior
- Инструментация RED в Prometheus: счётчики, гистограммы и дисциплина cardinalitymiddle
- USE на Linux: CPU, память, диск, сеть и PSImiddle
- Golden signals, структура дашборда и auto-RED в service meshmiddle
- Cardinality как драйвер затрат: label, PII, exemplars и семплированиеmiddle
- Native histograms, SLO и паттерны production-сбоевmiddle
- Выбор SLI и SLO-целей: отношения, не ощущенияmiddle
- Multi-window multi-burn-rate-алертинг: почему AND лучше ORmiddle
- Error budget policy, latency SLO и составные journeysmiddle
- Iceberg SLI, математика составного SLO и SLA vs SLOsenior
- Flame graph: читаем картинку, которая показывает, куда ушло времяjunior
- Sampling vs instrumentation profiling: почему 99 Гц побеждает в productionmiddle
- Типы профилей: CPU, память, off-CPU, mutex — какой когда братьmiddle
- Continuous profiling: always-on flame graphs с eBPF и корреляцией trace-idmiddle
- Как flame graph строится из сэмплов и как использовать его в productionmiddle
- Linux perf, внутренности eBPF, PGO и ограничения sampling''''аsenior
- Profiling в production: безопасность, war stories, OTel profiles и дизайн инфраструктурыsenior
- Debugging-воронка: SLO → RED → trace → profilejunior
- Архитектура OTel: один SDK, четыре сигнала, один wire-форматmiddle
- Экономия на observability: удерживаем затраты в пределах 5% inframiddle
- Масштаб, безопасность и ROI наблюдаемых системsenior
- Сначала профиль: измерь куда реально уходит времяjunior
- Закон Амдала и self-time: потолок любого ускорения, которое ты можешь выпуститьmiddle
- Измерительный цикл: микробенч, макробенч, prod-профиль, эффект наблюдателяmiddle
- Чтение флейм-графов: формы, профайлеры по языкам и 60-секундный сканmiddle
- Статистические baseline''''ы: почему один запуск — не измерениеmiddle
- История профайлеров и ловушки микробенчей: от Кнута до GWPsenior
- Hardware counters, профили холодного старта и безопасность профилейsenior
- Непрерывное профилирование в масштабе: затраты, CI-гейты, корреляция с трейсами и антипаттерныsenior
- Что делает путь горячим: симптом против причиныjunior
- Пять форм hotspot''''а: CPU, аллокации, кэш, лок, syscallmiddle
- Чтение parent и child chains: где применять правкуmiddle
- JIT deopt, цикл fix-and-verify и PR-time профилированиеmiddle
- Аппаратные счётчики и Intel TMA: диагностика подкатегорийsenior
- False sharing и горячие пути нативных мостовsenior
- Горячие пути в production: безопасность, хвостовая латентность и происхождение инструментовsenior
- Иерархия памяти: почему расстояние важнее числа операцийjunior
- Row-major vs column-major: порядок доступа и разрыв в 9xjunior
- Branch prediction: 10–30 циклов штрафа за неожиданный ifmiddle
- Hardware prefetcher, TLB и memory-level parallelismsenior
- Основы GC: за что рантайм берёт налогjunior
- Алгоритмы GC: поколенческая гипотеза, concurrent marking и write barriermiddle
- GC tradeoffs: пауза, throughput, память и давление аллокацийmiddle
- Настройка GC: пейсинг, форма кучи и наблюдаемость аллокацийmiddle
- Внутреннее устройство GC: tri-color инвариант, write barriers и глубокое погружение в рантаймыsenior
- GC в production: наблюдаемость, безопасность, edge cases и управление флотомsenior
- N+1: одна логическая операция, много round-trip''''овjunior
- Семейства фиксов: JOIN, IN, preload и DataLoadermiddle
- Обнаружение N+1: query logs, APM traces и CI gatesmiddle
- DataLoader: батчинг по дереву резолверовmiddle
- Кросс-протокольный N+1: HTTP fan-out и Redis MGETmiddle
- N+1 в масштабе: исчерпание пула, изменения планов и денормализацияsenior
- Batching: амортизируй фиксированную цену каждой операцииjunior
- Окно батчинга: размер и время ожиданияmiddle
- Batching в Kafka и Postgresmiddle
- io_uring и наблюдаемость пакетированияmiddle
- От Nagle до io_uring: эволюция пакетированияmiddle
- Backpressure, изоляция сбоев и безопасность батчей в продакшенеsenior
- Что на самом деле стоит bundle: download, parse, compile, executejunior
- Core Web Vitals: LCP, INP и CLSmiddle
- Code splitting: route-level, component-level, vendor splittingmiddle
- Tree shaking и compression: удаляем то, что не используемmiddle
- Third-party scripts: тихий убийца бюджетаmiddle
- CI enforcement и RUM: делаем бюджеты рабочимиmiddle
- V8 JIT-пайплайн, HTTP-приоритеты и безопасность bundlesenior
- Цикл performance: дисциплина, а не проектjunior
- Классификация и исправление: сопоставление family bottleneck с методамиmiddle
- Observability-стек и CI gates: ловить регрессии до выпускаmiddle
- От инцидента к enforcement: SLO burn до верифицированного исправления за 35 минутmiddle
- Культура, экономика и масштаб performancesenior