The cloud is the preferred infrastructure choice in many industries. There are already countless articles showcasing its benefits. However, when you setting up your infrastructure on cloud or migrating from a PaaS, developers often ask about the requirements for the minimal servers setup for the application in production? As with any good question the answer is: it depends. It depends on your application type, size and its components.
For production environments we recommend putting each component of your application on separate servers. This protects your application from possible downtime, as some of the application components (e.g. Elasticsearch) can be extremely resource hungry and can compromise other components if they share the same server. Additionally, this setup gives developers more control as they can scale each components separately. Essentially, this practice makes your application more reliable and secure, as it makes it easier to recover in case something goes wrong with one of the components.
As for the size of the server, it is difficult to give a one answer as it depends on your application, and the cloud provider you have selected. Although most cloud providers offer servers with the minimum specs required to run Ubuntu, we do not recommend using these, even for testing. We recommend the following minimum specs for any virtual machine being used to host an application or one of its components (such as a database):
- At least 2GB of RAM
- At least 4 vCPUs
- At least 25GB of storage
To get a better estimation we would recommend to install a 3rd party metrics tool, e.g. DataDog, NewRelic, Prometheus etc. Those tools can help you keep track metrics and help you select the optimal server size for each component of your application.
Lastly, for a backup stack, it’s acceptable to have a single server to cut costs.