How can you exploit the efficiencies of building flexibility, scalability, and resilience in modern software applications?
In the current climate of the increased cost of ownership of the software and the hardware required to run it what are the obvious solutions?
Cloud Native applications are an obvious contender for consideration.
Cloud-native is a modern approach to building and running software applications that exploits the flexibility, scalability, and resilience of cloud computing. Cloud-native encompasses the various tools and techniques used by software developers today to build applications for the public cloud, as opposed to traditional architectures suited to an on-premises data center.
The Cloud Native Computing Foundation (CNCF) defines cloud-native a little more narrowly, focusing on application containerization — where applications are broken down into microservices and packaged in lightweight containers to be deployed and orchestrated across a variety of servers.
In the CNCF’s own words: “Cloud-native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds.”
Cloud-native app development typically includes marrying microservices, cloud platforms, containers, Kubernetes, immutable infrastructure, declarative APIs, and continuous delivery technology with techniques like DevOps and agile methodology.
This shift in popular software development techniques has seen a new landscape of predominantly open source tools emerge. The CNCF maintains an
This shift in popular software development techniques has seen a new landscape of predominantly open source tools emerge. The CNCF maintains an interactive graphic of this ecosystem.
There are four layers to cloud-native computing that are important to understand:
The application definition and development layer. The top layer of the cloud-native stack focuses on the tools used by developers to build applications, such as databases, messaging systems, container images, and continuous integration and continuous delivery (CI/CD) pipelines.
The provisioning layer. The provisioning layer of the cloud-native stack includes anything required to build and secure the environment where an application will run, ideally in a repeatable fashion. In the cloud-native world, this typically involves treating infrastructure as code, storing images in a repository, automating builds, and addressing application security needs with vulnerability scanning, key and policy management, and authentication tools.
The runtime layer. The runtime layer concerns anything associated with the running of a cloud-native application, such as the container runtime—which still tends to be Docker—as well as storage and networking.
The orchestration and management layer. The orchestration and management layer brings together the tools required to deploy, manage, and scale containerized applications, including orchestration and scheduling. In most cases, that means Kubernetes—as well as service discovery, service proxy, API gateway, and service mesh.
Outside these layers, it is also important to implement observability practices, so all these services are monitored effectively. Some organizations also opt to bring their stack together into a self-service internal developer platform or to purchase an opinionated platform as a service (PaaS) from a vendor to ease adoption for developers.