Что нужно для хорошей соц. сети?

Всем привет. Решил в свободное время (а его у меня много) сделать свою соц. сеть. Хотя бы для обучения, если идея прогорит. И сразу появилось множество вопросов, которые я опишу ниже. Надеюсь на ваши хорошие ответы, а не типа "Зачем тебе соц. сеть" и т.п.

1. Хранилище фото, аудио и видео файлов.
На данный момент у меня есть один сервер, в котором собственно и будет разворачиваться соц. сеть. Мне интересно, как лучше организовать структуру папок и файлов для хранения файлов.
Как я понимаю, кроме всего прочего мне придётся поднимать ещё сервера для хранения файлов, CDN и прочие плюшки. Я правильно понимаю? И сразу ли нужно акцентировать внимания во время разработки сайта на данную проблему, или потом?

2. База данных.
Количество данных, особенно постов и личных сообщений будет очень много. От сюда выходит вопрос - как лучше всё организовать? Репликация или поднятия на эти нужды серверов?

3. Сообщения
Все уже привыкли к тому, что в ВК и подобных соц. сетях личные сообщения приходят и отправляются без перезагрузки страницы. Как это лучше реализовать? Соккеты или просто Ajax'ом?
Была идея работать с соккетами, но что бы сообщения сохранились при отправке - это приходится лезть с запросам к БД, а это уже смахивает на Ajax.

PS: Пожалуйста, не нужно засорять тему сообщениями, что я с такими знаниями ни чего не сделаю...Так вот, надо же когда нибудь учиться)

Заранее спасибо за ответы!
  • Вопрос задан
  • 1119 просмотров
Решения вопроса 3
@Qw234
То есть это учебный проект?

1. Файлы (фото и пр.) хранить на специализированном "облачном хранилище", например, Amazon S3.
2. Репликация не репликация, шардинг не шардинг - зависит от нагрузки. БД делить по смыслу. Например, я бы выделил БД для сообщений, БД для учетки и БД для публикаций. И все эти БД могут быть разного типа.
3. Push-технологию посмотрите, если речь идет о больших нагрузках.
Ответ написан
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
  1. Я в экспериментальных проектах чужие хранилища через API пользую вроде imgur, youtube.
  2. Лучше в ядре кода сразу сконструировать API обращений к DB, что бы потом фактический back легко менять можно было.
  3. Идеально - писать на websocket с откатом на long-polling. Мне для пробных проектов long-polling писать лень, я пишу - "$User обнови браузер"

И, ответ на вопрос - для соц.сети нужна аудитория в первую очередь.
Ответ написан
riky
@riky
Laravel
Новая соц сеть никому не нужна, но для учебных целей, задача вполне интересная.

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

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

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

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

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

особо не рассчитывайте что это дойдет до прода (либо делать чтото попроще где мало сервисов, типа твиттера), здесь главное научится принципам, дальше начнется одна рутина.

ну и отдельное внимание уделить фронтенду, лучше делать сразу так же single page app, на reactjs

Успехов!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Sanes
@Sanes
Любая соц. сеть на 99% зависит от контингента, администрации и маркетинга. Куча примеров, когда на обычном движке форума миллионы посетителей. Вам стоит разбить свою задачу на модули и решать вопросы реализации.
Ответ написан
Комментировать
studenter
@studenter
когда я вырасту я стану програмистым!
для начала надо сделать простую сеть типа форума блога
потом уже думать о хорошей или крутой

БД можно делать на файлах
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы