Имхо ты не оттуда начал. Начинать надо с разделения данных как это делают разные большие сервисы (например почтовые сервера раскидывают по физическим серверам ящики, счётчики посещений тоже раскидывают и т.д.)
Масштабировать приложение интенсивным путём (мемкеш, постоянные соденинения, оптимизация алгоритмов и т.д.) можно лишь в небольших пределах (ну в пределах порядка), большие системы как бы то ни было работают на многих серверах (
Например тут разрабатывают на 100-150 серверов)
Если у тебя всё динамическое и интерактивное то это наверняка какая-то СУБД, с которой общаются SELECT/INSERT/UPDATE/DELETE запросами (ну разные внутренности типа процедур, тригеров, вьюшек затрагивать не будем)
Т.е. надо разносить типы запросов к данным (например INSERT/UPDATE/DELETE на 1 мастере и репликация на N слейвов которые будут получать также часть SELECT запросов)
Если этого не будет достаточно, то надо разносить также и разнородные данные (например часть таблиц реплицировать на одни сервера, часть на другие) или даже однородные данные (если все тормоза упираются в них) - для примера четные/нечетные посты из форума идут по разным зеркалам (ну конечно тут сильно усложняется интерфейсная часть и лишние конекты, но возможно это единственная возможность масштабироваться дальше)
Если мастер не будет справляться с нагрузкой INSERT/UPDATE можно убрать на мастере с таблиц все индексы которые нужны только для SELECTов (оставить только нужные для UPDATE/DELETE)
Когда будет проделана эта работа можно писать интерфейсную часть и раскидывать её по серверам и думать о SRM, SqlRelay, Memcache, демоны, екстеншены etc
Тут тоже возможно можно распаралелить выполнение между разными серверами: скрипт-обертка раздаёт задания и "клеит" результат