Статьи — это, конечно, хорошо, но и своими достижениями тоже хочется похвастаться 😁
Как вы знаете (учитывая, сколько раз я об этом рассказывал), Имперский Стражник проверяет медиафайлы на наличие NSFW-контента. И чтобы всё это работало стабильно — нам пришлось хорошенько постараться.
Как устроена система?
Есть агенты с нейронкой, которые непосредственно проверяют изображения и видео. Но, чтобы они не могли просто скачать всё подряд (безопасность), файлы отдаются через промежуточный сервер, который возвращает только то, что нужно в рамках конкретной задачи.
Агентов много, сервер один — и вот тут начинается самое интересное. Оптимизация. Скорость. Боль (и удовольствие).
Сейчас у нас работает примерно такая схема:
1) После запуска сервер начинает кешировать задачи в in-memory кеш. Он пытается загрузить ~200 файлов в память, чтобы отдавать их с минимальной задержкой.
2) В процессе подгрузки каждую секунду создаётся задача, которая берёт данные из БД и предзагружает по 25 файлов, пока буфер не заполнится.
3) Когда клиент запрашивает задачу, мы сначала проверяем кеш.
— Есть в кеше → отдаём мгновенно + триггерим дозаполнение
— Нет → догружаем синхронно (и да, это уже больнее)
Вроде простой механизм…
Но на деле — это куча вылизанных таймингов, лимитов и балансов.
И что это дало?
Сначала мы вышли на 14 ops, потом на 18 ops.
И ~99% запросов — с минимальным ожиданием благодаря кешу.
А теперь давайте приземлимся: что такое 18 ops?
Это:
18 файлов в секунду
~40 HTTP-запросов к Telegram каждую секунду
~4 МБ/с трафика
И это не пик.
Это стабильная, непрерывная нагрузка.
Представьте: вы листаете чат, где каждую секунду появляется 18 стикеров…
И так часами.
Без единого «loading…».
Вот примерно так сейчас и работает система.
Прикольно получилось)
Кстати, можете сами посмотреть, как это всё живёт в реальном времени:
https://gf.redguy.ru/public-dashboards/e0e799d208844820bd772fdee8b136ca?orgId=1&refresh=5s
Сейчас поток не на максимуме, но всё равно хорошо видно, как основная нагрузка уходит через preload.
#tech
Post #820
2.91K

- ❤ 25
- 🔥 3
- ❤🔥 2