Горизонтальное масштабирование. С чего начать?
================================================

 Добрый день.  

Работаю над одним проектом на PHP. Это монолит. Все крутится на одном сервере: Intel Core i7, 32 Гб RAM, 500 Гб SSD. В принципе все хорошо и нагрузку пока держит. Но хожу немного забежать вперед и понять, как правильно масштабироваться.   

В проекте используются такие технологии: PHP Yii2, есть memcached, сессии хранятся в redis, также используются очереди, которые работают также через redis.  

Первое что приходит в голову - это вынести БД на отдельный сервер. Потом ставить балансировщик и распределять на несколько серверов входящие запросы. Что делать с memcached и redis, их тоже на отдельный сервер выносить?  

Вот тут хочется понять, как правильно подбирать сервера для этих задач? Как посчитать, какой нужен процессор, память и т.д. Хочется сделать надежную систему и в то же время не разбрасываться ресурсами, т.к. бюджет очень ограничен.  

Заранее спасибо за ответы! 

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

 Если большая нагрузка на БД, то можно сделать репликацию.  

Ваше приложение должно поддерживать несколько БД с разделением на операции.   

Вот с него и можете начать. 

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

  

---------- не воспринимайте как наезд ---------------  

дальше нижеописанное можно сказать одним словом - переписывайте ;)  

  

В первую очередь я бы избавился от корневых проблем, которые почти наверняка у вас сидят из-за основы Yii - http rest технология (кстати не факт) и построение представления на сервере.