Traditionally, we install a web application on EC2 and access it directly via HTTP or HTTPS. The following figure depicts this. In such cases, the risk of failure is high. You could have a high capacity EC2 machine at your disposal, and applications could run on top of it with no worries; but in reality, this is not considered fault tolerant or highly available. If you wanted to build a highly available and fault-tolerant environment, you would end up putting various other infrastructure components in place, with much less pain, to manage the ongoing operation.
If your application demands more memory or CPU, then there is nothing you can do to handle the on-demand nature of the request. So, having only one powerful EC2 instance to host your application may result in issues to handle the spiky load. In order to handle and overcome this, ELB can help you rescue...