Cloud Computing is the model of delivering computer system resources generally over the internet. End-users have access to flexible and scalable resources like computing, storage, or networking, having removed the maintenance role of the infrastructure below them.
Cloud computing makes strong use of virtualization, abstracting the physical resources into one or multiple independent virtual resources. It observes a service-oriented architecture with three standard models defined by the National Institute of Standards and Technology (NIST): Infrastructure-as-a-Service (IaaS), Platform-as-a-Service (PaaS), and Software-as-a-Service (SaaS). These models differ in the level of abstraction and the type of responsibility handled by a cloud provider.
Clouds are also categorized in one of the following definitions: Public, Private, Hybrid or Multi.
Public Cloud Providers
Companies offer cloud services over the internet in a multi-tenant architecture in which users have access to an isolated section of the same shared resources. Popular public clouds are Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), IBM Cloud, Oracle Cloud Infrastructure, and Alibaba Cloud. In a public cloud, tools and solutions are often offered out of the box, i.e. talking about CyberSecurity or Artificial Inteligence tools, there are Amazon fraud detector, Sagemaker, or Google Vertex AI platform, etc.
Private Cloud Technologies
Contrary to public ones, private clouds are entirely controlled by a single organization. Resources are not shared, and the deployment is often on-premises. Multiple public cloud providers offer a private version of their cloud, but usually, open-source projects are widely adopted in this scenario, like OpenStack, CloudStack, Apache Mesos, or Open Nebula, to cite some of the most popular. They all offer complete control over the infrastructure, in which your solutions can be deployed and adapted based on the specific needs.
A hybrid cloud defines the combination between at least one public and one private cloud, while a multi-cloud is a combination of two or multiple public clouds. These combinations lead to multiple advantages, but at the same time, increase the complexity of the system and its deployment and maintenance.
Public clouds follow a “pay-as-you-go” model, in which costs are calculated based on resource consumption (e.g. computational power, data storage, traffic exchanged). There is no need for on-premises hardware and the consequential maintenance of it. On the other side, there is the risk of a vendor lock-in situation. To mitigate the problem hybrid/multi-cloud solutions are more and more adopted.
Private clouds require proprietary hardware and a skilled workforce to maintain them up and running, but usually, no subscriptions are required.
Hybrid clouds are placed in between as they are composed of public and private clouds.
Organizations should evaluate their approach to the cloud by considering essential factors, like use cases, in-house knowledge, experience, security challenges, level of control, etc.
Moving to the Cloud
Deployments in a cloud environment require a different set of skills and knowledge, sometimes not immediate to acquire and master. The subject is very broad and multiple factors are involved. In this section, we want to provide some initial considerations that are usually taken before moving to the cloud about internal evaluations, challenges and advantages.
Moving to the cloud is a big step that usually is not taken in the blink of an eye. Multiple variables and considerations need to be evaluated, and making a list of all the steps makes sense only partially, as it depends on your use case and other hundreds of factors. Every big project starts with a brainstorming session, here we try to list some of the most important aspects that should be considered while moving to the cloud (and also which one to choose):
- Pros/cons evaluation. It sounds trivial, but considering what are the advantages and disadvantages at this stage might help save a lot of time and money. The focus should be on your use case/application: is the cloud the best environment? What are the advantages that the cloud can bring? How much should the use case be adapted to properly work in the cloud? Is there any extra advantage to migrating to a specific public cloud? Etc.
- Public or Private. The main point is the evaluation of whether is better to migrate to a cloud provider or have your on-premises environment (or both). All cases have specific advantages that need to be carefully evaluated.
- In-house knowledge. Another important aspect is the knowledge brought by the working staff of your company: there might be a preference for some technologies, expertise or familiarity with specific tools or cloud services, better knowledge of some architectures, and so on. Knowing all these aspects will help in selecting a specific solution and some of the technologies to use.
- Available services. Cloud providers offer dozens, if not hundreds, of services that can be used out-of-the-box. Finding a perfectly fitting, or one to integrate, or multiple of them to replace, or even improve, your application could be another important component for choosing a specific cloud instead of another. Of course, these services come with extra costs, that also needs to be considered.
- Open-source components. Opposite to the previous point, but somehow still complementary, the open-source alternatives should be evaluated and considered every time it is possible. There are thousands of open-source components available, why not considering them? Several well-known open source platforms, frameworks, and tools are largely used, managed, and perfectly integrated within the various public clouds.
- Training and learning. It is important to take into account that specific training might need to be taken, as well as learning how to use new environments, tools, or services. This process usually does not stop with the migration to the cloud but remains an ongoing component and a very good practice to remain up to date with the best technologies available.
- Cost models. Paid services differ, cost-wise, from open-source alternatives, as well as deciding which cloud components and resources should be used or not in your use case. Cloud costs need to be evaluated before moving your application. This is a big and complex subject that requires a more in-depht evaluation.