Application servers are the virtual machines running the backend code of your application. Typically, these servers run either CPU or RAM heavy workloads and have low requirements regarding storage. In most cases, our go-to product is either General Purpose GP-16 or CPU Optimized CO-16, but it would depend on the actual load and the number of nodes you want to run in parallel.
These VPS run the database of the application. Typically, they need RAM and fast storage. For relational databases (like MySQL) we recommend Memory Optimized Instances, while non-relational databases (think MongoDB) can work with both Memory Optimized and Storage Optimized Instances. It's important that you also plan for redundancy and future horizontal scaling.
Dealing with Incoming Traffic
In many cases, it makes sense to put an additional instance between the external traffic and your application servers. Some popular solutions for that use case include HAProxy, Nginx and Traefik. Typically, instances running as load balancers or API gateways are running low average load to be ready for sudden traffic spikes. The choice of instance will depend mostly on the scale and volatility of traffic. 2x Starter S-8 instance with NVMe are usually a good starting point, but you might want to go for CPU Optimized Instances for very high traffic.
Many SaaS Apps require space to store files. Whether it's documents, photos, scans or videos differs from case to case, but Object Storage is usually the best place to store all of the above. This way, the increase of the amount of data doesn't push you to scale up any of your instances.
Monitoring and Logging Node
Centralizing monitoring and logging on separate instances makes managing your cloud infrastructure much easier. Tools like Prometheus, Telegraf + InfluxDB, or Elasticsearch have moderate CPU, RAM and storage requirements, so you can start with a Starter Instance and later switch to one with optimized storage, if needed. For larger setups, go with NVMe rather than SSD storage.
You can create a boiler plate of each of the specialized nodes described above using Custom Images and/or cloud-init, so that every additional node inherits exactly the same settings.
We recommend that you separate the traffic between your inner nodes using private networks, so that external request can only reach API Gateway nodes.