Проект с высокой посещаемостью — архитектура. Фреймворк или самопис?

Здравствуйте.

Никак не могу определиться, на чем писать крупный проект.

Проект из себя представляет нечто вроде социальной сети.
Реализовываться будет на php, mysql
Основные нагрузки будут на базу в момент общения пользователей.
Все примерно как вконтакте, друзья и собственно переписка, и личные сообщения.

Я начал писать свой mvc фреймворк, получилось что-то похожее на kohana-yii.
В нем мне предельно все ясно, я продумал, что маршрутизация будет храниться в мэмкэше, некоторые постоянные данные также для максимальной производительности.

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

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

Подходит ли YII для такого проекта?
Какие узкие места в нем которые будут сказываться на производительности?
Есть ли какая то альтернатива?

Большое количество чатов для общения между пользователями - где хранить данные, в mysql или...?
Выдержит ли mysql?
Подходит ли для этого php?
  • Вопрос задан
  • 6853 просмотра
Решения вопроса 2
SamDark
@SamDark
Yii2 core team
Yii подходит для такого проекта.

Как уже было отмечено, если выводить по 100 записей на страницу и для каждой по 10—20 связанных записей, будет кушать память. Ну и ещё момент, не стоит увлекаться event-ами и сильно слоить view через renderPartial.

Чат между пользователями можно реализовать поверх XMPP. Нагрузку такое решение держит отменно.

MySQL может, при грамотной настройке, выдержать очень много. У нас, например, есть в проекте боевом JOIN по таблице с 200 млн. записей. Нормально бегает.

PHP вполне себе справится.
Ответ написан
fornit1917
@fornit1917
Если все в базу упирается, то все равно какой фреймворк. Yii весьма хорош по производительности. Единственный его минус в этом плане, который я заметил - высокое потребление памяти и долгое время работы, если вы выбираете из БД много-много записей и маппите их в ActiveRecord. Легко лечится заменой AR на DAO в узких местах.
Можете попробовать Yii2, он еще шустрее и удобней (и вышеозвученная проблема с AR и большими выборками там решается еще проще - в AR добавили метод выборки asArray, а так же пакетные выборки)

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

Самый простой способ - master/slave репликация, но она не всегда профит по производительности приносит. Есть более сложные варианты, гуглите по слову шардинг.

А вообще если у вас будет realtime-чаты, то в любом случае на php это не стоит делать. Для этого лучше взять что-нибудь более пригодное для comet-серверов: nodejs, erlang, python+tornado/twisted. Хотя сейчас на слуху асинхронный сервер PHP - ReactPHP, но я лично его не пробовал и не знаю, хорош ли он в бою.

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


MySQL при грамотной настройке может многое. Для начала он вам точно должен подойти.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 6
keltanas
@keltanas
Software Developer
Может, перед тем, как писать "хайлоад", подумаете, как решать проблемы целостности и согласованности данных. И как будете обрабатывать конкуретные запросы, чтобы они не мешали друг другу? Здесь yii-шная адстракция над БД не поможет. Придется их костыли своими котылями подпирать и все равно ждать, когда все развалится. Как и в случае большинства всяких универсальных ORM и AR.
Вопрос хранения и обработки данных здесь первостепенный. А дальше хоть гавнопростыней пейджконтроллеры лепите, разница только в стоимости дальнейшей поддержки.
Вопрос выбора фреймворка к хайлоаду никак не относится.
Ответ написан
Комментировать
golotyuk
@golotyuk
Выбор фреймворка важен, но определяющими характеристиками будет выбор архитектуры и стратегии роста.

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

Советую почитать об архитектуре систем с большой нагрузкой.
Ответ написан
Преждевременная оптимизация - одна из ошибок программиста.

Вы сначала сделайте проект ))) У нас тоже клиент был, мы подумали за него над нагрузкой при проектировании, а он выдал 5 человек в день и сдулся...
Ответ написан
developerYii
@developerYii
bash/php/python/ruby/js/css/yaml+++
не рекомендовал бы frame для крупного проекта. вопрос производительности возникнет - ковырятся придется долго. а так сами сможете сделать все под свои нужды чтобы быстро и гибко, потому что сами писали - проверено неоднократно!
Ответ написан
@verysimplenick
marrk2 прав,это правда не преждевременная оптимизация, а стремление программиста к идеально-гибкой архитектуре, легко масштабируемой и пр., все это мало того что преждевременно, так еще и мешает реально кодить, сделайте прототип yii2, а чат с оглядкой на xmpp(чтобы легко внедрить можно было при росте нагрузки), это даст хороший зазор по гибкости архитектуры и приемлемо по времени будет.
Ответ написан
AlexPTS
@AlexPTS
Full stack веб разработчик
После 2 лет работы на Yii все же съехали с него. Взяв с собой симфони компоненты и написав view и controller части самостоятельно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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