3 мин чтения#sports#engineering#infrastructure

Семьдесят одно изменение за шесть дней до первого свистка

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

За шесть дней перед стартом закрыл семьдесят одно отдельное изменение по трансляциям и стриминговой части: синхронизация расписания и составов команд напрямую из официальной системы турнира, оповещение в Telegram, если сигнал трансляции падает, отдельное дешёвое хранилище для видеоархива матчей в облаке, скрипт, который забирает нарезки лучших моментов прямо с общего диска команды. Каждая из этих вещей до этого делалась руками — вручную сверить расписание, вручную заметить, что сигнал упал.

Ни одна из них не убрала необходимость быть на связи всю неделю после старта — просто изменила, куда уходит внимание.

Каждый день после матчей уходила статья с итогами — на два языка, с видео лучших моментов. Один раз ссылку, чтобы поделиться в соцсетях, я забыл отправить вовремя. Два дня спустя, в воскресенье, сессии на сайте упали с 2 711 до 353. Что здесь от забытой ссылки, что от воскресенья — отдельно не разложить, но отчёт, который не дошёл до канала, который его разносит, не работает вообще.

До пятого игрового дня, например, панель состояния сигналов тоже верила источнику на слово. Энкодер сообщает «30 кадров в секунду» — панель рисует зелёным, даже если сам энкодер уже завис и гонит один и тот же кадр по кругу. Один из пляжных сигналов именно так и умер: картинка мёртвая, звука нет, а индикатор — здоров. Панель делала ровно то, что от неё просили. Просто просили не о том. Починил на измеренное значение вместо заявленного, прямо во время турнира: замёрзший кадр теперь виден сразу.

Второй разрыв обошёлся дороже. Сервер, который вёл запись, писал её круглые сутки — даже пустой зал всё равно записывается — а хранил её две недели. Диск набрал 193 из 197 гигабайт. В момент, когда места не осталось, программа как раз переписывала свой файл с настройками десяти трансляций и всех ключей доступа к ним. Не хватило места дописать — файл обнулился, осталось около четырёх килобайт. Список трансляций пропал, список ключей — тоже.

Сама трансляция не легла, и не потому что кто-то это предусмотрел: процесс, который отдавал сигнал, не перезапускался неделю и продолжал работать так, как был настроен раньше, в испорченный файл больше не заглядывая. Но тронь что-нибудь — и всё исчезло бы разом. Освободил место, удалив мастер-записи первого дня турнира насовсем (архив в облако для них ещё не был настроен — отдельный, неприятный урок), поднял настройки десяти трансляций из работающего процесса, ключи доступа перевыпустил. Проверил: всё на месте. После этого снимок настроек стал сниматься каждые 15 минут и проверяться перед сохранением, чтобы пустой снимок никогда не перезаписал хороший, — а весь оставшийся турнир, ещё пять матчей включая финал, настроил заранее.

Читать по теме