Обычно веб-проекты начинаются с малого, все находится на одном сервере. Но если сайт станет популярным, одного сервера будет недостаточно.
Итак, поскольку у меня нет опыта в этом, я хотел бы получить представление о:
1. какая нагрузка означает, что мне нужно переместить мою базу данных MySQL на отдельный сервер и как измерить эту нагрузку?
2. Какая нагрузка означает, что мне нужно добавить еще один веб-сервер и как ее измерить?
3. Сколько примерно пользователей может обслуживать один сервер?
Я говорю о простом приложении PHP на сервере LAMP, например:
* Процессор: Athlon 3800+
* Детали процессора: 2 x 2,0 ГГц
* RAM: 1 ГБ RAM
* Жесткие диски: 2 x 160 ГБ (программное обеспечение RAID 1)
все зависит ... от размера вашего набора данных, схемы использования.
измерить опыт конечного пользователя. установить приемлемое время загрузки страницы, тестировать каждые 5-10 минут, построить графики. все зависит от того, что может терпеть ваш бизнес, а когда это становится неприемлемым.
Включите slow_query в mysql, возможно, вы не хотите, чтобы в день было более 5-10 запросов, которые занимают более 10 секунд. Или, может быть, у вас есть ночные репортажи, и вы можете их терпеть?
возможно, вы хотите создать некоторую статистику - например, с помощью Мунин с использованием процессора, iostats, загрузкой системы, сетевым трафиком, количеством процессов http, количеством потоков mysql, временем генерации страницы и посмотрите, как это изменится в течение дня / недели. вы можете точно определить время пиковой нагрузки и увидеть, как, например, добавление дополнительной памяти / настройка mysql изменяет время загрузки вашей страницы.
в вашем случае средняя загрузка> 2 или 3 означает, что система перегружена [но это очень обсуждается]
смотрю Вот для некоторых советов.
Еще одна вещь, на которую следует обратить внимание помимо нагрузки, - это ваша потребность в 100% время безотказной работы. Если вам нужно, чтобы ваш сайт оставался работающим во время перезагрузки сервера, вам понадобится избыточность / кластеризация.
Наши веб-серверы работают как виртуальные машины, поэтому мы используем только два (около 200 сайтов) для резервирования и можем увеличить "ресурсы сервера" при необходимости справиться с нагрузкой без необходимости вводить третий веб-сервер (до определенного момента).
Если вам нужно увеличить производительность, проще всего отделить MySQL на отдельную коробку. Однако это также означает, что ваши сайты упадут вдвое больше (т.е. они будут отключены, когда один из серверов будет перезагружен / откажет)
Пора начинать планирование большего количества серверов и масштабируемой архитектуры - это когда вы садитесь и составляете свои спецификации (вы хотите иметь базу кода с модульной функциональностью, чтобы было легко разбирать вещи, но, по крайней мере, иметь "веб-фронт" -end »и« back-end базы данных »- это некоторый уровень модульности).
Если у вас есть это на месте и вы работаете на одном сервере (база данных и интерфейс), вы можете отслеживать, сколько времени занимают различные операции и нагрузка на машину. Как только нагрузка начинает увеличиваться до «количества процессоров», вы определенно входите в «мы должны разделить это». Если вы сохранили исторические данные, вы можете экстраполировать, как все будет выглядеть в будущем, и принять решение о добавлении дополнительной емкости за один раз, при этом емкость будет примерно такой, какой она нужна.
На Unix-машине "средняя загрузка" - это (приблизительно) средняя длина очереди выполнения (то есть процессов, которые готовы к запуску, но ожидают определенного временного интервала; обычно НЕ масштабируется количеством процессоров, физически находящихся в коробка). Если оно постоянно превышает количество имеющихся у вас процессоров, это, по крайней мере, один из индикаторов того, что блок перегружен. Это не единственная мера, но в качестве точного руководства, это не так уж плохо, и система рассчитывает ее за вас.
Вы выполняете обновление, когда в планировании мощностей указывается, что у вас примерно в 3 раза больше времени на подготовку нового сервера до того, как закончится текущая инфраструктура.
Вы также должны взглянуть на mod_proxy и mod_disk_cache, чтобы учесть их при планировании. Размещенный на отдельном разделе с приложением, отправляющим правильные заголовки (Cache-Control и т. Д.), Это очень хороший и простой способ улучшить производительность ваших приложений на apache, потому что любая кешированная (и кэшируемая) страница может обслуживаться как если бы она была статической.
Не пытайтесь использовать mod_mem_cache, потому что он имеет худшую производительность по причинам совместного использования кеша.
Это снизило нагрузку на систему массового хостинга, которую я использую, примерно на 20-30%. Просто будьте осторожны с параметрами mod_disk_cache, потому что они могут значительно увеличить ваши iostats, если они установлены неправильно.