Какие технологии мне следует использовать для создания высокопроизводительных масштабируемых веб-приложений? - PullRequest
0 голосов
/ 04 марта 2012

Немного о моей текущей ситуации:

  • Я достаточно хорошо знаю ООП PHP

  • Iу меня хорошее понимание MySQL, и это моя любимая база данных (в основном потому, что это все, что я знаю)

  • Я хорошо понимаю Symfony2 + Doctrine

  • Мой текущий сайт использует Elastica (PHP-библиотека для Elastic Search) ... хотя я замечаю, что результаты возвращаются довольно медленно по сравнению с поиском в facebook.

  • Я использую jQuery для front-end dev

  • Я хорошо понимаю html / css

  • Я размещаю свой сайт на Amazon EC2

У меня есть несколько конкретных вопросов, на которые я бы хотел ответить

Не стесняйтесь добавлять что-нибудь еще, что, по вашему мнению, могло бы помочь.Моя главная цель - изучить новейшие технологии для создания высокопроизводительных корпоративных приложений.Кроме того, мне любопытно, насколько я могу заметить увеличение производительности, скажем, путем обновления моего Amazon box.Andddd, на вопросы:

  1. Как Facebook возвращает результаты своего поиска так быстро и почти мгновенно при наборе текста?

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

  3. Как обновления статуса Facebook агрегируются и связаны только с друзьями, и / или настройками фида.

  4. MySQL больше не является базой данных по скорости и масштабируемости?

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

  6. Как правило, какой «стек» технологий, включая языки, серверы и базы данных, будет использоваться для создания чего-то вроде Facebook (учтите, у меня нет желания создавать сайт социальной сети)

  7. Сильно ли снижается производительность при использовании фреймворка, такого как symfony2, в отличие от написания индивидуально подобранного решения?(Я знаю, что качество кода, очевидно, имеет значение, но в целом)

Если у вас нет ответа на все эти вопросы, номера три, четыре и пять, вероятно, являются наиболее важными.

Заранее спасибо.Удачного кодирования.

1 Ответ

2 голосов
/ 04 марта 2012

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

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

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

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

Чтобы начать процесс проектирования данных, начните с того, какие данные вам нужны,Затем подумайте о

  1. Глобальная согласованность - все ли пользователи должны видеть единообразное представление данных?Если так, то масштабирование будет очень сложным.(Подумайте о Facebook, GMail и Stackoverflow - в этих случаях вам и мне не нужно видеть мгновенно непротиворечивое представление данных).

  2. Долговечность - приемлемо ли это когда-либопотерять обновления?Если нет, вам нужно будет сохранить все данные (в достаточно разных местах, чтобы не было проблем с аппаратной потерей, помня о том, что вы не готовы терять обновления), прежде чем сообщать вызывающей стороне о том, что запрос выполнен.

  3. Производительность - каковы потребности пользователя в производительности?

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

Нарисуйте схему своего дизайна.Укажите на каждом поле (это будет компьютер, маршрутизатор, экземпляр базы данных, диск, структура данных в памяти и т. Д., Но не таблица или строка базы данных).Спросите: "Сколько из них мы можем иметь, максимум?"Если ответ «1», то ваш дизайн не масштабируется.Если ответ «столько, сколько вы хотите, но их нужно синхронизировать», это будет вашей проблемой масштабирования;взгляните еще раз на пронумерованные точки выше.

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