It's really hard to prescribe a solution without a lot more knowledge on what these apps are, what the load averages, what kind of spikes, etc.
Two special notes:
- I haven't tried Forge
- I have never worked with video encoding outside of some personal stuff that I've rendered on my own computer. I have no idea how it works on a server or what resources it will take.
Some general recommendations:
- If an app needs multiple machines, use a stack per app.
- Start with two load balancers. I prefer haproxy. All traffic goes through one, the second balancer sits at the ready to steal the primary's IP should it become unresponsive. I balance using least connections and pass through the SSL termination to the app server.
- If you need multiple database servers either for redundancy or load, keep them off by themselves.
- One server could potentially serve as "utility" maintaining the cache, php sessions (this needs to be off the app servers if you don't use sticky sessions, and I don't recommend using sticky sessions), and a background queue list.
- One final server could serve as the queue worker. That's where you can do your image manipulation, video encoding, etc.
The single "utility cache" and "worker" are single points of failure in what I just described. You might want to have everything in twos if you want to increase your reliability and minimize the odds of you needing to wake up at 3am to reset something.
If you need more info, including some sample configuration code, check out Steve Corona's book Scaling PHP (no affiliation, I just think that its a good book)