Как поспали? Надеюсь, хорошо! А вот наша команда и серверы с компами ХРЕНАЧИЛИ всю ночь! А ещё я наконец начал окунаться в невероятно интересный мир highload-распределённых вычислений, но обо всём по порядку.



Вы уже не раз слышали о нашей системе контентной модерации медиа в Стражнике, и в этот раз мы опять о ней. 😏



20:02 Files in queue: 7

Я: @(тег модератора), допилил механизм ротации файлов, отправил на первичный проход, щас будет мясо.




Вечером 02.03 я написал небольшое обновление, которое позволяло делать ротацию файлов в очереди на ручную модерацию. Не поняли? Сейчас поясню.



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



Суть обновления была в том, чтобы отправлять на повторную проверку файлы, которые были проверены только моделью, причём сильно старыми её версиями. Это позволяло находить ошибки, которые раньше были незаметны.



20:29 Files in queue: 0

Я: Их там чёт так много, что он встал, обновляя...




20:33 Files in queue: 0

Я: Оно встало на seq scan, начал строить индексы.

Модератор: У тебя всё встало, я не могу отдать работу.

Я: Ага, индекс строится.

Модератор: А там настолько много?

Я: Похоже, на 10 минут.




НО! Кое-что пошло не так.



Система зависла и перестала отвечать. Тогда мы ещё не знали почему. Вместо того чтобы отправить на перепроверку 10–20 тысяч файлов, из-за опечатки в коде отправились... 2 МИЛЛИОНА ФАЙЛОВ.



Откатить было уже поздно.



20:37 Files in queue: 1 926 629

Имперский Стражник: 1926629 files moved (уведомление о завершении ротации)

Модератор: Куда...? Сколько...? СКОЛЬКО?!




В этот момент мой коллега уже понял, что произошло. А я ещё нет — копался в терминале, пытаясь разобраться, почему операция на 10 тысячах файлов вызвала такое зависание.



20:53 Files in queue: 1 925 896

Я: ***** Я CLEAR-ы ***** на второй круг

Модератор: АХАХХАХАХВХАХАХАХАХАХАХАХАХА

Модератор: Кстати, ты мне стикеры по полминуты отдаёшь.

Я: Ну да, там вместе с этим ещё внутренние проверки + БД чистит мусор, там щас дон ******




Я был очень удивлён ошибкой и начал мониторить работу Стражника, нагрузку на сервер, CPU. Включил свою видеокарту в процесс и запустил на ней дополнительные воркеры.



Но была маленькая проблема: наш основной сервер, отвечающий за API, базу данных и координацию распределённых вычислений... был при смерти.



21:10 Files in queue: 1 924 994




21:22 Files in queue: 1 923 877




21:30 Files in queue: 1 922 260




22:08 Files in queue: 1 918 838




Работа шла, но скорости хватало только для обычной загруженности, а у нас в очереди 2 миллиона файлов. И не забываем, что пользователи продолжают подкидывать новые.



Тут я осознал: надо что-то делать.



22:38 Files in queue: 1 915 550

Модератор: Когда там закончится твой затуп сервера?

Я: Уже отошёл, но мы упёрлись в скорость отдачи файлов сервером.

Модератор: Ты же в курсе, что с такой скоростью (1 стикер в секунду) мы это будем делать 23 дня?

Я: Думаю, стартануть реле загрузки, которое частично разгрузит и ускорит процесс.

Я: Только его надо написать. D:




Тут я упёрся в лимит размера сообщения в телеге, а если вам было интересно что было дальше, ставьте реакции и пишите комментарии ;3