- BrainTools - https://www.braintools.ru -

Fury: Как за 4 месяца разработки мессенджера с нуля не сойти с ума

Итак, продолжу рассказ о том, как в один прекрасный день, оказавшись на задворках блокировок мессенджеров, я решил создать свой собственный. Изначально проект задумывался как простое средство коммуникации с родными и партнерами по бизнесу. Но вот во что это вылилось спустя всего 4 месяца… Ранее писал о том как всё это начиналось [тут] [1] и [тут] [2]

Аудитория и первые стресс-тесты

На текущий момент у мессенджера уже появилась своя постоянная аудитория, причем многие из этих людей мне совершенно незнакомы! Регистрации идут каждый день, что дает отличный фидбэк, но вместе с тем устраивает настоящий стресс-тест для систем.

Большое внимание [3] пришлось уделить группам. Изначально они были задуманы максимально примитивно, но с ростом числа пользователей и пониманием их потребностей [4] фокус сместился на серьезную доработку групповых чатов:

  • Система модерации: реализовано полноценное управление пользователями.

  • «Режим канала»: возможность моментально превратить группу в канал, где публикации делает только автор, а оформление меняется на формат «ленты».

GitHub
-небольшую краткую readme-инструкцию пользования и некоторые файлы опубликовал на github [5]

Борьба за мегабайты: спасаем память [6] смартфона

Так как в Fury упор сделан на локальное хранение данных (сервер держит передаваемые файлы минимальное время, чтобы экономить ресурсы), вся история и файлы из групп ожидаемо хранятся на телефонах пользователей.

Никогда бы не подумал, что если найдутся 2–3 человека, любящих пофлудить, покидать видосики и картинки, то объем данных в чате за 1–2 недели может легко превысить гигабайт! Для меня это стало личной болью [7]: я видел, как безбожно расходуется место, а приложение начало весить более 2 Гб.

Что было сделано:

  • Сначала я внедрил функционал «Данные и память», позволяющий увидеть, какой именно чат и сколько файлов хранит. Сразу стало понятно, какие группы активнее всего «украшают нашу цифровую помойку».

  • Добавил кнопки очистки: сначала «удалить все файлы старше 30 дней», затем «удалить всё», а позже — «старше 7 дней». Но и этого оказалось недостаточно.

  • Не все пользователи достаточно продвинуты, чтобы заходить в настройки и чистить кэш руками, а контейнер приложения тем временем раздувался бы до бесконечности.

  • Fury: Как за 4 месяца разработки мессенджера с нуля не сойти с ума - 1
    Fury: Как за 4 месяца разработки мессенджера с нуля не сойти с ума - 2

    В итоге я разработал систему автоматического удаления старых файлов на базе лимита по размеру. По умолчанию на все публичные группы ставится лимит в 200 МБ (его можно менять или отключать). Теперь телефон рядового обывателя спасен, а я могу спать спокойнее.

API и экстренные оповещения

Сейчас я веду разработку botApi. Не уверен, насколько это нужно пускать в массы, ведь сейчас в мессенджере такое ламповое, человеческое общение без всяких «ИИшниц».

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

Рекомендации: коммерческий задел

Раздел «Рекомендации» — это потенциально неплохая точка для коммерциализации. Именно отсюда (и пока только отсюда) пользователи могут увидеть список рекомендованных каналов.

Fury: Как за 4 месяца разработки мессенджера с нуля не сойти с ума - 3

Я добавляю туда самое интересное, и пользователи активно посещают эти группы.

Звонки: 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

www.BrainTools.ru

Rambler's Top100