Как поспали? Надеюсь, хорошо! А вот наша команда и серверы с компами ХРЕНАЧИЛИ всю ночь! А ещё я наконец начал окунаться в невероятно интересный мир highload-распределённых вычислений, но обо всём по порядку.
Вы уже не раз слышали о нашей системе контентной модерации медиа в Стражнике, и в этот раз мы опять о ней.😏
Вечером 02.03 я написал небольшое обновление, которое позволяло делать ротацию файлов в очереди на ручную модерацию. Не поняли? Сейчас поясню.
Хотя большинство файлов (а в некоторых категориях — меньшинство) проверяются нейросетью, рано или поздно они проходят ручную модерацию: кто-то из нашей команды смотрит на результат работы модели и либо подтверждает её вердикт, либо нет. Если нейросеть ошиблась, на основе таких случаев мы дообучаем её, снижая процент ошибок.
Суть обновления была в том, чтобы отправлять на повторную проверку файлы, которые были проверены только моделью, причём сильно старыми её версиями. Это позволяло находить ошибки, которые раньше были незаметны.
НО! Кое-что пошло не так.
Система зависла и перестала отвечать. Тогда мы ещё не знали почему. Вместо того чтобы отправить на перепроверку 10–20 тысяч файлов, из-за опечатки в коде отправились... 2 МИЛЛИОНА ФАЙЛОВ.
Откатить было уже поздно.
В этот момент мой коллега уже понял, что произошло. А я ещё нет — копался в терминале, пытаясь разобраться, почему операция на 10 тысячах файлов вызвала такое зависание.
Я был очень удивлён ошибкой и начал мониторить работу Стражника, нагрузку на сервер, CPU. Включил свою видеокарту в процесс и запустил на ней дополнительные воркеры.
Но была маленькая проблема: наш основной сервер, отвечающий за API, базу данных и координацию распределённых вычислений... был при смерти.
Работа шла, но скорости хватало только для обычной загруженности, а у нас в очереди 2 миллиона файлов. И не забываем, что пользователи продолжают подкидывать новые.
Тут я осознал: надо что-то делать.
Тут я упёрся в лимит размера сообщения в телеге, а если вам было интересно что было дальше, ставьте реакции и пишите комментарии ;3
Вы уже не раз слышали о нашей системе контентной модерации медиа в Стражнике, и в этот раз мы опять о ней.
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