During the past decades, technology – both infrastructure and software – has evolved tremendously, guiding the information industry forward. As such, choosing the right way to run your application has become a challenge that you can solve by taking a multitude of factors into account.
Looking back at how it started, companies that develop and run software would host everything they had in a self-hosted environment. Then the concepts of IaaS, PaaS, and SaaS came along, which usually offered more beneficial solutions, and the general tendency has been to try and move applications towards them.
But now this brings us to the next step: what choices do you need to make and which one will bring your business the most value? We will try to cover some of the key aspects of this article.
Before starting our analysis, we must consider several possibilities – specifically on the kind of software and how it is run.
Desktop applications installed directly on customers’ physical machines is one situation that we have encountered. The customer can only use the software from that desktop.
This raises another common problem; not only a client but also server-side applications need to be configured manually, which can imply additional costs when having to perform on-site installations. On the other hand, applications in a self-hosted environment can also have this problem if there’s no automated way of handling their configuration.
The first natural step would be transitioning to a hosting provider, which comes with some cons:
Next in line in the infrastructure timeline is implementing an abstraction layer over the physical hardware, which is what data centers do. So, the natural transition means moving from physical to virtual machines. It will bring more simplicity, but in the end, it only reduces – just a bit – the fundamental problems of physical hardware.
Some data centers do implement ways to automate the provisioning / cleanup of hardware. While it provides advantages and gets you as close to IaaS as you can, it also means more development time to ensure compatibility between automation tools and the virtualization layer.
The need to automate processes has brought our customer base to achieve milestones on their own. While some of them managed to automate deployment processes through existing tooling, some also implemented their own internal tooling for this purpose. Others went on to automate the configuration process of virtual machines, but it all goes to show you that there isn’t anyone out there that managed to do it all and do it optimally.
As in the ideal world, everything would be fully automated. We are, therefore, the proud supporters of the IaC (Infrastructure as Code) concept. It perfectly satisfies the “pets versus cattle” metaphor where machines should not be treated as an individual but rather as a group that needs to fulfill a role in the architectural landscape. While the initial development time investment is relatively large, in the long run, it will drastically reduce maintenance time.
Companies often neglect configuration management, and it is also one of the most misunderstood topics. Companies often use configuration management software for other processes than for which it has been designed, such as automating deployment processes. If you do your configuration management correctly, you will apply alternatives for those processes not covered by configuration management software.
Since both IaC and Configuration Management turn your infrastructure into declarative code, it also needs to be tested. It is imperative at this stage to implement and have healthy CI/CD pipelines to automate every process within your infrastructure.
Moving away from self-hosted solutions or data centers that don’t provide IaaS means moving your data onto a Cloud. Be it public, private, or hybrid, there are scenarios you need to consider. Summarizing what we have so far:
In conclusion, while there are many options available on the market to which you can turn, there are some providers that still need to adapt to the current trends. And while Clouds are on the rise, opting for the public, private, or hybrid Cloud becomes less of a choice. It mostly depends on how your application was designed to reach your customers.
By Alexandru Coman, DevOps Engineer