So the first thing I would like to dig deeper into are microservices.
As I am in touch with some common IT- and tech-magazines and -blogs, I stumbled over that topic again and again, but I never really understood what this hype was all about. Anyhow, it seems that you can’t get around microservices, so I’d like to collect what I figured out about microservices. ( I think one of the earliest famous articles was the one by Martin Fowler: click )
The problem which microservices want to adress is that quite often, the programs in enterprise IT-landscapes are put in one big application. Actually, I have also seen this or some aspects of it in one of the systems I worked with for a long time. And we had the same problem that is described in most articles about microservices: Upcoming changes have always been a mess. Fortunately, our application wasn’t one that was changed every day because it was related to manufacturing where applications need to be quite stable anyhow.
But I understand the general idea that in the internet world, where applications need to gain new features every day to keep up with the competition, it is not practicable to have one huge application that needs to be changed, tested and deployed every day. Not only considering the work load which would leave nearly no time for development because the system would always be in “development freeze” for test/deployment, the simple amount of dependencies would make the application very vulnerable for errors. As a consequence, the team would be scared to implement new features because they know how much work is necessary to keep everything running and how big the risk of an error is.
The software competition doesn’t leave no space for slow movers. Users can choose out of such a variety of apps every day, you need to be on track with your releases to stay up-to-date. Aiming to that high flexibility leads you to a system built of Microservices. They are “loosely coupled [which] means that you can update the services independently; updating one service doesn’t require changing any other services. If you have a bunch of small, specialized services but still have to update them together, they’re not microservices because they’re not loosely coupled.” ( quote from nginx )
some characteristics of microservices are:
- can be written in different programming languages and use totally different technology stacks because the communication between the services is realized via not-proprietary protocols. That gives freedom to play around with new technologies or change the used programming language for one service. Such big changes are impossible with one big piece of software
- can use different storage technologies because they are “independent” from each other. Most of the times, individual storage solutions are the only way to really make the services independent. If they used the same database, changes on the database model or just version would lead to dependencies.
- can be handled by one team (says Netflix, according to embarc.de). That leads also to organizational independency – teams can decide on their own when it makes sense to change and redeploy their service without the need of lot of coordination with other teams.
- Fowler says “a component is a unit of software that is independently replaceable and upgradeable.” The component is then, more specifically, the microservice. ( He describes that more detailed in his article about microservices)
- Scalability is much better than with single monoliths. While monoliths can only be scaled-up by just adding more hardware power to the server or deploying the whole application on multiple servers, microservices allow you to just get more power to the heavily-used functionalities and scale them out on tailor-made servers for this purpose.
I would like to link the websites that I found useful for my research:
- (german) https://jaxenter.de/was-sind-microservices-40571
- (german) https://jaxenter.de/modularitaet-fuer-microservices-es-lebe-das-modul-35972?utm_source=jaxenter.de&utm_medium=referral&utm_campaign=seealso
- (english) https://martinfowler.com/articles/microservices.html
- (english) https://www.nginx.com/blog/microservices-at-netflix-architectural-best-practices/
- (german) http://www.embarc.de/netflix-architektur-blogserie-teil-2-microservices/
- (english) https://dzone.com/articles/adopting-microservices-netflix
- (german) my big door open into the world of Microservices was the book “Microservices” by Eberhard Wolff. I do like the scope of topics, the writing style and the different views at the topic that are covered in this book. If you speak german, I do really recommend it !
( featured article image by Logan Broemer, unsplash.com Logan Broemer )