in addition to the above:
2. do not skimp on code development-cluster management (and to discongruity projects cluster needs at least for reliability): the update scripts (and in the project it is necessary to consider that the code and data can be updated), a backup and restore from a backup, managing cluster adding/removing/adjusting the nodes, etc.
Just when the poor organization of highload projects buggy more often :) because the corny 'testers' anymore.
3. do not chase technology, it is not necessary to pile up frameworks, plugins and libraries to each other, to be always useful, and maybe your bike in some places can be preferable (I'm not talking about cases where almost the whole problem in its entirety is solved already something ready, always there are nuances)
4. optimizing sql is cool, but very often, nosql solutions (+something for serialization) quite a substitute for sql (and speed of course win) as combined solutions (but the latter generates slightly more problems with updates to design and code)
* memcached is way too nosql, not only is the repository (not guaranteed if data is retained, they can be removed)
* here is the storage solution should not the city own bikes and it is not necessary to invent a nightmare on files. BUT, for example, a small static (redkozemelnye) pieces of the database is much more efficient to load right into a PHP array (up to hundreds KB of php code initialisatie variables is significantly faster than any database framework, not to mention the overhead of database connections, etc.)
P. S. get ready to rewrite everything, it is important for developing projects, i.e. using complex but the finished products is realized that working on what biznesowych driven around, then, when this monster becomes simply unwieldy, based on ready-made, from scratch, a new project is implemented, no sores growth, fast and easy.