Even for a twitter recommendation engine, that's just a lot of moving parts.
I hope your development is driven by accurate profiling and benchmarks. It's much better to have a dirty, but very surgical fix in a specific bottle-neck, than to have your application "scaled" with too many layers of individually "optimized" components, that bog each other to a crawl when combined.
There are a lot of moving parts, but these are separate sub-systems with well defined boundaries of interaction. Each sub-system is implemented using technologies selected for specific characteristics.
Mono for long-running and complex backend processes.
nginx, PHP, MySQL, memcache - for presentation - quick!
node.js provides an event bus between PHP and Mono
MongoDB is taking over from storing large blobs of JSON in MySQL.
I was on the opposite side of things, when I did we last. I had language integrated into the web server, and I wrote my own caching primitives. All optimization went into the request handler, and optimizing a single function is easier than debugging a whole stack.
A decent solution, but it had no massive inputs, so I slept better at night knowing it wasn't being tested.
I am in the same boat, though not with your exact setup. It's easy to acrue alot of individual components, especially if you are a tinkerer, when developing a non-trivial application.
rails, sinatra, mysql, resque, custom email server (looking for a name...), memcached.
Am I normal?