Стартап за несколько часов
Затупил над распределённой системой хранения данных и решил отвлечься. Пришла забавная мысль найти копью Tiktok в github и погнал искать интересные проекты.
Нашёл только пару простых устаревших демо состоящих только из визуальных частей и захордкоженных данных. Никакого бэкенда.
Зато красивая оболочка, и думаю, надо доделать, может что интересное получится)
gRPC - потому что REST это слишком мейнстрим
Первым делом нужно было решить, как клиент будет общаться с сервером. REST API? Скучно. GraphQL? Слишком модно. WebSocket? Для видео-стриминга — почему бы и нет, но хотелось чего-то более... инженерного.
Почему gRPC?
- Бинарный протокол - быстрее JSON
- Встроенная поддержка стриминга(самое то для реплики tiktok)
- Строгая типизация
- Возможность генерировать код из одного .proto для фронта и бэкенда
Основа файла .proto
Что меня самого удивило, это то что получаешь готовый код для Dart и Java
Backend и снова он
Для такого сервиса лучше было бы выбрать Go, Rust или C++ но в них я совсем не шарю и если вайбкодить то точно не разберусь в нейросетевых художествах, поэтому Spring boot + быстрота поднятия сервера)
Docker Compose - потому что "у меня работает" больше не оправдание
Локальная разработка без Docker в 2025 году — это как программирование на Notepad. Технически возможно, но зачем?
Как и с распределённым хранилищем поднял две базы
PostgreSQL(Метаданные) и MinIO(Видео)
Помню, как учили поднимать базу... без Docker кошмар...
50 раз переустановишь, пока не запуститься с нужными настройками....
Авторизация и аутентификация
В репозитории приложение было без экрана входа, подумал - не канон. Нельзя просто так взять и сделать социальную сеть без авторизации. Ну, технически можно, но тогда это будет анархия.
Из интересного скажу - интеграция JWT с gRPC. Spring Security по умолчанию работает на HTTP, но gRPC использует HTTP/2 и свои метаданные. Поэтому написал кастомный GrpcAuthenticationInterceptor, который отдаёт токен из metadata и валидирует его.
Что в итоге?
Из демо копии с хардами получилось полноценное приложение. Если оптимизировать виртуальными потоками и добавить ИИ систему рекомендаций можно запускать и рубить бабло на рекламе, загружаться будет быстрее чем у чёрно-оранжевого ютуба. А то видео у них нормально загружаются а шортсы нифига - просто кошмар!