Самый простой и дешевый способ переезда на горизонтальное масштабирование:
1. Сессии переезжают в Memcache, который находится на отдельном сервере
2. БД переезжает на отдельный сервер
3. Хранилище файлов, как бы это было не удивительно, тоже переезжает на отдельный сервак
4. Поднимается front нода, которая проксирует все запросы к backend нодам. Обычно это просто Nginx
5. Поднимаете Х нод полностью идентичных между собой с вашим софтом, но без БД, кэша, filestorage'а, используются ранее поднятые ноды для бд, кэша, файлов.
6. Весь трафик идет на front-ноду, которая балансирует трафик между вашим backend-нодами.
7. Все ноды работают с единой базой, с единым кэшом, единым filestorage'ем.
8. Нагрузка распределяется среди всеми нодами равномерно, вы счастливы.
Как результат, вы сможете добавлять сколь угодно backend серверов для разграничения нагрузки.
Обычно проблемы бывают с БД, и тогда приходится балансировать / шардить саму базу. Если проблема в этом, пишите, подскажем :)