Most important for good scalability is architecture and implementation of the application to be scaled (run).
On your servers scaling relational database would be way more expensive than adding more application servers. On cloud the database back-end is limited. (Has less features than today's relational databases.)
So first thing to ensure to be scalable is: let the architecture of your application to use database at possible minimum and allows to have multiple application servers where maximum of the processing is done.
In web applications you can use javascript on your pages so the client's browsers make less requests and simpler requests to your server.
Another way said more servers is less expensive than single super-machine.
And whatever you can use more servers is given by architecture of your application.
Caching can help to any application.