Part 3: Serverless & Containers, and the Future of Cloud (3 of 3)
By Tiffine Wang & Nelu Mihai
Serverless & Containers Containers is the catalyst for microscopic programming, serverless is taking it to a more exacerbated level.
There are several serverless frameworks including Azure, GCP and open source for private clouds but AWS Lambda is currently the most relevant. Launched 4 years ago, it has generated a paradigm shift. Serveless is a great marketing term, but technically speaking, this is incorrect. Serverless in fact, is not serverless. It abstracts the CPUs of computes, but it leaves the other resources such as memory, storage, networking, services at the pre-serverless state, unabstracted.
An analogy would be “Uber for computing functions”, resources coming together only when needed and disappearing when done.
Serverless is significant because it takes the principle of “microservices” to another level. it splits cloud software into “microscopic” components, which are simple, easy to write and reusable. Functions as a Service (FaaS) move domain experts away from the server level and enables them to focus on specifics of their profession. It allows developers to focus on the business logic and workflows without worrying about the underlying needed resources. In essence, serverless is a functional programming model for the cloud.
Serveless is the perfect example of the “abundance versus disruption” model. Serverless is not a disruptive technology, but a transition to massive abundance for cloud services. Due to its timing restrictions and event based programming, serverless can be a catalyst for creating applications with predictable behavior by inserting time as semantics of software programming. Leslie Lamport and Edward Lee are the pioneers of this concept which, unfortunately has never gotten traction with developers. Time becomes an important resource in serverless, as it is the basic building block of billing, rapid development, cost, performance, and profitability.
Security may be a weakness for serverless. Instead of being dispatched on containers, microVMs allow small virtual machines to encapsulate a single serverless function. You are trusting the providers (AWS, Azure, Google) to secure the various components.
- Rapid development of cloud applications,
- Automatically scaling of functions with demand
- Reduce server cost/pay per execution
- Eliminates management of compute resources
- Allow developers to focus on logic and workflow of applications without worrying about underlying resources
- Serverless is not suitable for stateful applications (many enterprise applications are stateful). Nevertheless, progress is made in this direction by persistent functions
- If applications are not designed carefully, serverless can become more expensive.
- Debugging can be difficult for applications with many functions
- More support for security is needed for different serverless frameworks.
Containers have been used many years ago by Sun Microsystems, promoted firstly by CoreOS, but Docker had the marketing genius to launch them aggressively in the marketplace. From a technology point of view, containers are not difficult to implement. Their main advantages are lightweight and intelligent packaging of the binaries. This gives them portability on different operating systems. Containers triggered a transformational change in the industry and accelerated the wave of “microservices” as methodology to implement cloud software systems.
The winner at the moment appears to be Kubernetes given it’s major support among developers and its comprehensive ecosystem. Kubernetes has adopted an interesting solution for scheduling of containers by creating the concept of “pods”. If applications are split into small pieces, fitting in just one container, then they can include thousands of containers. It makes sense to group them in pods (groups of up to hundreds of containers) and schedule them in blocks. While Google is positioning Kubernetes as solution for multicloud, the reality is that its architecture is multi-compute, not multi-cloud.
We have seen, in the software industry, the evolution of the programming paradigm, from monolithic large applications to virtual machines, containers, microservices, serverless. It is an evolution from “macroscopic” to “microscopic” programming.
Containers may be short lived in applications since they need extra support for stateful applications. The puritans of the containers phenomenon believe that all cloud applications have to be containerized. The fans of virtual machines have made progress by using miniaturization of virtual machines at the hardware level. The distinction between these two types of execution engines is becoming minimum.
Many enterprise applications (legacy software) cannot be converted to containers because of their complexity and monolithic design. They will be virtualized and transitioned into the cloud as virtual machines (lift & shift evolution).
Containers vs. Serverless
New generations of cloud applications will use containers and microservices as architectural concept. Containers are important for the evolution of cloud native applications. A percentage of developers will likely completely leapfrog the “containers era” and write applications using serverless. Virtual machines will survive by getting closer to hardware and become very lightweight. Applications will be structured as combination of serverless and containers. The main priority in cloud technology should not be to answer the question: what is better, programming with virtual machines, containers or serverless? It should be: what are the new inventions needed to build multi-cloud and the universal cloud? For that, multidimensional execution units are needed.
Care to share your thoughts? Email us at firstname.lastname@example.org.
Tiff & Nelu
Need a review, see below =)