Если говорить коротко о том, что я услышал на DevConf, то:
1. Возможность горизонтального масштабирования нужно закладывать изначально. Это, разумеется, в первую очередь относится к базе данных. Как сказал Рыбак (если не путаю, не дословно): “Отмасштабировал базу, считай, что отмасштабировал все приложение.” Для этого используем шарды.
2. Использовать следует nginx (или другой “легкого” веб-сервера) и PHP-FPM.
3. Кешируем, кешируем и кешируем! Читать информацию даже из удаленного кеша получается быстрее, чем с локального диска. Объекты из БД кешируем в мемкеше, а файлы из хранилища в кеше файловой системы.
4. В базе данных используем движок InnoDB. Связано с тем, что MyISAM блокирует полностью таблицу, а в InnoDB блокировка строк, что позволяет не создавать длинных “очередей” на чтение/запись. Ну, и транзакций нет, понятное дело, в MyISAM. Рыбак, как я понял, рекомендовал (по собственному опыту) XtraDB (да и вообще Percona Server).
5. Используем очереди. Это позволяет многие затратные операции не делать немедленно, а разнести во времени. (Да и в пространстве тоже, собственно.)
6. Много, очень много внимания следует уделять мониторингу и логам. Логировать нужно все, мониторить тоже 🙂 Для мониторинга рекомендовалась Pinba.
upd. Рыбак также рекомендовал несколько блогов, из которых я запомнил два:
http://highscalability.com и http://jcole.us/blog/