My latest course is all about scaling applications on-premise and in the cloud. Let me explain in just a few paragraphs why you would want to make your application scalable and how you would do it:
Everyone understands that you can scale when needing more resources, but even if it doesn't: does your app need to have the same capacity during the night? Maybe you can do with 50% of the resources, potentially saving 50% on your cloud bill.
The first guideline to make your application layer scalable is to make it stateless. Making your app stateless will reduce the complexity of running the app on a server instance. At that point, whether it runs on-premise, on Google, Azure, or Amazon, it doesn't really matter. You would only need 1 or more application servers behind a load balancer and the load balancer wille take care of handling the requests.
If you're running your application on premise, let your Cloud provider manage the relational database, they take away management work and you can just focus on your app. Upgrading your underlying database hardware is just a few clicks away when you need to scale your RDBMS. The same goes for Cache / Search / Analytics.
If you have a stateless app layer, rolling out new versions should be as easy as simply adding more server instances with the new app version. If the new server instances are healthy, the old instances can be shut down. The load balancer only routes to healthy instances, so this is a zero-downtime operation.
If you would run this on AWS. This is how the architecture diagram would look like:
To store assets like images and css/js, an object storage like S3 and CDN like CloudFront could be added. All the state should be saved in RDS (Relational Database Services), and no state should be kept in the web instances. The web instances should be easy to launch and easily destructible.
You can find my online training courses about DevOps and scalability at www.newtech.academy. You are running an application / website? contact in4it and we'll help you reduce your costs, while increasing performance, reliability and managability