I was asked the other day what Cloud Native applications means to me. Here is my thoughts:
Cloud Native is applications that fulfill the promise of cloud. They are described using declarative formats for setup and configuration, and have a clean contract with the underlying platform. Cloud Native run on top commodity hardware exposed through virtual interfaces, and can be scaled out and in as needed. The application must rely on open standards, and cannot exist in a proprietary environment.
Cloud Native applications should enable ubiquitous network access, and support logical network perimeters as required. Communication should be resilient, and use of asynchronous calls are preferred.
Resources should be possible to pool across multiple tenants within the same deployment (multitenancy) without the need for dedicated deployments for each tenant.
It collects all required telemetry inside the application and insight into its usage, performance and state. By measuring usage, the application not only give information for tracking statistics or billing, but it also enables general monitoring. Through instrumentation management systems can then interact with the application programmatically.
A Cloud native application supports running upgrades with dark launching, and feature toggles to enable or disable functions within the application. By design the cloud native application can support different versions of its database.
Authentication and authorization is performed using open standards like SAML & OAuth. It has well defined security roles. Data is encrypted using industry standard both at rest and in transit. Available endpoints are both authenticated and authorized. The system must detect, identify and protect itself against various attacks.
High availability is handled by the application, and failures in the hardware layer is expected. The cloud native application does not have a single point of failure, and has well defined failure domains. The different components of the application work through a shared nothing design. Using the data collected from telemetry and instrumentation, the cloud native application should also be able to heal itself.