Разработка социальной сети
Социальная сеть — одна из технически сложных веб-платформ: граф связей между пользователями, realtime-уведомления и чат, алгоритмическая лента, масштабируемое хранение медиа, модерация контента. Разработка «ВКонтакте с нуля» — нереалистичная задача, но нишевые социальные сети (сеть для определённой профессии, хобби, сообщества) — вполне выполнимый проект.
Граф социальных связей
Два типа связей:
- Симметричные (дружба): User A дружит с User B → оба видят посты друг друга
- Асимметричные (подписка): User A подписан на User B → A видит посты B, не наоборот
Хранение графа связей в реляционной БД:
CREATE TABLE follows (
follower_id BIGINT REFERENCES users(id),
following_id BIGINT REFERENCES users(id),
created_at TIMESTAMP,
PRIMARY KEY (follower_id, following_id)
);
CREATE INDEX ON follows (following_id); -- для запроса «кто подписан на X»
При большом количестве пользователей (>10М) граф лучше хранить в специализированных Graph DB (Neo4j, Amazon Neptune) или Redis с SSCAN.
Лента публикаций
Fan-out on write (push model): при публикации поста — записываем в ленту каждого подписчика. Чтение ленты — очень быстрое (pre-computed). Минус: если у пользователя 1 млн подписчиков — нужно 1 млн записей.
Fan-out on read (pull model): лента вычисляется при чтении из постов всех, на кого подписан. Медленнее при чтении, проще запись.
Гибридный (Facebook/Instagram подход): обычные пользователи — fan-out on write. «Celebrity» с миллионами подписчиков — fan-out on read. Порог определяется динамически.
# Redis ZSET для ленты пользователя
ZADD feed:{user_id} {timestamp} {post_id}
ZREVRANGE feed:{user_id} 0 19 -- последние 20 постов
Realtime-уведомления
WebSocket (Socket.io или native WebSocket) для: новое уведомление, новое сообщение в чат, новый комментарий к посту.
Архитектура при горизонтальном масштабировании — Redis Pub/Sub: любой сервер публикует событие в канал, все сервера с WebSocket-соединениями получают и доставляют подписчикам.
Хранение медиа
Фото и видео — в объектном хранилище (S3/Cloudflare R2). Обработка:
- Фото: изменение размера → несколько thumbnail (150, 400, 800px) → WebP конвертация
- Видео: транскодирование через FFmpeg или cloud (Cloudflare Stream, Mux)
Обработка — асинхронная через очередь. Пользователь видит «обрабатывается», после готовности — уведомление.
Алгоритмическая лента
Простой алгоритм ранжирования (не хронологический):
score = likes_count * W1
+ comments_count * W2
+ shares_count * W3
+ recency_decay * W4
+ affinity_score * W5 -- насколько близок автор к пользователю
affinity_score — частота взаимодействий пользователя с автором (лайки, комментарии, просмотры профиля).
Модерация контента
- Хэш-фильтрация: PhotoDNA / PDQ hash для обнаружения известного CSAM и незаконного контента
- ML-модерация: NSFW-детектирование изображений (Google Vision Safe Search API, NudeNet)
- Текстовая модерация: детекция токсичности (Perspective API, OpenAI Moderation API)
- Репорты пользователей → очередь для модераторов → решение (убрать / оставить / предупреждение)
Конфиденциальность
Настройки приватности профиля и постов: публичный, только друзья, только я. GDPR: экспорт данных, удаление аккаунта (soft delete с полным удалением через 30 дней).
Сроки
MVP (профили, подписки, посты с фото, комментарии, лента, базовые уведомления): 4–6 месяцев. Полноценная платформа с видео, чатом, алгоритмической лентой, модерацией, мобильными приложениями: 10–18 месяцев.







