What is Cloud Native?
If you work in software development, or even just have an interest in tech, then you’ve probably heard the term ‘Cloud Native’ mentioned increasingly often over the past few years. But what does cloud native actually mean, and how is it different from cloud-enabled, cloud-first, or any other cloud-[insert adjective here] approach?
Definition
The Cloud Native Computing Foundation (CNCF) defines cloud native as “using an open source software stack to [build applications that are] containerised, dynamically orchestrated and microservices-oriented”.
Which is great, as a textbook definition. But all that jargon raises more questions than it answers for a lot of people. So we spoke to some of the Bytemark team to find out how they would define cloud native:
“It’s a service that’s totally platform and hardware independent. Your development setup is effectively identical to the live environment. You simply ‘deploy’ as many copies of the live instance as you need to scale up or down to the load you have. This means you never have significant resources wasted.”
Paul – Support Team Leader
“I don’t like the term “cloud native”. I feel like it’s a bit of an ambiguous slogan that gets banded around. But, from a technical point of view… I’m all for containerisation and orchestration. Docker, Kubernetes etc. are excellent tools and are really pushing the industry forward in new directions. They’re a great complement to virtual machines (VMs) and configuration management – can pick the right tool for the job.”
Ian – Platform Manager
Their varied responses demonstrate that giving a single, concise definition for a concept like cloud native can be difficult. The key point to understand though is that cloud native refers to how applications are built and deployed rather than where. It goes beyond simply hosting your applications on a cloud platform and requires teams to utilise the full advantages of cloud computing technology in all aspects of the development process.
Cloud Native Development
So, cloud native is all about considering the nature of cloud services when you build applications in order to make use of their advantages. Great! Now how do you actually go about doing that?
As a starting point for implementing a cloud native architecture, it is useful to refer back to the original CNCF definition we discussed earlier. This outlines some of the key elements you will need to incorporate to achieve cloud native development:
- Microservices – Instead of building monolithic applications where every feature and service is included in a single codebase, each feature forms an individual microservice. For example, if you run a blog you could have one microservice for your sidebar menu and another for your newsfeed. This better reflects the distributed nature of the cloud.
- Containers – A container is created for each microservice. This provides a standardised structure and contains all the pre-built components that can be layered together to build up application images. There are several containerisation tools available, but around 95% of the market currently use Docker.
- Orchestration – You will also need a way of managing your containerised workloads in a dynamic cloud environment. Kubernetes is one of the most popular platforms available for automating deployment, scaling, and management of containers in response to external changes.
Key Features of a Cloud Native Application
If you’re unsure whether an application can be classed as cloud native, here are 4 attributes to look for:
- Scalability: User requests and CPU usage are monitored so that available resources can be increased or decreased as needed.
- Redundancy: Containers are duplicated across multiple servers to protect against hardware failures.
- Automation: Due to the infrastructure in place, a lot of processes can be automated.
- Abstraction: They can run on a range of operating systems and machines, rather than being designed for one specific setup.
There’s an increasing number of events focusing on cloud native technology if you’re looking to learn a bit more before you adopt the approach. Have a look at our roundup of the top 10 conferences & meetups for 2019.
Why Cloud Native?
Updating your infrastructure and design processes for development may seem like a huge task. However, the sheer rate of cloud native adoption among companies of all sizes and types, and their emerging results, show that the benefits offset the cost. Here are some of the positive outcomes businesses have achieved:
- Ship features faster – By moving from a monolith to around 150 microservices, the Financial Times were able to reduce deployment time from 120 days to 15 minutes!
- Reduced Costs – Containers are very lightweight so you can store more on a single server when compared to virtual machines. Plus, because resources are used more efficiently you only ever pay for what is actually being used.
- Higher availability – Redundancy and a microservices architecture allow you to reduce downtime. Need to carry out maintenance? Spin up a duplicate of the relevant containers and work on them without affecting the live version.
- Be Prepared – Thanks to the automatic scaling of resources, you are prepared for any sudden changes in demand. If traffic spikes because your company is mentioned tv, simply scale up the number of containers. A load balancer will take care of distributing traffic appropriately to maintain site speed.
Together, all of these advantages allow IT to become a tool for business growth. You can go from idea to application more quickly and with fewer risks.
Are you using cloud native? We’d love to know what works best for you! Or, email us to see how Bytemark can help you to get the most out of cloud native technology.