Полгода назад я тут запостил свой голосовой чат errorparty. Получил 2 плюса и комментарий «вот срань то». Рассказываю, что было дальше
В марте я писал, как впилил Яндекс Музыку в свой войс для геймеров и не мог остановиться. Пикабу оценил сдержанно: два плюса, шесть комментов, первый из которых — «Вот срань то». Справедливо, чё.
Останавливаться я всё равно не стал. Прошло полгода, и рассказать есть о чём — в основном о том, как я ломал прод.
Как я удалил 791 живой канал
Начну с лучшего. Писал скрипт чистки осиротевших голосовых каналов — ну, знаете, удалили группу, а каналы висят. Скрипт проверял, существует ли родительская группа, и если нет — сносил.
Проблема в том, что в базе включён Row Level Security, и скрипт ходил под пользователем приложения. Для него чужие группы просто не существуют. То есть на вопрос «а есть ли родитель?» база честно отвечала «не-а» практически про всё.
Семьсот девяносто один канал. Живых. С историей переписки.
Спасли ночные бэкапы, которые я завёл когда-то из паранойи и ни разу не проверял. Восстановил почти всё, потерял часть сообщений за несколько часов. Теперь любой массовый скрипт по таблицам групп читает данные в обход RLS, отдельным подключением, и я это правило выучил кровью.
Как я положил сайт оптимизацией
Решил ускорить загрузку и красиво порезал сборку фронтенда на чанки: отдельно UI, отдельно библиотека для голоса, отдельно сеть. Локально летает. Выкатил.
Белый экран. В консоли — Cannot read 'memo' of undefined. React разъехался по чанкам и стал грузиться в неправильном порядке.
Отдельно обидно, что мой смоук-тест это не поймал: он дёргал сайт по HTTP, получал 200 и радостно рапортовал, что всё хорошо. Страница отдавалась прекрасно. Просто она была пустая.
Как я полгода искал тормоза не там
Прилетал алерт: девяносто девятый перцентиль ответа API — три секунды. Я был уверен, что виноват Redis, и долго его крутил. Оказалось, у драйвера базы в пуле стояло максимум пять соединений, и запросы просто стояли в очереди за коннектом. Поднял до пятнадцати — самая тяжёлая ручка ускорилась с 0.93 до 0.22 секунды. Одна цифра в конфиге.
Мораль, которую я теперь повторяю как молитву: не гадай, профилируй.
Что при этом успело появиться для людей
Музыка, ради которой был прошлый пост, теперь сама приглушается, когда кто-то заговорил, и возвращается обратно. Мелочь, а пользуюсь каждый день.
Дальше по мелочам, которые накопились:
Больше не надо сидеть в пустом канале. Ставишь порог — скажем, три человека — и идёшь по делам. Соберутся, придёт одно уведомление. А если в канале сейчас тихо, платформа покажет, во сколько эта компания обычно созванивается: почти у каждой группы обнаружился свой вечерний час пик.
Steam подтянулся глубже: видно, кто из стимовских друзей уже в канале, а после матчей в Доте и КС прилетает разбор игры. Появился поиск пати внутри игровых групп — жмёшь кнопку, тебя сводят с людьми и кидают в свободный канал.
Когда шаришь экран, уведомления автоматически затыкаются, чтобы личка не уехала зрителям. Выдернул наушники — сам выбираешь, замолчать или переехать на колонки, а не как Windows решит.
Десктопный клиент дорос до 2.3.17: своя рамка окна, глобальная рация — зажал клавишу и говоришь, не сворачивая игру.
Ещё завёл второй сервер в другом дата-центре, с репликацией базы и автоматическим переключением, потому что однажды хостер увёл машину на профилактику, а я узнал об этом от пользователей.
Зачем я это пишу
Не за плюсами, с ними тут у меня и так понятно. Скорее потому, что за полгода проект из «пилю на коленке» превратился в штуку, которую я чиню по утрам до работы, и мне это до сих пор нравится больше, чем то, за что мне платят.
Работает по-прежнему без VPN, серверы в РФ, заходить можно прямо из браузера/ Половина того, что выше, приехала из баг-репортов, которые пишут прямо из приложения. Так что если зайдёте и найдёте, что я опять сломал, — пишите, я починю ^-^.









