Кейс
Почему инструмент считает задачу зависшей, когда она ещё выполняется
Дважды за неделю видеоплатформа сообщила команде, что ролик остановился, хотя он ещё создавался. Исправление — спрашивать у шага, который держит задачу, прежде чем объявлять её потерянной, а не решать по часам.
Главное
- Предупреждение о зависании, основанное только на прошедшем времени, будет ошибочным на самых долгих задачах и задачах с самой длинной очередью.
- Спросите, проверяет ли инструмент у шага, который держит задачу, прежде чем объявить её потерянной.
- Перезапуск может снова добавить время ожидания, а готовый результат первой попытки может быть отброшен.
- Полная очередь может выглядеть как сломанная, особенно в загруженные дни.
- Когда один шаг исправлен, спросите, решают ли так же другие шаги, которые выполняют долгую работу.
Задача, помеченная как зависшая, но всё ещё выполняющаяся, хуже той, что действительно остановилась, потому что очевидная реакция — запустить её заново. Дважды за одну неделю видеоплатформа клиента сообщила команде, что ролик остановился, хотя он ещё создавался. Обе неисправности нашли и исправили быстро: одну отследили на следующий день после появления, другую — в тот же день.
Почему задача, помеченная зависшей, но всё ещё выполняющаяся, обходится бизнесу дорого
Цена ложного предупреждения о зависании оплачивается дважды временем ожидания. Человек, запускающий задачу, делает разумное — запускает её снова, и бизнес ждёт вторую попытку, пока первая ещё работает. В загруженный день перезапуск ещё и занимает место в очереди, а задача, закрытая пока она ещё выполняется, держит это место, ничего полезного не делая, поэтому работа за ней ждёт слота, который не освободится. После одного-двух ложных сигналов люди перестают доверять предупреждениям, которые настоящие, и реальный сбой может остаться незамеченным.
Что увидела команда: два ложных сигнала за одну неделю
Более раннее предупреждение пришло на необычно длинном ролике, почти двадцать минут, последний шаг которого отрисовывает каждый кадр в готовое видео. Этот шаг выполнялся больше трёх часов. Через два с половиной часа платформа сообщила, что видео перестало двигаться. Человек, запускавший его, запустил ролик снова. Вторая попытка заняла больше двух часов; первая в конце концов завершилась, и её видео отбросили как устаревшую попытку. Ролик дошёл до команды примерно на полтора часа позже, чем без предупреждения.
Два дня спустя такой же ложный сигнал пришёл на другом шаге, где создаются клипы ведущего. Ролик ждал там почти весь рабочий день, прежде чем платформа закрыла его как потерянный. Клипы для этого ролика всё ещё стояли в очереди на создание, теперь уже ни для кого. Ролик за ним задержался, потому что очередь по-прежнему считала закрытый выполняющимся. И команда не могла запустить закрытый ролик снова до конца дня, потому что шаг всё ещё числил его у себя.
Что нашёл наш инженер: решает время, а не сама работа
Предупреждение исходило от часов, а не от шага, который сообщил бы, что потерял задачу. Правило смотрело только на прошедшее время: если видео никто не трогал два с половиной часа, его считали потерянным. Существовала защита, которая должна была держать долгую задачу помеченной как живая, пока шаг, отрисовывающий её, занят. Наш инженер выяснил, когда эта защита срабатывала: только пока другие видео ждали в очереди за ним. В тот день больше ничего не ждало, поэтому она не сработала, и правило по часам сработало на задаче, которая была почти готова.
У второго случая был тот же корень. Лимит времени шага ведущего был рассчитан из того, сколько занимает ролик, когда у сервиса, делающего клипы, есть запас. На той неделе его мощность была исчерпана, и каждый клип ждал своей очереди, поэтому шаг занимал во много раз больше расчётного. Часы говорили «потеряно»; сам шаг всё ещё держал ролик у себя и продолжал держать, поэтому очередь вела себя так, будто ролик выполняется.
Что мы изменили
Мы сделали так, чтобы оба шага сообщали, что у них на руках, и чтобы платформа спрашивала, прежде чем сдаться по ролику. Шаг отрисовки теперь с момента, когда берёт видео, и до возврата готового файла сообщает, ждёт ли видео своей очереди или отрисовывается, и насколько продвинулось. Каждую минуту платформа смотрит на любое видео, которое молчит около десяти минут, и спрашивает. Если видео удерживается, сколько бы это ни длилось, оно помечается как живое, и экран команды не называет его остановившимся. Если его никто не держит и через мгновение оно всё ещё молчит, оно сразу помечается как потерянное с ясной причиной, и его можно запустить снова немедленно.
На шаге ведущего, как только время молчания превышает лимит, платформа спрашивает у шага, есть ли ролик всё ещё среди его задач. Пока есть, ролик ждёт в очереди, а не потерян, и остаётся открытым, поэтому клипы не делаются ни для кого и очередь не считает закрытую задачу всё ещё выполняющейся. Там, где шаг не может ответить, по-прежнему действует старое правило, так что ничего не остаётся без страховки, а отсутствующие данные о занятости шага теперь показываются как неизвестные, никогда как простой.
Что теперь есть у бизнеса
Оба изменения работают на платформе клиента. Долгое видео больше не называют зависшим, пока оно ещё отрисовывается, а действительно потерянное сообщается как потерянное в течение минут, а не после долгого ожидания. Ролик, ждущий клипов ведущего в загруженный день, остаётся открытым, пока эти клипы не сделаны, поэтому команда не теряет ролик, его место в очереди или остаток дня из-за ложного сигнала. С момента, когда шаг отрисовки берёт долгое видео, экран команды показывает, что видео удерживается и ждёт ли оно своей очереди или отрисовывается, поэтому затишье на экране больше не выглядит как остановка.
Что вы можете проверить сами
- Когда предупреждение говорит, что задача остановилась, поищите признаки, что она всё ещё ждёт своей очереди: статус в очереди, шаг, который всё ещё её числит, или прогресс, который недавно сдвинулся.
- Спросите того, кто отвечает за инструмент, на чём основано предупреждение: на фиксированном лимите времени или на прямом ответе шага, выполняющего работу.
- Проверьте, сообщает ли шаг, взявший задачу, остальной системе, что держит её, или молчит до завершения.
- Посмотрите на задачу, закрытую как потерянная: остались ли её оставшиеся задачи в очереди и задержана ли задача за ней?
- Сравните предупреждения о зависании в загруженный день и в спокойный; полная очередь может выглядеть как сломанная.
Что делать дальше
Если предупреждение о зависании уже привело к перезапуску, сохраните историю обеих попыток, прежде чем кто-либо её очистит, чтобы видеть, какая завершилась и когда. Спросите у разработчика или поддержки инструмента, основано ли предупреждение только на лимите времени и спрашивают ли шаг, выполняющий работу, прежде чем объявить его задачу потерянной. Затем задайте тот же вопрос про каждый шаг, который выполняет долгую работу. Проследить предупреждение до правила за ним и изменить правило так, чтобы оно спрашивало, прежде чем сдаться, — это та работа, которую наши инженеры делают для клиентов.
Частые вопросы
Почему мой инструмент для видео говорит, что задача зависла, хотя она ещё обрабатывается?
Часто потому, что программа судит по молчанию, а не спрашивает шаг, который держит задачу. Долгий шаг отрисовки или шаг, ждущий мощности, может какое-то время ничего не сообщать, и лимит времени объявляет его потерянным. Работа может всё ещё идти, пока экран перестал меняться.
Стоит ли перезапускать задачу, как только программа сообщила, что она остановилась?
Не сразу. Сначала посмотрите, стоит ли задача в очереди, удерживается ли она или действительно завершилась сбоем. Запуск второй попытки может снова добавить то же время ожидания, а результат первой попытки может быть отброшен как устаревший, когда придёт. Перезапускайте, когда инструмент даёт ясную причину, что задача потеряна.
Почему в самые загруженные дни больше задач выглядят зависшими?
В загруженные дни очередь заполняется, поэтому каждый шаг ждёт дольше, чем в спокойный день, и лимит времени, рассчитанный по спокойному дню, срабатывает на задачах, которые всё ещё медленно продвигаются. Очередь может выглядеть сломанной, когда она всего лишь полная.
На чём должно основываться предупреждение о зависании?
На прямом ответе шага, который держит задачу, а не только на фиксированном лимите времени. Инструмент должен спросить, есть ли у шага ещё эта задача, прежде чем объявить её потерянной. Если шаг не может ответить, запасное правило разумно, если к нему относятся именно как к запасному.
Что произойдёт с первой попыткой, если я запущу задачу снова?
Зависит от инструмента. Некоторые дают первой попытке доработать и отбрасывают её результат, когда завершается вторая; другие отменяют её сразу. Прежде чем перезапускать, спросите, что станет с первой попыткой и с уже проделанной ею работой.