watching videos (embedded from other sites), listening to music, uploading photos, and sharing data. Our test site is running so slow now and it only loads 20 activities at a time.
At least make sure you have a fairly modern machine (dedicated, not shared) of round 2GHz, a 100MHz link to the net instead of 10MHz and have Nginx/php-fpm instead of Apache webserver installed. This should take you a long way to your minimum requirements. If this does not do the trick you probably have to cluster or cloud several machines. Clustering is more barebones to the machine but harder to install and finetune/maintain. Clouding is to install virtual machine software which is easier but somewhat costlier with resources.
Also check your SQL, often a lot of cpu cycles are wasted on shoddy database interaction.
1) You want to move static data off your system onto another site like s3.
2) You want to do whatever you can async. ie. if somebody shares data, you don't have to make it available immediately. Just place it in a queue and have a second system go through and deal with it.
How is your test suite running? Are you running 20 instances of your site on a single test machine? Is it possible that the machine is the bottleneck? While the machine is doing its 20 tests, can you load the site another, unburdened machine?
I think part of the problem is we are loading embedded videos instead of thumbnails as it's taking about 17 seconds to load the page with 20 videos now. We have a semi basic machine through staminus.net, but I really want to get my own server that can handle 100,000+ users ay a time. I haven't considered having the load on another unburdened machine but that's a really good idea.
Also check your SQL, often a lot of cpu cycles are wasted on shoddy database interaction.