К основному содержимому
#Books

Root Cause: Stories and Lessons from Two Decades of Backend Engineering Bugs (Рубрика Books)

#Books #Engineering #Software #Architecture #Management #SRE

Прочитал несколько глав книги Хусейна Нассера, популярного блоггера (500к подписчиков на канале), что рассказывает про software engineering. Брался я за нее из простого интереса почитать не просто про архитектуру, базы данных и распределенные системы, а скорее про то, как все это ломается на проде. Собственно, эти истории автор и обещает в описании своей книги. Автор считает, что опыт инженера измеряется не только годами, количеством фичей или строк кода, а количеством багов, которые он смог воспроизвести, отследить до root cause и исправить. Это звучит почти банально, пока не вспоминаешь, сколько настоящего инженерного знания приходит именно из таких расследований: где-то узнал, как браузер ограничивает HTTP/1.1 connections, где-то разобрался с HPACK в HTTP/2, где-то впервые увидел, как file descriptor limit превращается в 504 Gateway Timeout.

Мне эта книга напомнила опыт, когда я сам работал с инцидентами, писал или разбирал постмортемы, а также как-то руководил секций траблшутинга для SRE-инженеров, что хотели попасть к нам в компанию и в итоге сделал пару публичных выступлений и статей (они сейчас есть на моем сайте system-design.space: описание самого подхода к интервью и пример такого интервью).

Если же возвращаться к самой книге, то я прочел несколько глав и вот о чем они

1️⃣ История про системное замедление системы. Пользователи видят, что весь продукт стал медленным. Не один endpoint, не одна кнопка, не один сценарий, а как будто “все плохо”. В итоге расследование приводит к маленькому UI-элементу: поисковая строка показывает текст вроде “Search 550M items”, а JavaScript дергает API, который выполняет SELECT COUNT(*) по огромной таблице. Причем делает это снова и снова. В трейсе обнаруживается больше 100 тысяч таких запросов за 30 минут.

Хорошая деталь здесь в том, что простой ответ “добавим CPU базе” был бы неправильным. Да, база была перегружена по CPU. Но причина была не в том, что база “слабая”, а в том, что продуктовый UI породил бессмысленную backend-нагрузку. Настоящее исправление — не вертикально масштабировать симптом, а убрать саму необходимость считать точное число там, где пользователю достаточно приблизительного.

2️⃣ Истории про live translation system, HTTP/1.1, HTTP/2 и load balancer И это, кажется интересная часть для архитекторов и технических руководителей. Сначала long-lived SSE-сессии упираются в браузерный лимит соединений на один host: седьмой запрос просто висит в client-side queue. Потом включение HTTP/2 решает эту проблему, но приносит другую: много маленьких запросов, TLS, frame parsing, stream state и HPACK начинают съедать CPU на backend. Потом появляется load balancer, backend переводят обратно на HTTP/1.1, статические ресурсы кэшируются, все становится лучше — пока unlimited backend connection pool не упирается в file descriptors и TCP receive window.

То есть книга хорошо показывает неприятную, но реальную картину: архитектурное улучшение редко бывает “просто улучшением”. Оно меняет профиль отказов. HTTP/2 убирает один bottleneck, но добавляет CPU overhead. Load balancer разгружает backend, но приносит новые настройки и новые default values. Увеличение лимита file descriptors помогает, но не объясняет, почему столько соединений вообще было создано.

В общем, книга действительно неплохо описывает реальность траблшутинга проблемы по всему стеку и поиск root cause проблемы. Она будет полезна инженерам, кто хочет не просто рассказывать про крутую архитектуру, но и понимать как разные компоненты могут работать друг с другом, если что-то пойдет не так. В итоге, книга напоминает скорее инженерный блог по разбору инцидентов, чем обычный академический учебник и может быть полезна еще и SRE инженерам для подготовки к тем же собеседованиям.

#Books #Engineering #Software #Architecture #Management #SRE