Вопрос, VPS с каким количеством vCPU арендовать для сайта, не такой простой. С одной стороны интуитивно понятно, что два ядра лучше чем одно: ведь на сайт одновременно может зайти два человека, и хорошо, если никому не придется ждать. А если хочется сэкономить?
Один посетитель эквивалентен одному процессу? Скорее всего нет, как минимум есть веб-сервер и сервер базы данных. А запросы к сайту? Ведь загрузка одной страницы обычно требует нескольких десятков HTTP-запросов (стили, скрипты, картинки). А другие процессы, не связанные с вебом? Сколько им нужно процессорного времени?
К счастью, сейчас многие хостеры позволяют легко менять количество vCPU на тарифе. Не нужно делать сложные расчеты, можно просто попробовать разные конфигурации, и оценить эффект.
Первый пример: VPS с небольшим сайтом, два ядра. Можно ли перейти на одно ядро и сэкономить?
Попробуем оценить с помощью программы для нагрузочного тестирования siege.
Итак, пятьдесят пользователей делают по десять запросов. Вот результат для двух ядер:
root@server:~# siege -bv -c50 -r10 _https://example.com/ ** SIEGE 3.0.8 ** Preparing 50 concurrent users for battle. The server is now under siege... HTTP/1.1 200 0.99 secs: 10693 bytes ==> GET / HTTP/1.1 200 1.04 secs: 10693 bytes ==> GET / HTTP/1.1 200 1.09 secs: 10693 bytes ==> GET / ... Transactions: 500 hits Availability: 100.00 % Elapsed time: 47.24 secs Data transferred: 5.10 MB Response time: 4.64 secs Transaction rate: 10.58 trans/sec Throughput: 0.11 MB/sec Concurrency: 49.16 Successful transactions: 500 Failed transactions: 0 Longest transaction: 7.68 Shortest transaction: 0.99
Насколько медленнее будут отдаваться страницы, если одно ядро убрать? Проверяем:
Transactions: 500 hits Availability: 100.00 % Elapsed time: 93.72 secs Data transferred: 5.10 MB Response time: 9.18 secs Transaction rate: 5.34 trans/sec Throughput: 0.05 MB/sec Concurrency: 48.98 Successful transactions: 500 Failed transactions: 0 Longest transaction: 15.69 Shortest transaction: 1.92
Среднее время генерации страницы увеличилось в два раза. Но 9 секунд - это очень много. Посмотрим сценарий, когда десять пользователей делает по десять запросов:
Transactions: 100 hits Availability: 100.00 % Elapsed time: 17.88 secs Data transferred: 1.02 MB Response time: 1.19 secs Transaction rate: 5.59 trans/sec Throughput: 0.06 MB/sec Concurrency: 6.68 Successful transactions: 100 Failed transactions: 0 Longest transaction: 1.65 Shortest transaction: 0.17
Страница отдается за 1 секунду - это может быть приемлемо.
А вот график загрузки процессора во время тестов:
То есть понятно, что для одного ядра параметры теста -c50 -r10 уже близки к пределу по CPU. Но гораздо раньше упираемся во время генерации страницы. Дальше решаем, какой нам нужен резерв, и сколько готовы за это платить. В случае тестируемого сайта (некоммерческого, с маленькой посещаемостью) можно обойтись одним ядром.
Другой пример: довольно ресурсоемкий сайт на сервере с двумя ядрами, что будет, если сделать четыре?
Посмотрим отчеты Page Speed в Google Analytics.
По сайту в общем выигрыш в Server response time неочевиден (4 vCPU - две последние точки графика, до этого было 2 ядра). И вклад в Page load незаметен.
А если посмотреть популярную тяжелую страницу отдельно?
К сожалению, мало данных. Но если посмотреть отчеты по нескольким таким страницам, то явного прироста производительности за счет добавления ядер не заметно.
Вывод: наряду с частотой процессора, количество ядер - важный параметр, особенно при наплыве посетителей. Для генерации тяжелых страниц выигрыш может быть незаметным. В любом случае, с количеством ядер стоит поэкспериментировать, тем более, что существуют провайдеры с посуточной оплатой, а изменение тарифа сейчас делается несколькими кликами в биллинге.
Комментарии
Ну, так-то всё зависит от нагрузки на оборудование, какое железо там стоит, какой веб сервер, какое ПО стоит, есть ли какая-то защита. Очень много факторов ...
Отправить комментарий