Давно не писал. Было очень много работы. На очереди статья как мы пережили короновирус и работу на карантине.
Эта статья написана в соавторстве с админом. Надеюсь, кому-то она будет полезна.
Тема сегодняшней статьи – быстродействие сайтов PHP на разных моделях процессоров или как выбрать оптимальный выделенный сервер
Наша задача разместить сайты максимально дешево и с большим количеством ресурсов. Под данных требования идеально подходят выделенные сервера. Отказоустойчивость будем обеспечивать собственными силами.
Есть задача – подобрать выделенный сервер для размещения сайтов с высокой посещаемостью. Часть сайтов написана на WordPress и Joomla, часть собственной разработки.
Использование shared хостинга и VPS по ряду причин нам не подходит.
При этом важно обеспечить отказоустойчивость сайтов, выделенные сервера прекрасны, но они тоже ломаются.
Использование сторонних облачных решений для нас слишком дорого, да надежно и все такое, но очень дорого.
Как планируем решать вопрос отказоустойчивости системы
В качестве front-end в стороннем супернадежном облаке разворачивается проксирующий сервер NGINX на внешнем IP. Требования к ресурсам минимальные: 2Гб памяти, 5Гб диск, 100Мбит канал. Стоимость такой VPS около 1500 – 2000 рублей в месяц с обеспечением SLA 99.98%
В качестве back-end будем использовать выделенные сервера в количестве 3шт. Почему три?
Два сервера отвечают за работу сайтов, а вот третий выполняет роль backup в реальном времени для первых двух.
Можно настроить сетевую файловую систему и таким образом добиться отказоустойчивости, но это сложно, долго и не факт, что будет надежно работать. В дальнейшем мы об этом подумаем, но здесь и сейчас времени на запуск у нас было 1,5 дня.
На сайтах изменяется только информация в базе данных, файлы меняются крайне редко.
Поэтому было принято такое решение: базы данных будем реплицировать через дамп каждые 3 часа, а файлы через RSYNC раз в 24 часа.
Выбор серверов для размещения сайтов
Требования к серверам:
Память 16-32Гб, диск SSD/NVMe 500Гб, процессор как можно мощнее.
Бюджет на все у нас 15 000 рублей в месяц.
Соответственно бюджету надо выбирать сервера не дороже 5т.р. в месяц.
Обязательным условием аренды является наличие IPKVM или IPMI. Есть площадки, которые предлагают дешевые сервера на Core I7 (к примеру chipcore, он же Селектел), но без доступа к IPKVM, нам это не подходит.
Для работы PHP как известно важна частота процессора, чем она выше, тем лучше.
В бюджет укладываются сервера:
Xeon E3-1231v3 до 3.8ГГц 4 ядра, 16Гб памяти, диски SSD 256Гб x 2шт. (в Интернет можно найти такой сервер до 5000р.)
AMD Ryzen™ 5 3400G 4 ядра до 4.2ГГц, 16Гб памяти, диск SSD 512Гб от проекта TRI Server.
Как показывает практика, лучше иметь 4 ядра по 4Ггц, чем 16 ядер по 2Ггц. С точки зрения больших нагрузок на сервер многоядерность — плюс, но чем выше частота процессора, тем быстрее выполняются скрипты PHP и запросы к базе MySQL, а значит на обработку одного запроса тратиться меньше времени.
Вывод такой: если большую часть запросов генерируют «медленные клиенты», лучше иметь много ядер, но с низкой частотой.
Под «медленными клиентами» мы понимаем соединения требующие передачи большого количества данных от сервера к клиенту, а значит длительного поддержания соединения с сервером. Таким примером может быть скачивание больших файлов или объемов данных, которые генерируются динамически и не поддаются нормальному кэшированию.
В большинстве случаев основная нагрузка ложиться на базу данных, т.е. back-end системы, а собственно пакет информации, передающийся клиенту от сервера минимален.
Давайте протестируем процессоры с точки зрения производительности PHP, для этого воспользуемся AF’s PHP Benchmark tool
Выделенный сервер с процессором Intel® Xeon® E3-1231v3 до 3.8ГГц 4 ядра
[GENERAL]
1/10 Cycles (if, while, do) …………………. 2.98s
2/10 Generate Random Numbers ………………… 1.21s
3/10 Objects ………………………………. 2.30s
Time: 6.89
[STRINGS]
4/10 Simple Strings Functions ……………….. 6.03s
5/10 Explode/Implode ……………………….. 4.97s
6/10 Long Strings ………………………….. 6.35s
7/10 String Hash …………………………… 0.06s
Time: 17.66
[ARRAYS]
8/10 Fill arrays …………………………… 3.59s
9/10 Array Sort (Integer Keys and Values) …….. 8.76s
10/10 Array Sort (String Keys and Values) …….. 13.28s
Time: .. 25.72
TOTAL TIME: 49.53
Результат очень хороший. Результаты тестов даже лучше, чем на процессоре E5-2630 2.30GHz, который у нас стоит под другие проекты.
Выделенный сервер с процессором AMD Ryzen™ 5 3400G 4 ядра до 4.2ГГц
[GENERAL]
1/10 Cycles (if, while, do) …………………. 2.29s
2/10 Generate Random Numbers ………………… 0.60s
3/10 Objects ………………………………. 1.43s
Time: 4.36
[STRINGS]
4/10 Simple Strings Functions ……………….. 5.18s
5/10 Explode/Implode ……………………….. 3.33s
6/10 Long Strings ………………………….. 3.38s
7/10 String Hash …………………………… 0.04s
Time: 12.01
[ARRAYS]
8/10 Fill arrays …………………………… 2.83s
9/10 Array Sort (Integer Keys and Values) …….. 5.79s
10/10 Array Sort (String Keys and Values) ……… 7.96s
Time: 16.84
TOTAL TIME: 32.83
Как говориться – шок, это по нашему! Разница в скорости довольно значительная. В принципе логика в происходящем есть.
Разберемся, почему десктопный процессор от AMD выиграл по очкам у серверного процессора от Intel
Во-первых у процессора AMD Ryzen™ 5 3400G выше начальная тактовая частота 3.7ГГц против 3.4ГГц у Intel® Xeon® E3-1231v3.
Во-вторых турбо частота у AMD тоже выше 4.2ГГц против 3.8ГГц у Xeon.
Ну вишенка на торте: у сборки на AMD память DDR4, а у Xeon DDR3.
Какой вывод:
Я понимаю, что мы сравниваем серверный процессор предыдущего поколения и более новый десктопный процессор, но какая собственно разница, главное скорость и стоимость.
Можно сказать, что серверные платформы надежнее. Согласен, так и есть. Но опять же какая разница, если мы так и так закладываемся на отказоустойчивость системы и по большому счету выход из строя одного из серверов не влияет на систему. Тем более сервера арендованные, если что-то случиться, нам заменят оборудование. Т.е. отказоустойчивость в данном случае не наша проблема.
Свои сервера размешать в ЦОД на десктопном железе, я бы поостерегся. Просто из-за времени реакции в случае поломки, а арендовать, почему бы и нет.