2016-11-01 6 views
0

Предположим, что мне нужно создать веб-службу. Чтобы это было просто, предположим, что я использую LAMP (Linux-Apache-MySQL-PHP).Проектирование услуги по шкале. Количество необходимых серверов

Я знаю, что буду обслуживать ровно N запросов пользователей в секунду. Запросы в основном просты: CRUD операции с базой данных, без загрузки файлов или сложных вычислений.

Предположим, что каждый запрос выполняет M мс и принимает K Мб памяти на моем сервере, имея G Gb ОЗУ.

Сколько таких серверов мне нужно? Это всего лишь N * K/G?

Разумное значение для M равно 200ms. Какова разумная стоимость для K?

Нужно ли нам учитывать мощность процессора в этом вопросе?

Какие-либо дополнительные соображения?

ответ

1

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

Это потому, что никакое обслуживание не будет демонстрировать этот тип постоянного поведения, как вы описали (вину, если на непредсказуемый периферийный ввод/вывод, вывоз мусора, внешние факторы, вводимый пользователь, и т.д.)

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

Как только вы достигнете своего пика, он расскажет вам, сколько запросов в секунду вы можете обрабатывать на пике.

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

После получения номера для одного сервера, вы можете начать изменять двумя способами:

  1. тест с различными конфигурациями оборудования (добавить больше оперативной памяти, если вы память связаны, добавьте лучший процессор если вы связаны с процессором и т. д.)

  2. тест с несколькими серверами; начать добавление серверов и посмотреть, как ваша служба масштабируется по горизонтали

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

Получите ваши номера, настройте свой дизайн. Полоскание. Повторение.

Нет альтернативы, магия формулы.

+0

Обратное приближение конверта - это именно то, чего я хотел достичь :) Я понимаю, что никогда не увижу ничего, как «ровно N запросов пользователей в секунду». Я просто хотел найти основные переменные и их приблизительные значения. – user1256821

+0

@ user1256821 затем подключите любое разумное значение для K и используйте некоторые базовые значения для других вещей. Apache довольно ужасен с точки зрения управления памятью - по моему опыту он может потреблять до 30-50 МБ за запрос. Скажите 40 МБ. С 4 ГБ доступной оперативной памяти вы сможете обрабатывать около 100 одновременных запросов. При задержке 200 мс, которые дают вам около 500 запросов в секунду, образуют один сервер. Это то, что ты искал? –

+0

Да, и я хотел проверить, был ли я на правильном пути. Спасибо. – user1256821