Cloud Evolution
The Cloud Today
Cloud Computing is a term that has been with us for some time now and many believe the concept to have reached mainstream maturity. However much of what is marketed as being "The Cloud" is still far away from its true potential. In fact many of the world's leading computer scientists would argue that the real revolution the Cloud brings has barely begun; it promises to fundamentally transform the design of software and hardware architecture and reshape our economy forever.
The Internet is designed so well that most of us forget it is not a single network, but a network of networks, made from millions of public and private interconnected systems. Contrast this with the current landscape of the Cloud and there is a fragmented offering of public clouds, private clouds and hybrid clouds that can be complex for most to navigate.
The Internet as we know it today took decades to evolve. Back in 2010 Vint Cerf, Vice President at Google and one of the "founding fathers" of the Internet, predicted that the Cloud was where the internet was in 1973. One of the major challenges the Internet had during this time was finding a standard way for different computer networks to talk to each other - the computers belonging to one company would have a completely different set of tools to communicate to that of another company - gradually TCP/IP emerged as the defacto standard for network communication. In a similar way a standard set of tools for clouds is now beginning to emerge and the differences between them are slowly beginning to sink into the background.
Why is this significant? No one would have predicted where the foundations of the internet would lead - in the late 90's developments in Linux, Apache and Java led to an explosion in growth of the World Wide Web. In 2015 evolving standards implemented by Open Stack, Cloud Foundry and Docker are on the verge of doing something just as transformative for the Cloud.
Proponents talk about how the old server/client model of computing has given way to a cloud/mobile model; where once we had client devices such as a laptop connect to a server, for instance to access an organisation’s website, now we have any number of devices syncing with and sharing a ubiquitous, omnipresent, computing resource.
Industry Disruption
Cloud services, though disjointed, have already transformed datacenter architecture. Today's tech powerhouses like Amazon, Facebook and Google, even non-tech companies like Goldman Sachs and Fidelity Investments have ditched traditional hardware offered by vendors like HP and Dell in favour of original design manufactures (ODM's) such as Quanta and Wistron to provide "white-box" customised infrastructure necessary to deliever "Hyper-Scale" computing. In 2011 Facebook started the Open Compute Project (OCP) where custom open source datacenter designs are shared amongst participants. In the last quarter of 2014 unbranded server shipments grew to take 15% of the market.
Datacenters powering the most advanced internet services are very different in design to the majority of legacy datacenters. Software running on these systems, such as Gmail or web-search services, execute at a scale far beyond that possible from a standard collection of physical servers. For these instances, Google has coined the phrase "Warehouse Scale Computer" where the entire datacenter is deemed to be as a single computer or machine. This approach of treating a datacenter as a single computer gives a clue as to the next phase of orchestration between datacenters and devices - complete interoperability between previously different cloud types and devices allows the Internet itself to viewed as a single "computer". The Cloud will allow the world's computing power to be a utility just like like water, electricity or gas.
As you adopt cloud computing, which 3 technology vendors do you expect to increase spending with the most? Which 3 technology vendors do you expect to decrease spending with the most?
Source: Morgan Stanley CIO Survey 2014
A key underlying technology that led to the rise of Cloud Computing is the virtual machine (VM) pioneered by VMware. Virtual machines fundamentally changed the way in which server infrastructure was set-up and run. But even this technology that gave birth to the Cloud is now subtly under threat from a very different type of virtualisation, containers. Disruption in this area shows us that it's not just traditional hardware vendors who are under threat from the evolving cloud landscape; in the decade ahead containers could remove the need for VM's altogether and transform current implementations of operating systems and apps.
Virtual Machines vs Containers
It's worth going over how virtual machines and containers actually work. Virtual machines are a staple element of modern enterprise IT environments. Traditionally, servers were dedicated computers that "served" a specific task - be that email, website hosting, file storage etc. VM's imitate these real physical servers and have assigned properties like processing power, memory and storage but these traits are actually abstract from underlying hardware (known as a host machine). There are several advantages to this approach, firstly multiple VM's can be held on a host server increasing the resource efficiency. Doing this gives rise to the fundamental economic benefit of cloud computing: service providers can sell the same underlying infrastructure many times over knowing that not all customers will have full utilization at any one time. The second big advantage is that VM's can move dynamically on underlying hosts thus allowing workloads to be spread evenly across a server estate. If the underlying hardware or network connection fails the VM can reboot elsewhere. It also has security benefits - because VM's are set up to be just like separate machines, the apps running on them can only communicate between each other using networking protocols; If a VM is running malicious code and is not connected to another VM's network then there is no possibility of this having an effect on the other VM's - even if running on the same physical host server.
At the same time VM's have several drawbacks. Because it emulates an entire machine each VM has to run an entire copy of an operating system (OS). This means even though a VM may be set up to run a single app it will contain a large amount of code it simply doesn't need to perform a task. Apart from increasing the resource overhead needed to run a cloud it also has an impact on service delivery - all this unnecessary code needs boot up when starting a VM - something that can take several minutes.
It's for the above reasons that virtualisation has not had the same effect on desktop and mobile computing as it has on the sever side. Running multiple VM's on a server is common practice but running VM's on a laptop would cripple that client device. It also means that Moore's Law, the observation that computing power doubles every 18 months, hasn't had the impact it could do on servers due to the overhead or inefficiency inherent in increased levels of virtualisation.
Containers on the other hand do not contain a whole operating system but only the application and anything else the app needs to run, such as software libraries and any other app-related code normally included with an OS. These additional libraries are known as "dependencies".
Since containers don't contain a whole OS they can share the tools provided by a single underlying "Library OS". This leads to vastly improved resource efficiency: far more containers can be packed on to a host than an equivalent number of virtual machines and while a VM might take a minute to boot, a container can boot in 1/20th of a second. Where VM's emulate an idealised hardware environment, containers offer an idealised operating system environment. Containers allow for benefits of increased utilisation, resource pooling and performance to be taken to a whole new level.
The Rise of Microservices
Containers do not just offer the hope of more efficient cloud computing via the status quo; they also offer a big philosophical leap in terms of how programming should be done. Containers have actually been around longer than VMs and can trace their origins back to the 1970's when Alan Kay spearheaded an approach he called object-oriented programming. Rather than build software as a single piece of code, Kay divided tasks into cells, or objects, that could talk to each other. Everything the object needed to perform a task was contained within the cell. With this object-oriented approach, he could expand an application by adding new objects, and mix and match them as he saw fit.
Just as living organisms are made up of millions of cells that each perform a function yet seamlessly communicate with each other; containers can coalesce to form full bodied apps or services. These cellular parts can be edited or removed from the system without causing failure in the overall service. The term Micoservices has risen in popularity to describe this organic approach to programming and is fast replacing the old norm of writing a single piece of monolithic software.
There's a good reason why containers have for decades failed to make an impact - until very recently containers were both time-consuming and difficult to manage, requiring the very brightest computer scientists to create and manage them effectively. Everything at Amazon, Google and Facebook runs in a container - even VM's. But now things are beginning to change. Docker has hit the headlines with a radically easy and efficient way to create and package containers in a preset format. The arrival of Docker is akin to standardisation for transport containers used by lorries, trains and ships. Previously cargo would be manually loaded onto each mode of transport via a variety of different methods leading to increased costs due to labour and time. Docker gives a standard way of packaging and transporting code across different environments just like a transport container does for cargo. Now creating internet-scale apps that can run in a cloud environment is an order of magnitude easier.
This month saw leaked information about Microsoft's new "Nano Server" due for release in 2016. This is a big shift from previous iterations of Windows Server. The tech giant is implementing what it calls a "deep refactoring" of its server operating system to run Docker containers securely. Legacy OS's that we are familiar with are not secure enough to run in a multi-tenant container environment: If a piece of malicious code operates in a container and is able to edit the underlying OS then unlike a VM all containers running on that OS are potentially compromised. For this reason Google and Amazon still use their own VM's to isolate different customer's data on their cloud platforms. Microsoft's plans to completely re-architect its server OS have big implications for the future of enterprise app deployments and could spell bad news for VMware in the long term.
Several "Cloud-First" companies are already implementing a microservices led approach: Uber, Spotify, Airbnb, Shopify and Netflix to name but a few. Developers can now run code previously only possible on a server on their laptops. Relevant containers can be cached locally on a client device and then deployed to a full blown cloud environment. These containers can then move, grow or be replaced to form a new app wherever necessary. Google currently launches over two billion containers a week.
Think of Spotify: you are able to save and cache songs and playlists locally to your device without the need to be constantly connected to the internet, this concept of caching some elements locally while other parts of the app are held by the cloud can be can be applied to any type of service, app, data or user interface. From a software point of view there is little distinction between the server and client - both form part the same underlying fabric - this is why Cloud/Mobile is so radically different from Server/Client computing. Containers are so lightweight compared to their VM equivalents the bandwidth required to send them between datacenters or devices is significantly less.
Traditional virtualisation has legs for years to come. It is in effect a holodeck on which monolothic applications can continue to run - you can run your software like it's 1995 or 2005 on hardware built in 2025 because a VM effectively remaps the old hardware considerations away - in this sense virtualisation has had zero impact on the architecture of how software is developed - you can upgrade through generations of infrastructure and the software which is using it has no way of knowing. You can virtualise your network - so you don't need to worry about IPv6 - or virtualise the storage - so you no longer have to worry about things like high availability. It's a very convenient way to deal with 25 years worth of monolithic software. But the monolithic software we have become used to, while great at scaling and doing certain tasks, turns out to be very bad in other respects. Monolithic software comes from a time before the physical constraints of CAP Theorem were fully understood. What's the impact of this? When looking at building an application like Uber that scales to direct' 1000's of taxis, all with real time processing of data and analytics, traditional virtualisation is useless. Not a single tech start-up coming out of Silicon Valley invests in traditional servers, storage or networking in any meaningful way and the innovative services now being delivered by this new architecture are creating a real headache for incumbent market participants.
Manager Business Analysis at TD Bank Group, 2020 League of Excellence recipient
9 å¹´Great introduction to 'Containerization' I am so excited to explore this new piece of future technology....
Bringing people, processes and technology together to deliver productive changes to organisations
9 å¹´A very article Matthew - well done. As simple as possible an overview of virtualisation in general and the potential of "container architecture" specifically. I am very keen to link to this.