Cloud Native Application
Cloud computing environments are dynamic, with on-demand allocation and release of resources from a virtualized, shared pool. This elastic environment enables more flexible scaling options, especially compared to the up-front resource allocation typically used by traditional on-premises data centers.
According to the Cloud Native Computing Foundation1, cloud native systems have the following properties:
- Applications or processes are run in software containers as isolated units.
- Processes are managed via central orchestration processes to improve resource utilization and reduce maintenance costs.
- Applications or services (microservices) are loosely coupled with explicitly described dependencies.
Taken together, these attributes describe a highly dynamic system composed of many independent processes working together to provide business value: a distributed system.
Distributed computing is a concept with roots stretching back decades. The eight well-known fallacies of distributed computing2 were drafted in 1994, and deserve a mention:
- The network is reliable.
- Latency is zero.
- Bandwidth is infinite.
- The network is secure.
- Topology doesn't change.
- There is one administrator.
- Transport cost is zero.
- The network is homogeneous.
Taking the fallacies into account something becomes clear: cloud native applications run in an environment of constant, unpredictable change, and must expect failures to occur at any time.
1. “Cloud Native Computing Foundation (“CNCF”) Charter”, https://cncf.io/about/charter ↩
2. “Fallacies of Distributed Computing Explained”, http://www.rgoarchitects.com/Files/fallacies.pdf ↩