Распределённое хранилище и gamedev
Помните эпизод из "Силиконовой долине", где Ричард Хендрикс объясняет свой революционный алгоритм сжатия? Как данные разбиваются на кусочки и распределяются по сети, создавая децентрализованное хранилище которое невозможно взломать?
Я смотрел этот момент и думал: "Это же гениально! А что если попробовать сделать что-то подобное?"
От идеи к архитектуре
Решил начать с простого
- Загрузка файлов
- Скачивание файлов
- Безопасное хранение
Но как сделать это по настоящему круто?
Вдохновившись концепцией middle-out compression из сериала, я решил пойти дальше:
Шардирование файлов
Каждый файл разбивается на кусочки, сжимается, шифруется и распределяется по сети. Получается уже не просто хранилище, а распределённая система :)
P2P децентрализация
Ещё фичи из сериала
Помните, как в сериале они использовали телефоны пользователей для создания распределённой сети?
Я попробовал реализовать подобную систему
Каждый пользователь, подключенный к системе, становится P2P-нодой
Сценарий пока такой: (ещё в раздумьях как организовать лучше архитектуру)
- User устанавливает приложение
- Выбирает, сколько места готов предоставить(условно, 10gb)
- Его устройство регистрируется как нода
- Система начинает хранить на его устройстве зашифрованные куски данных
- Взамен user получает больше места для своих данных
Напрашивается вопрос: Чё если нода упала?
Пока я пришёл к нескольким решениям:
Репликация (как в RAID)
Чтобы потерять файл, нужно чтобы одновременно упали все 3 копии каждого из 10 шардов
Автоматическое восстановление
Бэкап на сервере (Как самый крайний случай)
Как удержать пользователей для работы системы?
Чтобы моя сеть заработала нам необходимо иметь много активных пользователей - это нужно, чтобы экономить днюшки на дата центрах.
Единственное, что мне пришло в голову - это Hamster Combat (кликер).
Конечно стоит придумать что-то по лучше но пока это.
Почему это работает?
- User играет в кликер → приложение активно
- Приложение активно → устройство онлайн как нода
- Нода онлайн → сеть работает лучше
Технологии
Хотя у меня нет революционного алгоритма сжатия Ричарда Хендрикса, я использую Zstandard - один из лучших современных алгоритмов:
Результаты:
- Текстовые файлы: сжаты до 80%
- Изображения: до 20-30%
- Видео: до 10-15%
(Как будет больше свободного времени, начну писать свой алгоритм сжатия, можно сказать - мечта :) )
JWT и шифрование
Админка которая дышит
Добавил WebSocket для максимального Real-time
Сейчас показывает
- Количество активных нод
- Общее пространство
- Скорость загрузок/скачиваний
- Активность и клики
- Нагрузка на систему
- География пользователей
Какие планы?
Не скажу что прям стартап планирую открывать, но реализовать идею полностью было бы круто. Не слышал, что подобное где-то есть, может плохо гуглил или слишком рискованно для бизнеса. Уже готов сервер и мобильное приложение, код не покажу пока, стыдно будет)
Вдруг кто-нибудь богатый и солидный заинтересуется и даст денег на проект, а я уже весь код слил)
Чувствую, что успех будет зависеть от игры...
Хм... может донаты за GB свободного места? Сделать Clash of Clans или типо того? Надо будет подумать хорошенько)
Если будут идеи пишите)
P.S. В отличие от Pier Piper, у меня нет Эрлиха, который бы всё испортил)
Технологический стек
Backend
- Spring boot
- PostgreSQL
- MinIO
- Zstandard
- JWT, BCrypt, AES, SHA, CORS
- Docker
- Gradle
- Git
Frontend
- Flutter/Dart