# Volunteer Down: How COVID-19 Created the Largest Idling Supercomputer on Earth
## 3 A Review of the Current State of Cloud Computing
### A Review of the Resource Utilization Evolution  
Cloud-native applications are built to be elastic. If not, cloud computing would very often not be reasonable from an economic point of view [65]. Elasticity is understood as the degree to which a system adapts to workload changes. Over time, systems were designed intentionally for such elastic cloud infrastructures. Accordingly, the utilization rates of underlying computing infrastructures increased. New deployment and design approaches like containers, microservices, or serverless architectures evolved.  
Figure 7 shows a noticeable trend over the last decade. Machine virtualization consolidated plenty of bare-metal machines and formed the technological backbone of IaaS cloud computing. Virtual machines might be more lightweight than bare metal servers. However, containers are much more fine-grained and improved two things: The way of standardized deployments, but they also increased the utilization rates of virtual machines. Nevertheless, containers are still always-on components. Thus, Function-as-a-Service (FaaS) approaches evolved and introduced time-sharing concepts in container platforms. Using FaaS, units are only executed if requests have to be processed. Therefore, FaaS enables scale-to-zero deployments and improves resource efficiency [66]. Thus, the technology stack--although getting more complicated--followed the trend to run more workload on the same amount of physical machines by shrinking the size of standardized deployment units, be it virtual machines, containers, or functions.  
This **virtual-machine \(\rightarrow\) container \(\rightarrow\) function** resource utilization evolution is accompanied by corresponding architectural approaches:  
* **Service-oriented architectures (SOA)** fitted very well with monolithic deployment approaches that can be provided using standardized virtual machines (IaaS).
* **Microservice architectures** are built on top of loosely coupled and independently deployable services. These services can be provided via much smaller and standardized containers. We could rate Microservices as a kind of standardized PaaS cloud service provision model.
* Finally, **serverless architectures** are mainly event-driven service-of-service architectures where their functionality is provided as \"nano\"-services via functions. Serverless and FaaS are the latest trends in cloud computing, so functions are not standardized yet. However, more and more  
Figure 7: Observable trend of minimizing deployment unit sizes, taken from [3].  
Cloud-native computing foundation (CNCF) hosted serverless approaches like Kubeless ([[https://kubeless.io](https://kubeless.io)]([https://kubeless.io](https://kubeless.io))), Knative ([[https://knative.dev](https://knative.dev)]([https://knative.dev](https://knative.dev))), or OpenWhisk ([[https://openwhisk.apache.org](https://openwhisk.apache.org)]([https://openwhisk.apache.org](https://openwhisk.apache.org))) make use of containers to package and deploy functions. Thus, it seems likely that containers might evolve as the de-facto deployment unit format not only for microservices, but also for functions.