Чтение длинного хвоста
Задержка находится на кривой, а не на числе
Средняя задержка скрывает, что испытывают пользователи. Реальные сервисы производят распределение: кривую, показывающую, сколько запросов заняло столько-то времени.
Три точки на этой кривой несут большую часть оперативного смысла:
- p50 (медиана): середина распределения. Половина запросов завершается быстрее, половина медленнее. Описывает типичный опыт.
- p99: 99-й процентиль. Только 1% запросов заняло больше этого времени. Описывает наихудший опыт для типичных пользователей.
- p99.9: только 0,1% запросов заняло больше этого времени. Описывает наихудший опыт для активных пользователей, которые часто обращаются к сервису.
Геометрическое наблюдение: распределения задержек почти всегда имеют длинный правый хвост. Кривая быстро поднимается до пика около медианы, затем медленно падает вправо, часто с небольшим бугром далеко от среднего. Этот бугор представляет самых медленных пользователей: тех, кто пишет сердитые жалобы.
Почему средние значения вводят в заблуждение: сервис с медианой 50 мс и p99 5000 мс имеет разрыв 100x между типичным и хвостовым опытом. Среднее арифметическое может составлять 100 мс, полностью скрывая катастрофу. Среднее арифметическое - это одна точечная проекция 2D формы: почти вся информация о форме исчезает.
Проблема умножения процентилей: запрос, касающийся 10 бэкэнд-сервисов, каждый с p99 100 мс, имеет p99 примерно 600 мс (а не 100 мс). Медленные хвосты умножаются. Вот почему книга SRE предупреждает: «остерегайтесь самого медленного из N». По мере роста N ваша хвостовая задержка быстро деградирует.
Математика задержек хвоста
Сервис A имеет поток запросов, который веерообразно разделяется на 5 бэкэнд-сервисов параллельно и ждет всех ответов. Каждый бэкэнд имеет p99 задержку 100 мс.
Истощение бюджета как наклон
Построение бюджета во времени
Бюджет ошибок, построенный на 2D осях (время по оси x, оставшийся бюджет по оси y), раскрывает здоровье сервиса с одного взгляда. Форма кривой истощения несет ту же информацию, что и десять отдельных панелей мониторинга.
Три эталонных формы:
- Здоровое линейное истощение: бюджет падает прямой линией пропорционально прошедшему времени. На 14-й день из 28-дневного окна должна оставаться половина бюджета. Это видимая цель SLO.
- Быстрое горение: крутой наклон вниз. Указывает на активную проблему надежности. Если наклон достаточно крутой, бюджет исчерпывается раньше, чем окно сбросится, срабатывая политика бюджета ошибок.
- Исцеленная кривая: плоский или растущий сегмент. Сервис работает лучше своего SLO. Оставшийся бюджет растет со временем, создавая место для рискованных запусков.
Burn rate (скорость горения) - это наклон линии истощения, нормализованный: скорость горения 1 означает горение бюджета ровно со скоростью хода времени (идеально согласовано с SLO). Скорость горения 10 означает горение в 10x быстрее допустимого: весь месячный бюджет исчерпается за 2,8 дня при таком темпе.
Оповещение с несколькими окнами и несколькими скоростями горения: Google SRE Workbook рекомендует оповещение на комбинированные условия вроде «скорость горения выше 14,4 за последний час И выше 14,4 за последние 5 минут». Геометрия: устойчивый крутой наклон, а не просто кратковременный всплеск. Эта форма отфильтровывает переходные мерцания, но ловит реальные угрозы истощения.
Чтение скорости горения
SLO вашей команды составляет 99,9% в течение 28 дней. На 7-й день вы уже использовали 60% своего бюджета ошибок. Текущая скорость горения за последние 24 часа составляет 8.
Сервисы как ориентированный граф
Production как DAG
Современные сервисы работают как граф зависимостей. Каждый сервис - это узел. Каждый вызов от сервиса A к сервису B - это ориентированное ребро от A к B. Полная картина формирует ориентированный граф (иногда DAG, иногда с циклами через асинхронные повторы).
Критические геометрические свойства:
- Степень выхода (out-degree): сколько сервисов зависит от узла. Более высокая степень выхода означает больше режимов отказа вышестоящих слоев. Сервис, зависящий от 12 бэкэндов, отказывает если любой из этих 12 отказывает.
- Степень входа (in-degree, fan-in): сколько сервисов зависит от этого узла. Более высокая степень входа означает, что единственный отказ здесь каскадирует широко. База данных с 30 зависимых сервисов имеет наибольший радиус взрыва.
- Центральность посредничества (betweenness centrality): сколько кратчайших путей проходит через узел. Узлы с высокой центральностью посредничества - это узкие места. Сервисы аутентификации и основные API обычно набирают высокие баллы.
- Сильно связанные компоненты: группы сервисов, которые образуют циклы. Если A вызывает B и B вызывает A, у вас есть цикл. Циклы усложняют восстановление после отказа: запуск любого сервиса требует, чтобы другой уже работал.
Радиус взрыва (blast radius) - это геометрическое понятие, которое направляет инвестиции в надежность. Радиус взрыва отказа - это подграф зависимых сервисов, на которые он влияет. Инженерия надежности инвестирует интенсивно в узлы с наибольшим радиусом взрыва. Дешевый способ улучшить общую надежность системы часто - это добавить избыточность или graceful degradation на узлах с наибольшей центральностью посредничества.
Рассуждение о радиусе взрыва
Consumer сервис зависит от: AuthService, UserDB, ProductCatalog, PaymentGateway, RecommendationEngine, EmailService, AnalyticsService. AuthService имеет 47 других сервисов, зависящих от него. EmailService имеет 3 других сервиса, зависящих от него. RecommendationEngine имеет 2 других сервиса, зависящих от него.
Информационная геометрия панели мониторинга
Пиксели - это реальная площадь
Панель мониторинга - это 2D поверхность с конечной площадью. Каждый пиксель, выделенный для одного сигнала, - это пиксель, не выделенный для другого. Проектирование панели мониторинга - это геометрическая задача: расположить наиболее релевантную для принятия решений информацию на наименьшей визуальной площади, сохраняя пространственные отношения, которые помогают распознаванию.
Паттерны чтения: западные читатели сканируют F-образно (сначала верхний левый, затем поперек, затем вниз). Наиболее важный сигнал должен находиться в верхнем левом углу. Нижний правый получает наименьшее внимание.
Гештальт-группировка: сигналы одного сервиса принадлежат одной визуальной группе. Задержка, трафик, ошибки и насыщение одного сервиса принадлежат сетке 2x2, а не разбросаны по экрану. Визуальная близость кодирует логическую связь.
Цветовое кодирование: красный для ошибок, желтый для насыщения, зеленый для здоровых диапазонов. Цветовые выборы - это соглашения, а не случайность. Их инверсия стоит когнитивной нагрузки при каждом взгляде во время инцидентов.
Масштабирование оси Y: график в масштабе 0-100% выглядит спокойно даже при удвоении трафика. График с автомасштабированием на недавние значения выглядит тревожно при нормальном колебании. Оба выбора имеют надлежащее использование; выбор геометрический, а не косметический.
Плотность информации: слишком мало сигналов оставляет команду слепой к тому, что не так. Слишком много погребает сигнал в шуме. Принцип соотношения данных и чернил Edward Tufte применяется: максимизируйте соотношение чернил, которые передают информацию, к чернилам, которые украшают. Минимализм в стиле спарклайн превосходит загромождённые виджеты с первого взгляда.
Проектирование для первого взгляда
Ваша команда проектирует одну первичную панель мониторинга для сервиса, который имеет 8 критических SLI по 4 зависимостям бэкэнда. Панель должна ответить на первый вопрос дежурного инженера в 3 часа ночи менее чем за 5 секунд: «Что-то горит, & если да, где?»
Геометрия SRE: Заключение
Формы, которые управляют Production
Вы прошли через четыре геометрические структуры, которые работают под инженерией надежности:
- Распределения задержек как кривые длинного хвоста, где точки процентилей несут больше правды, чем средние значения
- Конусы бюджета ошибок, где наклон истощения раскрывает здоровье сервиса лучше, чем оставшееся число
- Графики зависимостей сервисов, где радиус взрыва и центральность направляют инвестиции в надежность
- Макеты панелей мониторинга как 2D реальная площадь, где выделение пикселей - это геометрическая задача с оперативными последствиями
Геометрическое мышление - это то, что отличает SRE от обычной работы с операциями. Инженер операций читает числа. SRE читает формы. Формы кодируют информацию, которую никакое одиночное число не может передать: наклон скорости горения, толщину хвоста, центральность узла, гештальт панели панели мониторинга.
Сопутствующий урок по самому SRE охватил практики. Этот урок охватил геометрию под ними. Вместе они образуют визуальное и концептуальное строительные леса современной инженерии надежности.