High availability and high scalability are important, especially for products offering solutions through a SaaS infrastructure. An increase in the number of customers means more work for us, and if we don't build an infrastructure that can handle this much work, we would be wasting our resources.
On-premise vs cloud
First, we looked for a powerful infrastructure solution that we could use for both our on-premise and cloud deployments. We decided to proceed with Docker Swarm for this.
The change in our technology stack, and later the dockerization of the product, gave us real flexibility when choosing among the services offering cloud solutions.
AWS vs Google Cloud vs Microsoft Azure
What mattered most to us was flexibility in infrastructure choices and ease of DevOps. Although the AWS experience was very good, it required serious expertise to use. In our tests, it was obvious that we did not feel "at home". At the same time, the extra charges for many things we couldn't predict bothered us.
We were more familiar with the Azure environment than the others, since we have been using the majority of Microsoft products. In our tests, we could create the environment we wanted quickly. But this time we started to run into vendor lock-in. Even though we were comfortable in the environment, we gave up a little of the flexibility we had. Prices were clearer, but more expensive than other vendors.
Finally, we tried Google Cloud. It didn't take long to get used to the simplicity and flexibility of the environment. The charges are very clear — you can do your cost calculations easily, even in the middle of the month. You can intervene wherever you want. We quickly set up our environment, published it and ran our tests.
The winner?
Google Cloud, of course. Right now, our entire cloud system is geolocated on Google Cloud. High availability and high scalability.
Which technologies do we use?
- .NET Core (C#) and Node.js as development languages.
- ASP.NET Core and Vue.js as application frameworks.
- PostgreSQL and MSSQL as databases.
- Docker as the containerization infrastructure.
- Kubernetes and Docker Swarm as the container orchestration environments.
Monitoring and visibility
Google Cloud allows us to track the entire infrastructure, both application-specific and system-specific. It provides great visibility into application monitoring, system monitoring, exceptions and logging.
We have the opportunity to connect to the containers on which the applications are running and to conduct detailed inspections whenever we want.
By creating alerts on the system side or on the application side, you can run health checks on your application and the system very easily.
Pros
- High availability
- High scalability
- Fully customizable
- Pay as you go
- Geolocated
Cons
- You need to change the way you think 🙂 (could be a pro too)
- You can't bring your local stack as it is
- Professional consultancy may be needed
What about on-premise?
We had no problem supporting the on-premise lifecycle, since the containerization technology and the infrastructure solution we chose are suitable for both on-premise and cloud models. Kubernetes and Docker Swarm (either one can be used according to necessity) also work smoothly in on-premise environments.
Cost?
Pricing can vary since the model we're using is pay as you go. But there is a fixed price for the infrastructure you use. This part is also very simple: you pay only the machine fee. You do not need to pay anything for management on Google Cloud.
Minimal infrastructure
3x 4 GB, 2 CPU clustered = 12 GB memory, 6 CPU
3 VMs in 1 location (Europe, US or Asia)
or
1 VM per location, in 3 locations
Optimal infrastructure
3x 3 geolocated 4 GB, 2 CPU clustered = 36 GB memory, 18 CPU
9 VMs, 3 locations



