awesome-everything EN
↑ Обратно к восхождению

Архитектура бэкенда

Жизненный цикл запроса: инструментируй и укрепи сервис

Суть Практический проект — построй небольшой HTTP-сервис, инструментируй все семь остановок, затем намеренно вызови и почини один сбой на каждой, подтверждая каждый фикс числами до/после.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 240 min

Читать про семь остановок — не то же, что увидеть, как каждая ломается, и починить её под нагрузкой. Построй небольшой сервис, инструментируй весь жизненный цикл, затем загони каждую остановку в её характерный сбой и укрепи — с доказательством на каждом шаге.

Цель

Преврати карту юнита в воспроизводимый цикл: инструментируй каждую остановку, воспроизведи её сбой под нагрузкой, примени точечный фикс и проверь числами до/после — чтобы в реальном инциденте прыгать сразу к нужной остановке.

Проект
0 из 7
Цель

Построй небольшой HTTP-сервис (Go, Node или JVM) за reverse proxy, инструментируй все семь остановок жизненного цикла, затем намеренно вызови один сбой на каждой и укрепи её — подтверждая каждый фикс измерениями под идентичной нагрузкой.

Требования
Критерии приёмки
  • Таблица до/после по каждой остановке: симптом сбоя, метрика, вскрывшая его (счётчик переполнения, доля 431, мс сериализации, RSS, p99), и значение после фикса — всё измерено под идентичной нагрузкой, а не оценено.
  • Переполнение accept-очереди больше не даёт молчаливых отбрасываний, защищённый маршрут недостижим без auth, большие заголовки/тела отвергаются до буферизации, а стриминговый эндпоинт держит плоскую память под медленным клиентом.
  • p99 fan-out-эндпоинта ограничен пробрасываемым deadline, а не суммой per-hop таймаутов — продемонстрировано с одним искусственно замедленным downstream.
  • Одностраничная карта жизненного цикла сервиса: для каждой из семи остановок — метрика, за которой следишь, ловимый ею сбой и применённый фикс; артефакт, который ты передал бы on-call инженеру.
Senior-стретч
  • Добавь on-call runbook: по симптому (пустые логи под нагрузкой, 431 для залогиненных, скачок p99, отслеживающий размер payload, рост RSS, медленная страница при здоровых сервисах) — подозреваемая остановка и первая диагностика.
  • Добавь hedged-запросы на p95 на пути fan-out и измерь улучшение p99.9 против лишнего объёма запросов; покажи, что рост нагрузки остаётся в пределах единиц процентов.
  • Добавь HTTP/2-вариант стримингового эндпоинта и покажи, как per-stream flow-control окна плюс head-of-line blocking меняют поведение backpressure против HTTP/1.1.
  • Добавь защиту от request smuggling: отвергай запросы, несущие одновременно Content-Length и Transfer-Encoding, и продемонстрируй, что прокси и приложение согласны о фрейминге тела.
Итог

Это цикл, который ты запускаешь в каждом реальном инциденте жизненного цикла: сначала инструментируй каждую остановку, воспроизведи сбой под нагрузкой, примени точечный фикс (подними backlog, переупорядочь middleware, пагинируй и используй schema-сериализатор, учти backpressure через pipeline(), пробрось deadline и hedge’ни хвост) и проверь числами до/после под идентичной нагрузкой. Сделав это однажды на игрушечном сервисе, превращаешь карту из семи остановок в рефлекс, который по симптому отправляет тебя сразу к той остановке, которой он принадлежит.

Продолжить восхождение ↑Middleware и DI: два паттерна, формирующие любой backend
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.