Тактика использования PHP на сайтах с высокой нагрузкой - PullRequest
239 голосов
/ 24 августа 2008

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


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

Базы данных

В настоящее время я планирую использовать функции MySQLi в PHP5. Однако как мне настроить базы данных по отношению к пользователям и контенту? Нужно ли мне несколько баз данных? На данный момент все перемешано в одной базе данных - хотя я рассматривал возможность распространения пользовательских данных в одну, фактического контента в другую и, наконец, основного контента сайта (мастеров шаблонов и т. Д.) В другую. Я считаю, что отправка запросов в разные базы данных облегчит их загрузку, поскольку одна база данных = 3 источника загрузки. Также будет ли это эффективно, если они все будут на одном сервере?

Кэширование

У меня есть система шаблонов, которая используется для создания страниц и замены переменных. Основные шаблоны хранятся в базе данных, и каждый раз, когда вызывается шаблон, вызывается его кэшированная копия (HTML-документ). На данный момент у меня есть два типа переменных в этих шаблонах - статическая переменная и динамическая переменная. Статические переменные - это обычно такие вещи, как имена страниц, названия сайтов - вещи, которые не часто меняются; динамические переменные - это то, что меняется при каждой загрузке страницы.

Мой вопрос по этому вопросу:

Скажите, что у меня есть комментарии к различным статьям. Что является лучшим решением: сохраняйте простой шаблон комментариев и визуализируйте комментарии (из вызова БД) при каждой загрузке страницы или сохраняйте кэшированную копию страницы комментариев в виде html-страницы - каждый раз, когда комментарий добавляется / редактируется / удаляется страница перечитана.

Наконец

У кого-нибудь есть какие-либо советы / указатели для запуска сайта с высокой нагрузкой на PHP. Я почти уверен, что это работоспособный язык - Facebook и Yahoo! дать ему большое преимущество - но есть ли какие-то события, которые я должен остерегаться?

Ответы [ 23 ]

1 голос
/ 30 октября 2008

Не могу поверить, что никто не упоминал об этом: модульность и абстракция. Если вы думаете, что ваш сайт должен будет вырасти до большого количества машин, вы должны спроектировать его так, чтобы он мог! Это означает, что такие глупые вещи, как не предполагать, что база данных находится на локальном хосте. Это также означает то, что поначалу будет беспокоить, например, написание уровня абстракции базы данных (например, PDO, но намного легче, потому что он делает только то, что вам нужно).

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

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

1 голос
/ 31 августа 2008

Посмотрите на mod_cache , кэш вывода для веб-сервера Apache, аналогичный кешированию вывода в ASP.NET.

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

1 голос
/ 24 августа 2008

В ближайшее время я не вижу, как я переключаюсь с MySQL, так что, мне кажется, мне не нужны возможности абстракции PDO Спасибо за эти статьи DavidM, они мне очень помогли.

...