Moving everything to the cloud is now mainstream, and Cloud Native Development mindset took over.
- It has been successfully marketed as the only solution to every problem.
- No-one wants to work on boring tech anymore.
- It has become a Self-fulfilling prophecy.
What exactly is Cloud Native Development?
Here is the cloud native official definition:
Cloud native technologies empowers organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds.
The key traits are therefore:
- scalable applications
- dynamic environments
- running in “the cloud”
Note that “Running in the Cloud” is not new : only the public cloud is. Having its own cloud-like infrastructure inside its own premises is perfectly valid. The concept is more about moving away from desktop applications1.
What is really changing is dynamic environments, which is mostly about the cattle not pet analogy.
From there, it moves into examples, and common patterns.
- Breakaway from a 3-tier architecture to a collection of micro-services
- Everything is stateless, in order to be scalable at runtime
- Everything is decoupled, in order for be scalable at dev time
Note that yet nothing mandates those patterns. Only the previous traits are strictly part of the definition.
Also in order to implement the required scalability, there is a strong push to move beyond moving away from traditional SQL RDBMS.
Traditional RDBMS are seemingly obsolete…
A standard RDBMS is all about consistency. Which limits its ability to scale since consistency requires synchronisation.
The CAP theorem says that if a system is becoming distributed, it will face consistency issues. This has a profound implication :
If a systems has full consistency, it is not fully distributed.
Note that modern RDBMS can offer scalability at the expense of some reduction of the consistency they offer. Which makes those modern ones very similar to their NoSQL counterparts… With the added benefit of also leveraging a well known API (SQL).
… but hardware improvement happened everywhere.
Performance of modern hardware is now many order of magnitude higher of what it was even several years ago. This led many new architectures to emerge.
Yet, even fully-consistent traditional RDBMS do now scale much bettter than before.
Such vertical scalability is good enough for most of the applications today.
The bar that mandates the need to relax requirements in order to scale is now higher than before. Which enables using old technology for much longuer, on more use cases. And that is a good thing, as old technology is usually much simpler to understand & leverage correctly.
We are going in circles
Thanks to those advances in hardware & software, the initial way to doing Cloud Native is still going very strong.
Even the venerable “3-tier architecture” is much simpler to execute upon, as it doesn’t move the burden of complexity to each and every developer.
And fighting the mental load of every developer is key to successful software.
Similar things can be said about multitenancy. That will be the subject of a future article.
Those that need to be installed on every workstation. ↩