2014-09-13 3 views
3

Мой основной вопрос: как начать создание веб-приложения, которое может быстро расти?Как масштабировать веб-приложение

Немного фона: Клиент меня просит предложение для веб-приложения. Я не могу вдаваться в подробности, но это электронная коммерция и многопользовательская поддержка. Поэтому он хочет потратить немного денег и ожидает, что сайт станет неограниченным.

Я планирую построить его с Zend Framework 2 и MySql. Моя проблема в том, что у меня нет опыта работы с крупномасштабными веб-приложениями. Я читаю везде: нет проблем, просто начните проект, и если он вырастет до большого, тогда вы сможете отреагировать на него и добавить кеширование, кластеризацию и т. Д.

Но это действительно так, или мне нужно добавить некоторые механизмы масштабируемости из начало? Например, облачные серверы (Amazon EC2) имеют другой подход к файловой системе. Можно ли позже переключиться? Или как насчет балансировки нагрузки? У меня проблемы с сеансовой обработкой или нет? А как насчет MySql? Или лучше начать прямо с подхода NoSql?

Так что мой текущий план:

  • Шаг 1: Создайте веб-приложение, как правило, с ZF2 и MySql.
  • Шаг 2: Добавить кеширование как memcache и код операции
  • Шаг 3: кластер MySql или NoSql или балансировка нагрузки или облачный сервер?

UPDATE:

Хорошо, я знаю, что мой вопрос немного слишком широк. Поэтому я пытаюсь отследить его до нескольких конкретных вопросов:

  • Лучше начать с сервера облаков?
  • Может ли облачный сервер неограниченно расти?
+1

когда клиент ожидает, что сайт, чтобы расти, чтобы стать следующей Facebook - вы должны реалистично масштабы спроса и соответствующим образом планировать. – 2014-09-13 03:08:06

ответ

2

Масштабирование - это сложный вопрос, и разные проекты имеют разные потребности. Недавно я прочитал хорошую книгу о масштабировании приложений PHP. Может быть, это может помочь вам: https://leanpub.com/scalingphp

Некоторые советы из книги

  • балансировки нагрузки для входящих запросов
  • 1 мастер-сервер Mysql для записи и х MySQL подчиненных серверов для чтения (если хозяин идет вниз мазь сервер может быть повышен
  • Используйте хранения сессии, я думаю, книга рекомендуется Reddis (не уверен, что это несколько недель назад)
  • Run Nginx вместо Apache

И на личной ноте:

  • Это может быть, о вкусе, но я бы рекомендовал Laravel как PHP Framework, это легче, чем ZF и (опять же вкус ..) более элегантно.

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

Должен ли я относиться к масштабированию с самого начала или легко добавить эти технологии, такие как балансировка нагрузки и хранение сеансов позже?

Что я узнал из книги, так это то, что в их случае (Twitpic) масштабирование началось после того, как проект стал большим и испытал много времени простоя. По-моему, хорошо подумать о том, какие шаги масштабирования вы хотите предпринять. Выделенный (My) SQL-сервер или балансировщик нагрузки можно масштабировать, когда ваш проект требует масштабирования. Но когда вы планируете использовать службу хранения сеансов, я бы рекомендовал начать использовать ее с самого начала, поэтому вам не нужно переписывать код в настоящий момент, когда требуется масштабирование. Также некоторые службы хранения сеансов хранят как можно больше информации в ОЗУ, что снижает время выполнения.

Также, когда вы настраиваете сервер, я бы сказал, начинать с Nginx, он использует меньше ресурсов, чем Apache.

+0

так почему бы не рассказать мне некоторые вещи, которые вы узнали из книги? – bitWorking

+0

за эту информацию, но это еще не ответил на мой основной вопрос. Должен ли я относиться к масштабированию с самого начала или легко ли добавить эти технологии, такие как балансировка нагрузки и хранение сеансов позже? О структуре: для моего последнего проекта я сравнивал почти все фреймворки PHP. ZF2 в моих глазах имеет лучшие качества кода и образцы дизайна, и это было действительно радостью для программы. И это не так медленно, как все думают .. – bitWorking

+3

Статические классы и синглэты более элегантны? wow ... (Я согласен на более легкие и яркие на «привет мире» приложения, но элегантность? не через миллион лет: D) – Sam

2

Ваш план:

Step 1: Build the web application normally with ZF2 and MySql. 
Step 2: Add caching like memcache and opcode 
Step 3: MySql cluster or NoSql or load balancing or cloud server?? 

Вот мое предложение:

Step 1: Build the web app on CodeIgniter with MySQL (lighter, and faster than ZF2 with MySQL) 
Step 2: Do memchace, opcode and don't forget phpfpm 
Step 3: Use Amazon EC2 and use their Load Balancing features to load balance between servers. 
+0

спасибо, но мой вопрос был не о том, какую структуру использовать. Я хочу знать, нужно ли мне добавлять некоторые механизмы масштабирования с самого начала или легко ли переключиться на облачный сервер позже? – bitWorking

Смежные вопросы