By this time now, I guess you have already heard about Cloud technologies and all the benefits that brings to corporations of all sorts (Although there isn’t a consensus on the market what Cloud really is and to make worse, several vendors has their own way to pitch it).
Anyhow, if you can agree Cloud technology brings business agility by fast provisioning, enabling elastic resources whenever you needed, then you’re half way there. However, all Cloud offering in the market tends to cover infrastructure first and going all the way up in the stack, which eventually Developers will face all this paradigm shift one day.
If you a Developer and you’re wonder about this question, then I am pretty sure you’ve wondered about this question.
Today, chances are an application was developed in a Monolith way, which was fine by the time. Mostly of your code was developed in one computer language, in one single version and running on top of some sort of a container.
The benefits of doing everything in that way is keep the whole application in control of the developer. However, as many of us has experienced, as time goes by a single application can be changed by a dozen developers, which turns the whole architecture very difficult to maintain.
On top of that, the only way the application to scale it’s to add more containers with the same application, hopes both nodes are ready to run on a cluster and, it’s going to run with no matter number of users requesting the application. Very inefficient indeed !
With the DevOps approach coming along and Cloud technologies, another way to think in the same application it’s to split each little part in Business Capabilities, as show below:
Once each part of the application is running on top of its own container, the whole application it’s going to resemble pretty much of a webpage is today: a group of different little services. No only that, the main benefit it’s to be able to rewrite the whole microservice very fast and in different computer languages or in different versions of the language.
According to Martin Fowler, which has maintain a blog about the subject, says that the characteristics of a Microservices are:
- Componentization via Services
- Organized around business capabilities
- Products not Projects
- Smart endpoints and dump pipes
- Decentralized Governance
- Decentralized Data Management
- Infrastructure Automation
- Design for failure
- Evolutionary Design
It’s easy said than done. What makes the whole thing little tricky it’s the amount of automation needed to enable DevOps (and hence Microservices in the process) and keeping a whole process with constant feedback as shown:
I suppose there are several tutorials out there in how to download, install and setup a whole environment to enable DevOps in your organization. However, there is an easy way (and luckily for us) it totally Open Source:
OpenShift it a PaaS (Platform-as-a-Service) from Red Hat with all the necessary tooling in one single platform to enable DevOps and Microservices in a very easy way. There is a Online version which it’s costless and lets you play with up to 3 gears (or containers).