Кратко
- Каждый новый фронтенд Kinesis увеличивал число соединений, для которых существующим серверам требовались потоки операционной системы. Расширение превысило установленный предел у всей группы.
- При перезапуске восстановление карт маршрутизации конкурировало за ресурсы с клиентскими запросами. У системы оказался свой предел скорости возвращения мощности.
У облака есть неудобная разновидность очереди: серверы уже имеются, но пользоваться ими сразу нельзя. Во время восстановления Kinesis 25 ноября 2020 года из многих тысяч фронтендов в строй удавалось возвращать лишь несколько сотен в час.
AWS объяснила, почему ускорение грозило затянуть ремонт. При запуске сервер заново собирал информацию, необходимую для распределения запросов. Эта работа отнимала ресурсы у самих запросов. Слишком быстрое возвращение машин могло замедлить их ответы, после чего их признали бы неисправными и снова вывели из группы.
Получалось, что темп восстановления нуждался в ограничении ради самого восстановления. Паспортная мощность процессоров такого числа не содержит.
Новая машина с поручениями для старых
Началось все с небольшого расширения фронтендов Kinesis в Северной Вирджинии. AWS отдельно называет его спусковым крючком и отдельно указывает коренную причину: вся группа превысила максимум потоков, заданный конфигурацией операционной системы.
Фронтенды занимались аутентификацией, ограничением частоты запросов и отправкой их в нужные части обработки. Сами потоки данных обрабатывались разделенными на ячейки группами серверов. Чтобы правильно направить запрос, каждому фронтенду требовалась карта участников и принадлежности шардов.
Карта собиралась из нескольких источников. Среди них были постоянные сообщения от соседних фронтендов. Для связи с остальными участниками каждый сервер создавал потоки операционной системы. После расширения новые партнеры появлялись и у уже работающих машин. Обнаружение новых участников могло занимать до часа.
Установка закончилась, а ее последствия еще расходились по группе. Достигнув предела потоков, серверы перестали успешно достраивать карты. Отправлять запросы стало некуда в практическом смысле: обработчики существовали, но входной слой не мог правильно к ним направить.
Так проявилась цена взаимного знакомства. Новая машина приносила вычислительные ресурсы и одновременно загружала ресурсы всех прежних машин. Увеличение количества оборудования и увеличение полезной мощности перестали совпадать.
Ячейки на стороне обработки этого не предотвращали. Их граница не охватывала всю координацию фронтендов. Обещание изоляции имеет смысл вместе с точным ответом, какие общие компоненты остаются за ее пределами.
Ремонт не завершился с диагнозом
AWS убрала добавленную мощность. Повышать системный предел без дальнейших испытаний команда не захотела. При запуске она также изменила источник информации: фронтенды стали обращаться прямо к основному хранилищу метаданных вместо получения данных от соседей.
Первую группу подключили к трафику в 10:07 по тихоокеанскому стандартному времени. Kinesis вернулся к нормальной работе в 22:23. По ходу восстановления частота ошибок снижалась. Устранение причины не означало мгновенного возвращения всех мощностей.
Для покупателя это отдельное свойство услуги. Система может отлично справляться с нагрузкой, когда все карты построены, участники известны, а очереди коротки. После аварии ей одновременно приходится заново налаживать собственную работу, разбирать накопленное и принимать новые запросы. Скорость в этих условиях тоже должна быть предметом измерения.
Резерв имеет значение лишь тогда, когда его можно использовать в нужный момент. Машина, ожидающая безопасного возвращения в группу, не помогает клиенту одним фактом присутствия. Время ожидания становится расходом того, чья работа остается в очереди.
Вспомогательный поток перекрыл вход
Дальше счет пошел по зависимым сервисам. Cognito отправлял в Kinesis информацию для анализа обращений к API и временно хранил ее локально. Передача предполагала возможность кратких сбоев. Длительная остановка выявила скрытую ошибку буферизации: накопленные данные стали блокировать веб-серверы. Некоторые пользователи не могли пройти аутентификацию или получить временные учетные данные.
Сбор сведений о работе превратился в условие самой работы. Буфер дал отсрочку, но его поведение после исчерпания запаса решило судьбу основного сервиса. Сделать буфер больше — способ отложить этот момент; проверять все равно придется именно его.
CloudWatch столкнулся с ошибками обработки метрик и журналов. Часть сигнализаций перешла в состояние недостатка данных, а зависимые от метрик реактивные правила Auto Scaling срабатывали с задержкой. В Lambda буферизация метрик вызвала конкуренцию за память на узлах исполнения и повысила число ошибок вызовов. Один источник сбоя привел к разным ограничениям ресурсов ниже по цепочке.
Обычный инструмент публикации состояния сервисов тоже использовал Cognito. Запасной инструмент с меньшим числом зависимостей работал, но был более ручным и менее привычным операторам. Первые сообщения задерживались. Резервный выход требовал еще и привычки им пользоваться.
Зачем AWS понадобилось меньше серверов
В числе мер AWS назвала переход на машины с более мощными процессорами и большей памятью. Это позволяло сократить число фронтендов и необходимое каждому число потоков для общения с другими. Компания также объявила более подробный контроль расхода потоков, испытания повышения предела и ускорение холодного старта.
Отделение кэша, отдельные разделенные фронтенды для некоторых крупных сервисов и ускорение разбиения входного слоя на ячейки должны были сузить область совместного отказа. Получается несколько самостоятельных покупок: ресурсный запас, раннее обнаружение ограничения, более быстрый запуск и меньшая группа затронутых участников.
В материале AWS о статической стабильности речь идет о сохранении работы при нарушении зависимостей. Раздел об устойчивости к отказам и их изоляции прямо связывает предварительный резерв с затратами. Свободные ресурсы занимают капитал. Надежда создать или подключить их уже во время аварии занимает время клиентов.
Исторический отчет не содержит нынешних пределов группы и недавнего испытания полного перезапуска. Проверка с раскрытыми условиями позволила бы оценить сегодняшнее восстановление. Но вопрос для закупки уже готов: сколько дополнительной мощности съедает координация и с какой скоростью остаток можно вернуть в работу?
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров





