- BrainTools - https://www.braintools.ru -
Итак, продолжу рассказ о том, как в один прекрасный день, оказавшись на задворках блокировок мессенджеров, я решил создать свой собственный. Изначально проект задумывался как простое средство коммуникации с родными и партнерами по бизнесу. Но вот во что это вылилось спустя всего 4 месяца… Ранее писал о том как всё это начиналось [тут] [1] и [тут] [2]
Аудитория и первые стресс-тесты
На текущий момент у мессенджера уже появилась своя постоянная аудитория, причем многие из этих людей мне совершенно незнакомы! Регистрации идут каждый день, что дает отличный фидбэк, но вместе с тем устраивает настоящий стресс-тест для систем.
Большое внимание [3] пришлось уделить группам. Изначально они были задуманы максимально примитивно, но с ростом числа пользователей и пониманием их потребностей [4] фокус сместился на серьезную доработку групповых чатов:
Система модерации: реализовано полноценное управление пользователями.
«Режим канала»: возможность моментально превратить группу в канал, где публикации делает только автор, а оформление меняется на формат «ленты».
GitHub
-небольшую краткую readme-инструкцию пользования и некоторые файлы опубликовал на github [5]
Борьба за мегабайты: спасаем память [6] смартфона
Так как в Fury упор сделан на локальное хранение данных (сервер держит передаваемые файлы минимальное время, чтобы экономить ресурсы), вся история и файлы из групп ожидаемо хранятся на телефонах пользователей.
Никогда бы не подумал, что если найдутся 2–3 человека, любящих пофлудить, покидать видосики и картинки, то объем данных в чате за 1–2 недели может легко превысить гигабайт! Для меня это стало личной болью [7]: я видел, как безбожно расходуется место, а приложение начало весить более 2 Гб.
Что было сделано:
Сначала я внедрил функционал «Данные и память», позволяющий увидеть, какой именно чат и сколько файлов хранит. Сразу стало понятно, какие группы активнее всего «украшают нашу цифровую помойку».
Добавил кнопки очистки: сначала «удалить все файлы старше 30 дней», затем «удалить всё», а позже — «старше 7 дней». Но и этого оказалось недостаточно.
Не все пользователи достаточно продвинуты, чтобы заходить в настройки и чистить кэш руками, а контейнер приложения тем временем раздувался бы до бесконечности.


В итоге я разработал систему автоматического удаления старых файлов на базе лимита по размеру. По умолчанию на все публичные группы ставится лимит в 200 МБ (его можно менять или отключать). Теперь телефон рядового обывателя спасен, а я могу спать спокойнее.
API и экстренные оповещения
Сейчас я веду разработку botApi. Не уверен, насколько это нужно пускать в массы, ведь сейчас в мессенджере такое ламповое, человеческое общение без всяких «ИИшниц».
Однако API уже пригодился мне для правильных целей. Я создал каналы экстренного оповещения об угрозах БПЛА и прочих опасностях для нескольких регионов (Краснодарский край, Крым, Ростовская область). Для меня актуально получать эти уведомления оперативно. Сейчас система работает на базе анализа профильных TG-каналов с автоматической пересылкой в соответствующие каналы внутри Fury.
Рекомендации: коммерческий задел
Раздел «Рекомендации» — это потенциально неплохая точка для коммерциализации. Именно отсюда (и пока только отсюда) пользователи могут увидеть список рекомендованных каналов.

Я добавляю туда самое интересное, и пользователи активно посещают эти группы.
Звонки: HD-качество и борьба с потерями
Была проделана огромная работа по отладке кодеков и протоколов передачи: UDP, P2P, коррекция потерь, jitter-буфер с изменяемой скоростью воспроизведения, чтобы оставаться в точке актуальности при плохой связи. Всё разработано с нуля и с любовью.
На текущий момент могу сказать уверенно: в Fury можно болтать часами в HD-качестве, потребляя минимум трафика. Система отлично стабилизирует голос даже в нестабильных сетях.
Кстати основной базовый протокол взаимодействия – это тоже апсолютно разработанное с нуля решение, на уровне стека TCP (Да Да! Никаких WebSocket, HTTPS И прочего ширпотреба!) Только RAW TCP/UDP Только хардкор!!! Проведенный аудит безопасности протокола, с помощью анализа исходников с помощью ИИ порадовал ещё больше. Можно почитать тут -> furymsg.ru/security.html [8]
Многие просят видеосвязь… Но там всё сложнее. Учитывая, что даже голос передать «чисто и красиво» — это целая наука [9], видео выглядит как серьезный вызов и печальный компромисс между качеством и стабильностью. В любом случае, держу это в планах.
Backend: от монолита к микросервисам
Разрабатывая бэкенд, я постоянно совершенствую навыки создания горизонтально масштабируемых систем.
Было: монолитный сервис на Go, база данных MySQL, который отвечал за всё сразу: звонки, файлы, основной канал связи.
Стало: микросервисная архитектура. Есть внутреннее ядро, взаимодействующее с MySQL и Redis, и коннектор основного канала. Система готова к multi-instance запуску на разных серверах.
В планах — внедрить NATS и еще сильнее оптимизировать работу с SQL и локальным кэшем, чтобы система могла принять миллионы пользователей.
Клиент под Windows и магия KMP
Многие просили Desktop-версию, так как одного Android для работы мало. Писать с нуля на .NET C# было бы круто, но поддерживать два разных приложения в одиночку — самоубийство [10]. Протокол и фичи меняются слишком быстро.
Спасением стала Kotlin Multiplatform (KMP) в связке с IntelliJ IDEA. С минимальными доработками удалось практически скопировать (Ctrl+C / Ctrl+V) большую часть кода и дизайна под Windows. Теперь изменения в одной версии легко переносятся в другую. В теории, так же можно сделать версии под Linux и iPhone (про iOS пока не думаю принципиально из-за санкций и личного отношения к платформе).
Итоги и планы
Большое спасибо ребятам, которые подкидывают идеи, находят баги и даже тем, кто флудит мусором в группах — вы лучшие! ;)
После публикации в RuStore взрывного роста пользователей не случилось, зато прекратились крики о том, что «страшно устанавливать левый APK с сайта». Хотя, как по мне, модерация стора не добавляет особой безопасности, хоть они и проверяют каждое мелкое обновление.
Пока я развиваю проект за свой счет — мне это просто интересно. Но я вижу будущее у Fury в плане объединения с серьезными инвесторами или партнерами для продвижения продукта в массы с четким планом развития и монетизации.
Как вам такой формат? Если нужно что-то добавить или акцентировать внимание на технических деталях — пишите!
Бизнес-партнеры и инвесторы приветствуются!
[наши линки]:
Сайт проекта: https://furymsg.ru [11]
ТГ Канал поддержки: https://t.me/furymessenger [12]
RuStore: https://www.rustore.ru/catalog/app/ru.fury.messenger [13]
Автор: REPLAY_5
Источник [14]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/27848
URLs in this post:
[1] [тут]: https://habr.com/ru/articles/979728/
[2] [тут]: https://habr.com/ru/articles/982344/
[3] внимание: http://www.braintools.ru/article/7595
[4] потребностей: http://www.braintools.ru/article/9534
[5] опубликовал на github: https://github.com/REPLAY5/fury-messenger
[6] память: http://www.braintools.ru/article/4140
[7] болью: http://www.braintools.ru/article/9901
[8] furymsg.ru/security.html: https://furymsg.ru/security.html
[9] наука: http://www.braintools.ru/article/7634
[10] самоубийство: http://www.braintools.ru/article/8864
[11] https://furymsg.ru: https://furymsg.ru
[12] https://t.me/furymessenger: https://t.me/furymessenger
[13] https://www.rustore.ru/catalog/app/ru.fury.messenger: https://www.rustore.ru/catalog/app/ru.fury.messenger
[14] Источник: https://habr.com/ru/articles/1015920/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1015920
Нажмите здесь для печати.