У меня есть сервер Linux / Debian с процессором Intel i7 с 4 ядрами и 8 потоками. Когда я запускаю свое тяжелое задание Apache / PHP, оно использует 1 поток, а когда я запускаю параллельные задания Apache / PHP, каждое из них использует свой собственный поток.
Итак, если я хочу быть готовым к высокому трафику, это просто вопрос максимального увеличения количества ядер (путем выбора других процессоров), чтобы иметь возможность обрабатывать больше одновременных заданий, при условии, что у него достаточно памяти и что база данных / файловая система не не создают лишних проблем?
Я пробовал запускать 8 и 10 заданий одновременно, и он использовал все потоки, а загрузка ЦП была в основном 100% (но работала безупречно), поэтому кажется, что теория не полностью ошибочна - но есть ли что-то еще, что могло бы разрушить это линейное мышление?
В качестве альтернативы я мог бы использовать систему с балансировкой нагрузки с несколькими серверами, но мне интересно, как далеко я могу продвинуться с одним сервером.
PS. Apache / PHP использует mod_php с отключенной потоковой безопасностью, поэтому он использует Prefork MPM. Не уверен, что осмелюсь использовать Worker MPM, поскольку я не уверен в безопасности потоков ...
PSS. Кроме того, мне не обязательно нужна лучшая производительность, в основном я просто могу обрабатывать более высокий трафик / большее количество одновременных заданий.
Всегда есть предел масштабируемости, и это может быть любой компонент системы.
Если у вас было хорошее линейное увеличение пропускной способности, а время отклика было не слишком ужасным, процессор в настоящее время не является вашим ограничивающим фактором. Продолжайте тестирование с большим количеством процессоров. Думайте масштабно: вы можете арендовать очень большие виртуальные машины из различных облаков. Вы можете начать видеть эффекты NUMA, когда виртуальная машина больше одного сокета ЦП.
В идеале пропускная способность просто перестает расти, потому что она сталкивается с другим узким местом, но она также может быстро ухудшаться. Единственный способ узнать это - проверить.
Существуют причины, не связанные с масштабируемостью, для использования нескольких серверных ВМ с балансировкой нагрузки, включая высокую доступность.
Судя по тому, что вы описываете (100% загрузка ЦП), ваше приложение кажется ограниченным ЦП. Таким образом, добавление большего количества ядер ЦП или переход на машину с более быстрыми ядрами, вероятно, улучшат вашу производительность.
Многие поставщики облачных услуг взимают с вас всего несколько центов в час за аренду мощных виртуальных машин с большим количеством ядер ЦП и большим объемом оперативной памяти. Просто протестируйте на 16 или 32 ядрах, чтобы узнать, как ваша производительность зависит от количества процессоров / ядер.
И да, я рекомендую сначала увеличить количество ядер в вашей системе, прежде чем вы увеличиваете количество систем.