Сети и протоколы
Эшелонированная защита и экономика атак
Вы развернули CDN, ограничение скорости и WAF. Затем злоумышленник переключается на HTTP-наводнения, вызывающие промахи кэша и нацеленные на самый дорогой запрос к базе данных, распределённый по 10 000 IP, каждый ниже вашего лимита на IP. Ни одна защита не перехватывает это. Нужно понять, как взаимодействуют слои и когда эскалировать к людям.
Архитектура эшелонированной защиты: полный стек. Ни одна защита не останавливает все атаки. Многоуровневый подход:
- Anycast-скруббинг на edge — каждый PoP CDN является активным центром очистки. Атаки поглощаются на ближайшем PoP, а не концентрируются на origin. Суммарная ёмкость 330+ PoP Cloudflare превышает 37 Тбит/с. Атака 10 Гбит/с становится незначительной, распределённой по многим узлам.
- Stateless L3/L4 ограничения скорости — лимиты на ASN, на префикс отбрасывают очевидные источники усиления и SYN-наводнения до создания TCP-состояния.
- WAF на edge — обнаруживает паттерны прикладного уровня (SQLi, XSS, отпечатки ботов). Работает на PL2 (баланс ложных срабатываний/покрытия), не PL4 (параноидальный) для публичного API.
- Token bucket на IP + на пользователя — останавливает очевидные ботнеты и злоупотребления аутентифицированными пользователями.
- Адаптивное ограничение конкурентности на origin — когда количество in-flight запросов превышает пороговое значение, отклонять новые запросы с быстрым 503. Сервис остаётся стабильным; пользователи получают ошибки вместо таймаутов.
- Наблюдаемость и эскалация к людям — когда автоматические защиты не справляются, дежурные инженеры добавляют пользовательские правила.
| Слой | Что останавливает | Что пропускает |
|---|---|---|
| Anycast edge | Объёмные наводнения (масштаб Гбит/с) | Умные низкоскоростные атаки на IP |
| Stateless L3/L4 лимиты | Усиление, SYN-наводнения | HTTP-атаки на валидные порты |
| WAF (PL2) | Известные сигнатуры атак, паттерны ботов | Zero-day, обфусцированные пэйлоады, злоупотребления бизнес-логикой |
| Лимит (на IP/пользователя) | Очевидные ботнеты, злоупотребление авторизацией | Распределённые ботнеты с резидентными прокси |
| Адаптивная конкурентность | Распределённая перегрузка, наводнения на промахи кэша | Атаки ниже порога перегрузки |
| mTLS | Боковое перемещение внутри сети | Внешние векторы атак |
mTLS в service mesh со SPIFFE. Istio или Linkerd развёртывают sidecar-прокси на каждом поде. Control plane (Istiod) запускает SPIFFE-совместимый центр сертификации. При запуске каждый sidecar получает краткосрочный сертификат (1–24 часа). Сертификаты ротируются через SDS (Service Workload API) push — перезапуск sidecar не нужен. Каждый вызов сервис-к-сервису: (1) mTLS-хендшейк (накладные расходы 20–50 мс на новое соединение на старом оборудовании), (2) зашифрованный пэйлоад, (3) обе стороны проверяют сертификаты. Предотвращает боковое перемещение при компрометации pod-сети. Стоимость: ротация сертификатов добавляет операционную сложность и нагрузку мониторинга (истёкший сертификат = инцидент инфраструктуры, а не баг).
Истощение протокола/состояния в глубину. SYN-наводнения: каждый SYN выделяет слот полуоткрытого соединения в очереди backlog сервера. При переполнении backlog сервер сбрасывает новые SYN-пакеты легитимных клиентов. SYN cookies кодируют состояние соединения как криптографический cookie в ISN — память не выделяется; легитимные клиенты отвечают валидным ACK, декодирующим cookie. ACK-наводнения: ограничение скорости RST (лимит RST в секунду) и подавление несопоставленных ACK брандмауэром. Инъекция TCP RST (MITM на пути): RFC 5961 challenge-ACK вынуждает злоумышленника знать точный номер последовательности, а не просто быть в окне.
Внутренности ограничения скорости: сложность распределённых систем. Token bucket с Redis: T = min(C, T + R * delta_time). Распределённый: каждый запрос атомарно INCR key; EXPIRE key window. При 100k req/sec, Redis добавляет 0.5–1 мс на запрос = 50–100 мс суммарной задержки. Оптимизация: локальный счётчик на сервер + периодическая синхронизация с Redis (допускает небольшую погрешность, сокращает до микросекундных решений). HyperLogLog для приближённого ограничения скорости: ~1.6 кБ на эскиз, ~2% погрешность, подходит для лимитов на уровне ASN или IP-диапазона.
Адаптивная конкурентность: формула сброса нагрузки. Отслеживайте in-flight запросы Q. Установите порог max_queue. Для новых запросов вероятность принятия = max(0, 1 - Q / max_queue). Принимайте запрос с этой вероятностью. Это создаёт плавную деградацию: при 50% перегрузке отклоняется 50% новых запросов; при 100% — все. Пользователи получают быстрые 503 вместо таймаутов очереди (которые могут быть 30+ секунд). Автоматические выключатели отклоняют запросы к бэкендам с недавним превышением порога частоты отказов — предотвращая каскадные сбои по всему графу сервисов.
Проследите изощрённую атаку с использованием усиления и тактик прикладного уровня.
Аномальное скорирование WAF во время атаки
2026-05-15 14:23:00 | requests=45000/sec | score-p50=0.5 | score-p95=3.2 | score-p99=8.1
2026-05-15 14:24:00 | requests=120000/sec | score-p50=6.1 | score-p95=14.2 | score-p99=28.5
2026-05-15 14:25:00 | requests=450000/sec | score-p50=12.3 | score-p95=19.8 | score-p99=32.1
2026-05-15 14:26:00 | blocked=380000 | allowed=70000 | score-threshold=5 WAF скорирует трафик и блокирует при threshold=5. Что происходит в этой хронологии и что должен делать оператор?
Экономика атак. Стоимость атакующего: ~$50–500/мес за сервис ботнета, способный на 10 Гбит/с устойчиво. Стоимость защиты origin: ~$500/мес счёт CDN за 10 Гбит/с устойчивого трафика. Если злоумышленник генерирует 100 Гбит/с, origin не может соответствовать. Но CDN с глобальными PoP поглощает сотни Тбит/с и распределяет стоимость среди миллионов клиентов — стоимость на клиента ничтожна. Экономика благоприятствует атакующему только при защите в одиночку. Общая инфраструктура (CDN) — ответ: нельзя превзойти ботнет в масштабах; можно сделать атаку экономически невыгодной, заставив её провалиться.
Наблюдаемость во время атаки. Ключевые сигналы: (1) скорость запросов в секунду — 10-кратный рост от нормы подозрителен; (2) географическое распределение источников — всё с одной ASN подозрительно; (3) аномальная оценка p99 — нормальные пользователи набирают <1, атакующий трафик >10; (4) cache-hit rate — атакующий трафик на уникальные параметры показывает резкий спад. Пороги оповещения: скорость запросов 10x базовой, спад аномальных оценок p99, снижение энтропии IP-источников (100 IP вместо 100 000), или cache-hit rate ниже 80% во время всплеска трафика. Эскалация к людям, если атака длится >5 минут или превышает 50 Гбит/с.
Сервис e-commerce под устойчивой атакой прикладного уровня. Выберите стратегию защиты.
Разработайте архитектуру DDoS-защиты для видео-CDN ёмкостью 100 Гбит/с, обслуживающего глобальных пользователей. CDN работает в 50 PoP в 30 странах.
- Поглощать атаки 100+ Гбит/с на edge без превышения 10% ёмкости любого PoP.
- Защищаться от объёмных (L3/L4), протокольных (SYN-наводнения) и прикладного уровня (HTTP-наводнения) атак.
- Поддерживать p50 задержку < 50 мс и p99 < 200 мс для легитимных пользователей во время атаки.
- Обнаруживать и блокировать новые паттерны атак в течение 60 секунд.
- Anycast поглощение распределяет нагрузку атаки; нет единой точки отказа.
- Stateless L3/L4 фильтрация перехватывает 80% объёмных атак с минимальной нагрузкой CPU.
- WAF на PL2 балансирует обнаружение vs ложные срабатывания для публичного API.
- Адаптивное ограничение отклоняет при перегрузке, не по превентивной блокировке IP.
- Эскалация к людям через 5 минут перехватывает новые паттерны атак.
- Постоянно измерять частоту ложных срабатываний и нагрузку origin.
Почему это работает
Почему адаптивное ограничение конкурентности предпочтительнее WAF PL4 для высоконагруженного production сервиса под атакой? WAF PL4 принимает превентивные решения на уровне запроса на основе паттернов содержимого, вызывая 5% ложных срабатываний — 1 из 20 легитимных пользователей заблокирован. Адаптивное ограничение конкурентности реагирует на реальную нагрузку системы, отклоняя запросы только когда сервер уже перегружен. Ни один легитимный пользователь не блокируется превентивно; стоимость — что часть атакующего трафика проходит до достижения перегрузки, но быстрые 503 защищают origin от каскадного сбоя. Для публичного сервиса ложные срабатывания (блокировка реальных пользователей) хуже ложноотрицательных (пропуск части атакующего трафика) когда атака ограничена лимитами конкурентности.
Ваш WAF на уровне паранойи 2 и атаки проходят (заблокировано только 70%). Вы повышаете до PL4. Легитимные клиенты начинают жаловаться (5% ложных срабатываний). Что лучше?
- 01Почему адаптивное ограничение конкурентности предпочтительнее WAF PL4 для высоконагруженного production сервиса под атакой?
- 02Во время атаки Rapid Reset (CVE-2023-44487) почему атака обходит ограничение скорости только для HTTP/1.1?
- 03Какие метрики должен мониторить дежурный инженер во время DDoS-атаки и какие пороги сигнализируют об эскалации?
Эшелонированная защита от DDoS требует нескольких слоёв, потому что ни одна защита не останавливает все векторы. Anycast поглощение на edge распределяет объёмные атаки по 330+ глобальным PoP; stateless L3/L4 фильтры отбрасывают усиление и SYN-наводнения до потребления состояния соединения; WAF на PL2 обнаруживает известные прикладные паттерны с допустимыми ложными срабатываниями; адаптивное ограничение конкурентности на origin отклоняет при перегрузке, а не превентивной блокировке IP. Экономика атак благоприятствует защитникам только при использовании общей CDN-инфраструктуры — ботнет, генерирующий 100 Гбит/с за $500/мес, побеждается CDN, который амортизирует ёмкость защиты по миллионам клиентов. Когда автоматические защиты не справляются, наблюдаемость (скорость запросов, аномальные оценки, cache-hit rate, энтропия IP источников) даёт дежурным инженерам сигнал для добавления пользовательских правил в 60-секундном окне эскалации.
встречается в258
- Почему GraphQL получает N+1junior
- Механика DataLoader: батчинг на границе тикаmiddle
- Контракты batch-функции: порядок, формы, ошибкиmiddle
- Federation и lookahead: батчинг за пределами DataLoadermiddle
- Защита сложности запросов: depth, cost, persisted queriesmiddle
- Senior GraphQL API: scheduling-контракт, изоляция арендаторов, наблюдаемостьsenior
- Путь запроса: семь остановок от сокета до ответа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
- Зачем идемпотентность: безопасные retryjunior
- Серверный state machine: четыре состояния idempotency keymiddle
- Стратегии retry: backoff, jitter и thundering herdmiddle
- Outbox и inbox: effectively-once через dual-write границуmiddle
- Конкурентность и архитектура кеша для идемпотентности на масштабеsenior
- Наблюдаемость, production-инциденты и дизайн для глобального масштабаsenior
- Event loop: один поток, три очередиjunior
- Задачи, микрозадачи и scheduler.yield()middle
- Точность таймеров, троттлинг и фоновая работаmiddle
- Голодание микрозадач, длинные задачи и LoAFsenior
- Event loop Node.js: фазы, nextTick и задержка циклаsenior
- React, Vue и наблюдаемость INP в продакшенеsenior
- Render pipeline: шесть стадий от байтов до пикселейjunior
- Цена стадий и модель процесса рендерераmiddle
- Инвалидация, dirty-биты и containmiddle
- Слои композитора: продвижение, перекрытие и память GPUmiddle
- Флейм-стрип DevTools и жизненный цикл кадраmiddle
- Layout thrash: форсированная синхронная компоновкаsenior
- BeginMainFrame, анимации на потоке compositor и память GPUsenior
- Observability в проде: LoAF, INP и полная поверхность атакиsenior
- Что такое V8 и почему производительность различается в 100 разjunior
- Четырёхуровневый JIT-конвейер V8 и профилированная тиеризацияmiddle
- Hidden classes, деревья переходов и расположение в памятиmiddle
- Inline caches, состояния IC и деоптимизацияmiddle
- Orinoco GC: параллельный scavenger, конкурентная разметка и барьеры записиmiddle
- Спекулятивный движок TurboFan и ловушка deopt-loopsenior
- V8 в production: Isolates, сжатие указателей и реальные аварииsenior
- Жизненный цикл service worker и стратегии кешированияmiddle
- Граничные случаи service worker: version skew, долговременность и ловушка навигацииsenior
- Что делает реконсилер: render vs commitjunior
- Объект fiber и дерево с двойной буферизациейmiddle
- Чистота фазы render и подшаги фазы commitmiddle
- Реконсиляция: эвристики диффа и ловушка ключейmiddle
- Приоритетные lanes, time-slicing и useTransitionmiddle
- Bailout, мемоизация и tearingsenior
- React Profiler, компилятор и продакшн-наблюдаемостьsenior
- Стратегии рендеринга: SSG, SSR, ISR, streaming и гидратацияjunior
- SSG, SSR, ISR, streaming и RSC — как работает каждая стратегияmiddle
- Цена гидратации: selective, progressive, острова, resumabilitymiddle
- Hydration mismatch: причины, обнаружение и правило детерминизмаsenior
- RSC, стратегия на маршрут и production-наблюдаемостьsenior
- Core Web Vitals: что измеряют LCP, INP и CLSjunior
- LCP: четыре фазы, одна доминирующая стоимостьmiddle
- INP: input delay, processing, presentationmiddle
- CLS: почему происходят сдвиги лейаута и как их остановитьmiddle
- Lab vs field: почему они расходятся и как использовать каждыйmiddle
- Трейдоффы метрик, RUM-атрибуция и цикл CI+полеsenior
- Общая картина: от URL до LCP до INP как эстафетаjunior
- Восемь слоёв трассировки: от service worker до второй навигацииmiddle
- Пять канонических поломок: где производство стабильно ломаетсяsenior
- Метод трёх треков: чтение трасс и построение системы мониторингаsenior
- Что такое cache stampede и почему он делает всё хужеjunior
- Лок и single-flight: ограничение параллельных rebuildmiddle
- XFetch: вероятностное раннее истечение без координацииmiddle
- Stale-while-revalidate и CDN request coalescingmiddle
- Детектирование stampede и дизайн TTL для продакшенаmiddle
- Метастабильный сбой, fencing-токены и production-постмортемыsenior
- Что такое отношение: таблицы, строки, ключи и ограниченияjunior
- Ограничения, ключи и типы данных Postgresmiddle
- Нормальные формы, денормализация и почему схемы «прилипают»middle
- JSONB, массивы и когда side table побеждаетmiddle
- Heap-хранилище, TOAST и выравнивание колонокsenior
- Целостность схемы: deferral, версионирование и сбои в продакшнеsenior
- Реляционная модель vs документные, wide-column, граф и key-valuesenior
- Что такое индекс и как он ускоряет запросы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
- MVCC: как Postgres раздаёт согласованные снимкиjunior
- Заголовок tuple и механика снимковmiddle
- HOT-обновления и уровни изоляцииmiddle
- VACUUM, bloat и autovacuummiddle
- CLOG, XID wraparound и MultiXactsenior
- SSI и production-тюнинг autovacuumsenior
- Реальные провалы MVCC, deployment-паттерны и распределённые снимки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
- Что такое миграция схемы и почему она заменяет ad-hoc DDLjunior
- ADD COLUMN: мгновенно в PG 11+ против перезаписи в старом Postgresjunior
- Режим отказа очереди блокировок: почему мгновенный DDL может заморозить базуmiddle
- Безопасные DDL-паттерны: NOT VALID, CONCURRENTLY и исправления небезопасных операцийmiddle
- Expand-contract: нулевой простой для ломающих изменений схемыmiddle
- Advisory-блокировки, инструменты миграций и координация деплояsenior
- Таксономия сбоев миграций и дисциплина продакшнаsenior
- Зачем нужно шардирование: потолок одного Postgresjunior
- Выбор ключа шарда: стратегии hash, range, list и directorymiddle
- Партиционирование против шардирования: одно слово, два разных понятияmiddle
- Ко-локация и Citus: инвариант, делающий шардирование пригодным к использованиюmiddle
- Режим отказа hot shard: обнаружение, изоляция и долгосрочная политикаmiddle
- Schema-based шардирование и альтернативы мультиарендностиsenior
- Онлайн-решардинг, 2PC и операционная стоимость шардированияsenior
- Семь актов: от CREATE TABLE до Citusjunior
- Акты 1–3 в глубину: схема, индексы и статистика планировщикаmiddle
- Акты 4–6 в глубину: MVCC bloat, connection pooling и безопасные миграцииmiddle
- Акт 7 в глубину: шардинг, co-location и семиуровневый каскад трейдоффовmiddle
- Наблюдаемость, антипаттерны и производственный триажsenior
- Роли Raft, term и почему majority-кворум предотвращает split brainjunior
- Как Raft реплицирует log entry и решает, что его безопасно коммититьmiddle
- Выборы лидера в Raft: таймауты, правила голосования и четыре свойства безопасностиmiddle
- Raft в реальном мире: partition, медленный диск и клиентская маршрутизацияmiddle
- Расширения Raft: pre-vote, learner, snapshot и линеаризуемые чтенияsenior
- Raft в production: membership change, Multi-Raft и observabilitysenior
- Где происходит data fetching — и почему это решает LCPjunior
- Fetch waterfall''''ы — диагностика и лечение через Promise.allmiddle
- React Server Components и Suspense streamingmiddle
- Клиентский кэш: TanStack Query, SWR и stale-while-revalidatemiddle
- LCP, prefetch и race conditions в интерактивном fetchingmiddle
- Senior internals: RSC payload, слои кэша и production падения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 и error budget: надёжность в числахjunior
- Выбор SLI и SLO-целей: отношения, не ощущенияmiddle
- Multi-window multi-burn-rate-алертинг: почему AND лучше ORmiddle
- Error budget policy, latency SLO и составные journeysmiddle
- Iceberg SLI, математика составного SLO и SLA vs SLOsenior
- Продакшн-отказы SLO, самонаблюдаемость, безопасность и общая картинаsenior
- 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
- Петля инцидента: от пейджера до постмортема до предотвращенияmiddle
- Масштаб, безопасность и 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
- Cache lines и false sharing: когда параллелизм замедляет кодmiddle
- Branch prediction: 10–30 циклов штрафа за неожиданный ifmiddle
- SIMD и data layout: AoS vs SoA и разница в 4–8xmiddle
- Hardware prefetcher, TLB и memory-level parallelismsenior
- Cache-oblivious алгоритмы, PGO и production failuressenior
- Основы 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
- At-most-once, at-least-once, exactly-once: три контракта доставкиjunior
- Три ножки сбоя — где реально происходят дубликаты и потериmiddle
- Consumer-side dedup: самый дешёвый путь к exactly-once processingmiddle
- Kafka exactly-once semantics: idempotent producer и транзакцииmiddle
- SQS visibility timeout, DLQ и outbox patternmiddle
- Exactly-once в production: impossibility-доказательство, гибридные паттерны и реальные инцидентыsenior
- Что такое OAuth и почему пароли — не ответjunior
- Authorization code flow с PKCEmiddle
- Валидация ID-токена и управление JWKS-кешемmiddle
- Ротация refresh-токенов и scope-based least privilegemiddle
- Sender-constrained токены: DPoP и mTLSsenior
- OAuth в production: audience атаки, observability и реальные провалыsenior