Методы написания масштабируемого сайта - PullRequest
9 голосов
/ 12 июля 2009

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

Ответы [ 10 ]

17 голосов
/ 12 июля 2009
  1. Проверьте ваш сайт под большой нагрузкой.
  2. Отслеживать всю статистику
  3. Найти узкое место
  4. Устранить узкое место
  5. Вернуться к 1

удачи

10 голосов
/ 12 июля 2009

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

  • Сделайте так, чтобы ваша база данных могла находиться на отдельном сервере. Это обычно не слишком сложно.
  • Убедитесь, что весь ваш статический контент может быть перемещен в CDN, так как это обычно снимает большую нагрузку с ваших серверов.
  • Будьте готовы потратить много денег на оборудование. Больше оперативной памяти и более быстрые диски помогают много.
  • Становится намного сложнее, когда вам нужно разделить базу данных или php с одного сервера на несколько серверов, поэтому оптимизируйте все, начиная от кода, схемы базы данных, конфигурации сервера и всего, что вы можете себе представить отложите этот последний шаг как можно дольше.

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

4 голосов
/ 12 июля 2009

Зацените этот доклад от Расмуса Лердорфа (создателя PHP)

Специально Страница 8 и далее.

3 голосов
/ 12 июля 2009

Возможно, вы захотите взглянуть на этот ресурс - highscalability.com .

2 голосов
/ 12 июля 2009

Несколько человек упомянули инструменты для выявления узких мест, и это, конечно, необходимо. Вы не можете тратить продуктивное время на ускорение чего-либо, не зная, где это происходит медленно. Но другая вещь, которую вам нужно знать, это то, где находится ваша целевая масштабируемость. Стоит ли тратить деньги на то, чтобы потратить пару месяцев на то, чтобы ваш сайт масштабировался до того же количества пользователей, что и Твиттер, если его будут использовать три человека в HR? У вас есть известные скорость транзакций, или задержка ответа, или количество пользователей, в требованиях продукта? Если это так, нацельтесь на эти цифры с помощью своей стратегии оптимизации. Если нет, выясните это , прежде чем гоняться за крысой.

1 голос
/ 12 июля 2009

Самой большой проблемой для масштабируемости обычно являются общие ресурсы, такие как СУБД. Проблема возникает потому, что СУБД обычно не имеют возможности ослабить гарантии согласованности.

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

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

Другим способом увеличения масштабируемости базы данных является разделение данных, например, разделите данные в базу данных для каждого отдела и объедините их в ORM или в СУБД.

1 голос
/ 12 июля 2009

В порядке значимости:

  1. Если вы используете PHP, используйте кэш кода операции, например APC . (Это достаточно важно, чтобы быть встроенным в следующее поколение PHP.)

  2. Используйте YSlow или Google Page Speed ​​ для выявления узких мест. (Это выявит структурные проблемы с вашим веб-сайтом, которые влияют на производительность как клиента, так и сервера.)

  3. Убедитесь, что ваш веб-сервер отправляет правильный заголовок Expires для статического содержимого (изображения, Javascript, CSS), чтобы браузер мог правильно его кэшировать. (YSlow также предупредит вас об этом.)

  4. Используйте HTTP-ускоритель, такой как Varnish . ( Эта картинка говорит само за себя - и у них уже был установлен ускоритель HTTP.)

1 голос
/ 12 июля 2009

Очень похоже: Как PHP сделан правильно?

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

Например, в некоторых видах приложений объединения (в SQL) не масштабируются, что вызывает все виды стратегий кэширования и разделения.

Beanstalk - еще один инструмент для масштабирования и повышения производительности на высокопроизводительных сайтах PHP. Как и memcache (другой вид).

0 голосов
/ 08 октября 2010

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

0 голосов
/ 12 июля 2009

Разработайте свой сайт, используя надежные методы ООП. Ваш сайт должен быть модульным, так как не все узкие места производительности очевидны с самого начала. Будьте готовы к рефакторингу частей вашего сайта по мере увеличения трафика. Первое предложение, которое я написал, поможет вам сделать это более легко и безопасно. Кроме того, используйте тестовую разработку, так как рефакторинг означает новые введенные ошибки, а хороший TDD хорош в их обнаружении до того, как они поступят в производство.
Отделите как можно больше кода на стороне клиента от кода на стороне сервера, так как они, скорее всего, будут обслуживаться с разных серверов, если трафик вашего сайта оправдывает это.
Читайте статьи (например, читайте советы YSlow).

GL

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