Last week we talked about virtual machines and containers and rapidly growing popularity of the latter. Another subject that people in software development talk a lot is the cloud. Everyone wants to be in the cloud nowadays, there is a number of good reasons to do that and some reasons not to.
Originally, I wanted to write an introduction to Amazon Web Services this week, since I’m into this topic recently. However, I realized that the introductory paragraph about the cloud in general is growing too fast and it requires a separate article. Let’s start with a bit of history of cloud computing. Remember: There is no cloud. There is just someone else’s computer.
Cirrus: Long Time Ago…
After the initial developments in computing technology, in sixties and seventies, it was typical, that organization had one large computer, the mainframe, and people were connecting to it over the network using terminals, just to send data and receive results. Then, there was the microcomputer revolution, and by the end of seventies you could buy your own computer at affordable price, and you didn’t have to connect to the mainframe. Then, there was the Internet, and everyone could connect to everyone else with a computer and a phone line. As Internet grew, stuff had to be hosted somewhere, so organizations began to operate data centers, from a single server to huge halls housing endless racks of machines. With the advent of virtualization technology, it became obvious, that dealing with all that by oneself might be inefficient, so why not let someone else trouble with it for money? Current major players in cloud computing emerged with their services between 2006 and 2011.
There was a famous prediction from the early years of computing that “world market for maybe five computers” falsely attributed to then CEO of IBM. Now, in 2017, it paradoxically became true again. We can risk the statement, that from logical point of view, there are only three relevant computers in the world. They are called: Amazon Web Services, Microsoft Azure and Google Cloud Platform.
Nacreous: Strange Acronyms
Cloud computing is a broad topic and the notion of cloud can be attributed to many different concepts. There are three fundamental service models out there:
SaaS – Software as a Service. You allow your consumers to remotely use software you host directly or indirectly. It can be accessed in various ways, most commonly via web browser, but also command line interface or other dedicated client software. An example of that is Google Docs. Consumer can use the browser to create, edit and store various documents, slides or spreadsheets, and Google takes care of everything that is happening behind the scenes.
PaaS – Platform as a Service. You give your consumers an environment where they can deploy their own software, like web applications. They don’t have to care about underlying infrastructure like hardware, operating systems, provisioning etc., they can focus of functionality. An example of that is AWS Beanstalk. You can just feed it with your Java application packed to war or jar, or Docker image and it handles everything else for you.
IaaS – Infrastructure as a Service. You provide your consumers with basic building blocks of IT infrastructure. Computers – big, small, physical, virtual. Network connectivity and specialized devices. Various types of storage. And you let your consumers to configure all that while housing all the required hardware and taking care of things like electricity, cooling and replacing fried hard drive or whatever else was killed in action. Amazon VPC is an example of that from network point of view.
Cumulus: What’s in it for me?
If you want to start an online business you can build your own data center or server room, depending on the scale. You can buy racks, servers, routers and all that stuff. You can hire people who know how to arrange that and maintain later. But this is high initial effort, without guarantee, that you will utilize your infrastructure fully. In cloud, you can just pay per computing time, storage capacity or network throughput that you use. There is no waste. And you can focus your efforts on writing awesome software, not on hiring hardware guy or fixing leaking cooling system.
What happens if your business will not do as well as planned? You are left with a pile of unused hardware and wasted money. In the cloud, you just cancel your service and you are free to go. If your business thrives unexpectedly quickly on the other hand, you are forced to rapidly spend a lot of money on additional hardware and infrastructure setup, meanwhile losing customers who are tired of getting information that your current servers are too busy to process the request. In the cloud, you can orchestrate your environment to start as much new instances as you need to handle the extra traffic. You have unparalleled level of flexibility with your virtual infrastructure.
Stratus: And what’s not
No silver bullet, as usual. You can find a lot of reasons not to migrate physical infrastructure to cloud provider. Some of them are important, some not, most depends on situation and your priorities.
Not all applications are “cloud native”, or well suited to be effectively moved to cloud. Gargantuan, old monoliths are not amongst them for sure. Rapid scaling can also come with rapidly increasing license costs if you are using proprietary software in your ecosystem.
If you go to the cloud, you are at someone else’s mercy and you are losing control over your stuff in a way. If AWS goes down, however unlikely it is, you go down with it unless you have plan B. Large organizations often prefer more control over their infrastructure. Also, there are some regulations, especially in financial sector regarding physical data location, which might not be met if using cloud provider.
In the further episodes, we will take closer look at the most popular cloud provider on the market currently, Amazon Web Services. Stay tuned!