I have a LAMP application I'd like to deploy to beta in the coming few months. My question is simple: I'd like to choose a host where I wouldn't have to migrate from if I'm successful and get a tide of traffic.
Should I start with one dedicated box and add boxes/load balancing as needed or just choose a cloud solution?. Is it really that simple with a cloud? Can I have a web app with 100 users and 1,000,000 users with the same ease and no infrastructure worries?
I would absolutely go "the cloud" route, particularly for a startup. The money and effort required to run your own servers is not to be underestimated...and it can be a huge distraction to the core business.
But there are lots of different types of clouds, so you'll need to determine how much "labor" you want to off-load.
As example, Amazon's EC2 still requires alot of systems management ability and time (thus $), while Windows Azure is more of a place to "drop your code" (you can't logon the servers).
I've been using Rackspace's Cloud Sites, which is closer to Windows Azure but supports LAMP natively. I've been very impressed. It is essentially a grid computing system with SAN or NAS devices for all file storage, so it does indeed scale up to some degree. I've heard that some very, very heavily trafficed sites were moved off Cloud Sites to dedicated servers at the effort and expense of Rackspace, so at some point their offering does cross a scaling threshold...but at least for marketing purposes they claim there isn't really a limit to how far you can scale on Cloud Sites.
The starting point for this is your app's design. So it may be a little late since you already have your app finished (EDIT: Upon re-reading your question, you probably do not have it finished ).
You can go to progressively bigger machines (or virtual machines if you are using something like Amazon EC2), but eventually you will hit a wall in that you cannot get a bigger machine.
When you are at that stage, you can decide what is best to do: Rewrite the right way, or split up the existing system to be able to run over more machines.
It happens to all people too. I remember when eBay was having all sorts of problems because they had everything stored in a single Oracle database and then that database was bursting at the seams. They had to quickly split up their database to be able to handle growth.
So, at the stage that you are at, I would go on a host which I can upgrade easily... If the time comes when I cannot go to a bigger machine anymore due to the load, I would celebrate that evening, and the next day start to redesign my app.
Let us looks at the pros/cons of each :
On premise
You need to have a scalable technology platform on which you would have developed your solution. Unless until you have the right platform, you cannot scale just by adding more boxes. You need to plan in advance for your hardware needs so that you can add them progressively (you just cannot invest huge money on hardware from day 1. You have to manage the infrastructure your self !! not a easy task at all
On the Cloud
I am a fan of a cloud platform like Google. Develop your app and just deploy on cloud ! The rest is taken care of (starting from scalability to reliability to high availability). No hassle of managing the hardware! The best thing is when your application grows, you just pay based on usage. The same case is for Amazon EC2.
My personal preference to go for Cloud. It is going to be the future.
Cloud computing is not a panacea, not a remedy for all ills and diseases. We can't really answer your question, since that would require deep insight into your application architecture, especially around database (persistent storage) I/O. But I can give some advice, and that would be to err on the side of lower cash burn. In other words, most sites take more time to acquire traffic than expected, so getting to market fast and keeping things simple and cheap at the beginning is usually good advice.
Cloud computing certainly simplifies the provisioning of new servers. But beyond that, the main scalability benefit comes from using the scalable (non-SQL) storage APIs that Amazon, Google and Microsoft have created. You don't benefit from these unless your application uses them.
Is it really that simple with a cloud?No. But it's pretty damn simple to design a scalable website today compared to how it was 10 years ago, especially with cloud computing.
Having just migrated to Rackspace, and realizing that ASP.NET is a pain in a cloud, due to security levels, I think it is still going to be a better choice, as you can quickly scale due to rising demand more quickly than trying to buy and install the computers yourself, but, as others mentioned there are design considerations to take into effect.
For example, can you take advantage of the memory and use memcache, http://php.net/manual/en/book.memcache.php, to help you with speed?
Profiling is still important, to know where the bottlenecks are.
For example, do you spend a great deal of time in the database? If that is going to be a problem, then start to look at what solutions the various cloud vendors offer to help with that.
I think, ultimately, you are better in a cloud, if their increased security isn't going to be a problem for you.
But, if you are really concerned about speed, you may need to look at moving away from PHP at some point, as, there will be a point where changing to a compiled language, but that depends on what you are doing, as to whether you would see any improvement there. I haven't tried it, but you could try compiling PHP, http://www.phpcompiler.org/. The best language for any problem depends on what your needs are and what you are doing.