Я новичок в области масштабируемости веб-сайта. Можете ли вы предложить мне некоторые способы сделать сайт масштабируемым для большого числа пользователей?
Если вы ожидаете, что ваш сайт будет масштабироваться за пределы возможностей одного сервера, вам нужно будет тщательно спланировать его. Создайте так, чтобы было возможно: –
Помимо этого, все, что вы можете сделать, это стресс-тест вашего сайта, выяснить, где узкие места и попробовать и спроектировать их.
удачи
Посмотрите эту беседу Расмус Лердорф (создатель PHP)
Специально и выше.
Возможно, вы захотите посмотреть этот ресурс – highscalability.com .
Многие люди упоминали инструменты для выявления узких мест, и это, конечно, необходимо. Вы не можете потратить время, ускоряя что-то, не зная, где это медленно. Но другое, что вам нужно знать, – это то, где ваша целевая масштабируемость. Является ли соотношение цены и качества потратить пару месяцев на то, чтобы ваш сайт масштабировался до того же количества пользователей, что и Twitter, если он будет использоваться тремя людьми в HR? У вас есть известная скорость транзакций или латентность ответа или количество пользователей в соответствии с требованиями продукта? Если это так, укажите эти цифры в своей стратегии оптимизации. Если нет, найдите их перед тем, как преследовать крышу производительности над отверстием.
Очень похоже: как PHP работает правильно?
Масштабируемость – это не маленький предмет и, конечно, более существенный материал, который может быть обоснованно рассмотрен в одном вопросе.
Например, с некоторыми видами приложений объединения (в SQL) не масштабируются, что приводит к разным стратегиям кэширования и очертания.
Beanstalk – еще один инструмент масштабируемости и производительности на высокопроизводительных PHP-сайтах. Как и memcache (разного рода).
Самой большой проблемой для масштабируемости обычно являются общие ресурсы, такие как СУБД. Проблема возникает из-за того, что СУБД обычно не имеют возможности ослабить гарантии последовательности.
Если вы хотите увеличить масштабируемость, когда используете что-то вроде MySQL, вам нужно изменить дизайн схемы, чтобы уменьшить согласованность.
Например, вы можете разделить схему своей базы данных, чтобы иметь стандартизованную модель данных для записи, и реплицированную часть, обработанную только для чтения, для 90% операций чтения. Данные только для чтения могут распространяться на несколько серверов.
Другим способом увеличения масштабируемости базы данных является разделение данных, например, разделение данных в базе данных для каждого отдела и объединение их либо в ORM, либо в СУБД.
В порядке важности:
Если вы запустите PHP, используйте кеш-код операции, например APC . (Это достаточно важно, чтобы быть встроенным в следующее поколение PHP.)
Используйте YSlow или Google Page Speed для выявления узких мест. (Это покажет структурные проблемы с вашим сайтом, которые влияют как на производительность клиента, так и на сервер).
Убедитесь, что ваш веб-сервер отправляет правильный заголовок Expires для статического содержимого (изображения, Javascript, CSS), чтобы браузер мог его кешировать должным образом. (YSlow предупредит вас об этом тоже.)
Используйте ускоритель HTTP, такой как Varnish . (На этом снимке сказано все – и у них уже есть HTTP-ускоритель.)
Разработайте свой сайт с использованием твердых методов ООП. Вам нужно, чтобы ваш сайт был модульным, поскольку не все узкие места производительности очевидны с самого начала. Будьте готовы реорганизовать части вашего сайта по мере увеличения трафика. Первое предложение, которое я написал, поможет вам сделать это более легко и безопасно. Кроме того, используйте разработку, основанную на тестах. Поскольку рефакторинг означает новые введенные ошибки, а хороший TDD хорош в том, чтобы ловить их, прежде чем они вступят в производство.
Отделите максимально возможный код на стороне клиента от кода на стороне сервера, поскольку они, вероятно, будут обслуживаться с разных серверов, если ваш трафик сайта оправдывает это.
Читайте статьи (читайте, например, советы YSlow).
GL
В дополнение к другим предложениям, обратите внимание на разделение ваших сайтов на уровни, как в многоуровневой архитектуре . Если все сделано правильно, вы можете использовать один сервер на один уровень.