We on-boarded a new guy recently. He called himself a blank canvas but we know that this is not true. However, it brings us back to explaining the basics. One of the most basic questions turns out to be quite deceiving. What is Cloud?
One of our coworkers shared an article on Cloud Flair, which explains that Cloud is about two basic things: not owning your own hardware and virtualization. Next, they bring in all the buzz words: IAAS, PAAS and SAAS to end up with FAAS. Running everything As-A-Service, Infrastructure, Platform and Service to end Functions. Nice, we have all the marketing terms in one line. However, that is what they are, marketing terms. They do not cover any of the depths of what Cloud is about.
Let’s look at Cloud from a different perspective.
History of the cloud
We like to think that Cloud is just a captive term that makes us imagine and hope for a better future. Who doesn’t like silver linings? Obviously, none of this has anything to do with the cloud.
External organizations providing hardware maintenance have been around for years, so have organizations that offer financial support in buying hardware. Combining these two into one service resulted in the predecessor of what we currently call cloud.
Virtualization has been around forever too. Mainframes virtualize workload because they offer efficiency, stability, redundancy and security. Although some aspects of virtualization were present in early commodity hardware, we have only seen it bloom in the last decade or so.
The combination of hardware and virtualization into a new product has brought a breakthrough in adoption. Early adopters would combine and install all the shiny new features on the expensive hardware they owned. The idea that the actual hardware was less relevant gradually grew and the virtualization layer offered many unique and desirable features such as “automatic up-scaling”, “virtual migration” and “hardware independence”. Yet, we are still inventing great new features to add to the mix.
Current play field
From a practical point of view and leaving the marketing fancy jargon for what it is, we see four potential directions you can go thinking about cloud.
- Physical servers managed by the cloud provider, you are managing the software.
- Virtual servers rather than physical servers.
- Container platforms, specific types of servers on top of which you build services.
- Cloud applications, you deliver your software and the rest is taken care of by the cloud providers.
Admittedly, this is a rather narrow perspective on the subject. One of the major advantages of Cloud is that external actors have already built services on top of Cloud platforms and they repackage as a service. Imagine that you need a database or some storage. You do not want to maintain the servers nor the software. You just want to be able to use a database or store your data. Therefore, part of the story is that for a set of services you will just link them up to something you set up yourself but more aligned with the cloud idea you will purchase as a service. Note that sometimes deciding on a cloud versus self-maintained is not straight forward. Planning is key. However, we digress; let’s focus on the four categories we listed above.
Physical servers in the cloud
This type of cloud solutions is still very popular. It provides a first step in cost optimization. You do not buy your own hardware, rackspace, connectivity. The cloud provider takes care of everything. If anything goes wrong with a disk or a power supply, your provider will fix it. You decide what goes on the machines though, which server runs the database, which one has the virtualization stack on it, etc.
You will have to buy your own VMWare or RedHat license or maybe you like Xen or one of the many free Linux variants. If you want to install Windows, you will have to purchase the licenses too.
Pros and Cons:
- + You can install whatever you want
- + You are in full control
- – You need to purchase and install the software
- – You are responsible for the software maintenance
The next level up is at this moment probably the most popular. Here the Cloud provider just delivers you a set of virtual servers that look like and behave like physical servers. However, you do not really know what is under the hood. The cloud provider manages both the hardware and the virtualization layer. You manage the machine as if it is just one of your physical servers connected to the internet.
The reason it is so popular is mainly due to the cost savings potential. You no longer need to optimize your load on the machines; you are not responsible for hardware or connectivity. Due to the volume the cloud provider can optimize all resources turning this into a “pay as you use” service making this solution very cost effective. Obviously, you have less control but still need to manage monitoring and security yourself.
Pros and Cons:
- + very cost effective
- + pay as you go
- – less control over what is going on
- – still requires own monitoring, security and server management for software updates
At this point rather than ordering a set of discrete servers where you decide what goes where, you orchestrate a platform to deliver whatever it is you want to provide on the Internet. Typically, an application will be a combination of a database, a storage server, an application server, a webserver and an api server. Rather than having to think about how to set these up, you model your service on top of a set of reference servers with predefined descriptions.
You combine these machines into groups and tell your cloud provider to roll the setup out on their cloud. At this point, you do not control the servers and you might not even be able to access them. The Cloud provider creates and rolls out the service according to your specifications, handling all other things. Since the whole process of rolling out the application is automated, it is easy to set it up in a controlled environment. This makes it possible to create a development pipeline with lots of controls over the various stages and makes this an ideal setup for what is called “agile” development. You can extensively test new features before rolling out to production.
Pros and Cons:
- + focus on your service or product, not on your infrastructure.
- + very flexible development and controlled roll-out by staged the various phases.
- – additional complexity, development and operations need to be merged in DevOps
- – platforms are still adapting to the market, features come and go
Cloud native application
The most cloud-aligned option is to leave the thought that “machines” should run your application. What it boils down to is telling your cloud provider what environment you need, what libraries you want installed and provide your program to run on that stack. Your cloud provider will prepare an environment for you, typically a virtual image. This image is attached to a virtual instance that will run your start-up command and from there on reply to incoming requests that are handled through your Cloud provider’s infrastructure. By default, if you need additional service or functionality you have to pay for it and then link it to your application.
Pros and Cons:
- + no infrastructure concerns, everything is handled by your Cloud provider
- + focus on development and easy roll-out
- – external services will have to be bought and/or set up separately and linked up
- – additional effort needed to migrate existing applications
This is cloud
It is obvious that the term “Cloud” can be used in a variety of different ways and depending on your background you will perceive the offering differently. It is clear that the range of services provided from a “managed hardware” environment to a “run my software” service is very diverse.
We at Nexperteam believe that no customer is alike. As such moving into the cloud requires an understanding of the needs and an inventory of the current situation. Based on that we can provide a plan, build a migration scenario and make you cloud journey one that fits your needs and optimizes your potential.