Currently, software architecture has several challenges, such as long-awaited scalability. The cloud brought this possibility with several IaaS, PaaS, and SaaS services. With so many options and services, which one to choose for each scenario? This article aims to talk a little about the disadvantages of choosing cloud services in our corporate software.
There are many challenges for an architect, like scalability and reduction of the response time of a request. It is nothing new that the concept of the cloud has brought several benefits to the world of software. In general, the cloud brought some of the following advantages:
- Focus on the software: Undoubtedly, developing and maintaining the application without worrying about the hardware, infrastructure, and electricity bill is terrific! Any reduction in complexity means greater focus and time on developing software. Furthermore, we know that the biggest challenge is to maintain d.the machines.
- Multi-region: The possibility to choose the region where the server will be is significant. Among the reasons, we can mention an improvement in latency, the possibility of having applications distributed in different parts of the world to avoid disaster recovery.
- Scalability: It is the property that a system has to deal with an increasing amount of work, adding resources to the system. In an economic context, a scalable business model implies that a company can increase sales due to increased supplies, which can be divided into both horizontal and vertical scalability.
Complexity x Risks in Services
An important point when we talk about the cloud and its services is that the smaller the abstraction, the smaller the uses as services. For example, IaaS will have the most significant responsibility in the software construction steps. This large number of methods will grow to the same extent as the number of servers, and this complexity is related to risks.
- IaaS: With it, you can perform all the benefits of the cloud, which were mentioned above; however, all responsibility maintenance will be for our team. Ensure the right communication between services for the respective databases, backup, scaling both vertical and horizontal, etc. All of these points generate complexity and, in turn, more risk.
- An excellent example of IaaS is Amazon EC2. In general, it can be thought of as a large rental of machines in which you can pay for their use, similar to our bill electricity. To illustrate this, let us consider deploying an application with an Amazon container. The first step is to create an instance that is about seven steps. Then, you need to install Docker, so that it is possible to create an image to run that instance. It is possible to see that a simple deployment of an application requires several steps.
- Orchestration in IaaS: Orchestration is the configuration, management, and automated coordination of services, applications, and computer systems. It aims to facilitate and abstract the IaaS, making it closer to a PaaS.
- Kubernetes: It is an open-source container orchestration tool and works very well with Docker. It is currently one of the most popular devices. As we already know, there is no simple solution to a complex problem in the world of software architecture. What exists is a collection of horror stories related to the Kubernetes experience. The critical point is that just because the tool is popular does not mean that it is the best option for us. That is, even though it is an abstraction within the infrastructure as a service, Kubernetes is not a simple solution, and there are several risks with the foundation that must be considered.
- PaaS: Drastic complexity reduction to focus on creating the software, is undoubtedly the most significant advantage within PaaS. With it, in general, there is no need to worry about maintaining the machines, creating a backup routine, purchasing licenses, etc. All the care development ventis the creation of software. However, PaaS has a higher cost compared to services without greater abstraction.
- Platform.sh: it is a second-generation Platform-as-a-Service built, especially for continuous deployment. It allows you to host web applications on the cloud while making your development and testing workflows more productive. In addition to being able to deploy the application leaving all the work for the platform. Basically, from three files: application, services, and routes, we can push to a Git repository. A simple push to the remote system Platform.will automatically creates the application containers, services such as databases, and the application of the route. In this case, the abstraction is giant, so it makes the team focus more on the central plication of the company.
- SaaS: Software as a service is a ready-to-use program that is not concerned with hosting, scalability, etc. All the complexity and risk have resolved. However, customization is lesser, and the possibility of configuration depends directly on the provider.
In general, we have to think about the following three cyclical principles that we compare:
The greater the complexity, the less abstraction;
The greater the abstraction, the lower the risk;
The lower the risk, the less complexity.
There are indeed several benefits to navigating the computing cloud seas. However, it is imperative to know the types of services that the cloud offers and make an in-depth analysis of the complexity of service with its own risk, beyond how much time the team is willing to spend to create and maintain the entire infrastructure.
PaaS provides a great advantage of abstraction. All the support and maintenance of the developers focus on your business. IaaS will guarantee you great flexibility and power to install and configure what your team wants without any problem, even if everything has to be set manually. It is essential that as long as the team and the company is aware that, regardless of choice, there will be benefits and disadvantages. Architects need to evaluate what best fits the institution after all, cloud and computing is not related to when, but how.