Когда подходящее время добавить отдельный сервер базы данных, добавить больше веб-серверов?

Обычно веб-проекты начинаются с малого, все на одном сервере. Но если сайт станет популярным, одного сервера будет недостаточно.
Итак, поскольку у меня нет никакого опыта в этом, я хотел бы получить представление о:
1. какой тип нагрузки означает, что мне нужно перенести мою базу данных MySQL на отдельный сервер и как измерить эту нагрузку?
2. какая нагрузка означает, что мне нужно добавить другой веб-сервер и как его измерить?
3. приблизительно, сколько пользователей может обслуживать один сервер?

Я говорю о простом приложении PHP на сервере LAMP, как это:
* Процессор: Athlon 3800+
* Детали процессора: 2 x 2,0 ГГц
* ОЗУ: 1 ГБ ОЗУ
* Жесткие диски: 2 x 160 ГБ (программное обеспечение RAID 1)

5 ответов

Решение

Все зависит... от размера вашего набора данных, модели использования.

измерить опыт конечного пользователя. установить приемлемое время загрузки страницы, проверять это каждые 5-10 минут, строить графики. все зависит от того, что ваш бизнес может терпеть и когда это становится неприемлемым.

включите slow_query в mysql, возможно, вы не хотите, чтобы в день выполнялось более 5-10 запросов, которые занимают более 10 секунд. или, может быть, у вас есть какие-то ночные репортажи и вы можете это терпеть?

вероятно, вы хотите сгенерировать некоторую статистику - например, с помощью munin с использованием процессора, iostats, нагрузкой на систему, сетевым трафиком, количеством http-процессов, количеством потоков mysql, временем генерации страниц и посмотреть, как это меняется в течение дня / недели. вы можете точно определить пиковое время и увидеть, как, например, добавление дополнительной памяти / настройка mysql изменяет время загрузки вашей страницы.

в вашем случае нагрузки системы в среднем> 2 или 3 означает перегружен [но это крайне подлежит обсуждению]

посмотрите здесь для некоторых советов.

Время начинать планирование большего количества серверов и масштабируемой архитектуры - это когда вы садитесь за стол и разрабатываете свои спецификации (вы хотите иметь базу кода с модульной функциональностью, так что все легко разбирать на части, но, по крайней мере, иметь "веб-фронт"-end "и" back-end базы данных "- это некоторый уровень модульности).

После того, как вы это установили и работаете на одном сервере (база данных и интерфейс), вы можете отслеживать, сколько времени занимают различные операции и нагрузка на компьютер. Как только нагрузка начинает нарастать через "количество процессоров", вы определенно попадаете в область "мы должны разделить это". Если вы сохранили исторические данные, вы можете экстраполировать то, как все будет выглядеть в будущем, и принять решение о добавлении большей емкости за раз, когда емкость будет примерно такой, как она требуется.

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

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

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

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

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

Вы также должны взглянуть на mod_proxy и mod_disk_cache, чтобы учесть их при планировании. Помещенный в отдельный раздел с приложением, отправляющим правильные заголовки (Cache-Control и т. Д.), Это очень хороший и простой способ улучшить производительность ваших приложений на apache, потому что любая кэшированная (и кэшируемая) страница может обслуживаться, как если бы она была статической.

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

Это снизило нагрузку примерно на 20-30% в системе массового хостинга, на которой я работаю. Просто будьте осторожны с параметрами mod_disk_cache, потому что они могут значительно увеличить ваши iostats, если установлены неправильно.

Другие вопросы по тегам