An Adventure In Microservices

You’re thinking about getting into microservices? I have some hard earned advice for you so you won’t have to repeat them!

You’re building a new system and naturally you’re thinking about using the microservice architectural pattern1. You’ve heard about how Netflix does microservices, how they visualize traffic flowing between services in their backend, and you’ve been wowed by the apparently simple way how you can write new services to replace old ones etc. And you’re right: Microservices are beautifully elegant pattern. The components in these systems are fiercely independent of each other and defined only by their interfaces. They can be scaled independently of each other and most of all; It feels natural to us to build a system this way!

I’ve built a microservice system and it’s in production today! It works beautifully! But we’ve screwed up so many things I have stopped counting all of these screw-ups. Make no mistake; If you choose all the beautiful advantages of the microservices architecture you get the other side the coin as well! Not being aware what is on the other side of the coin will take you by surprise and most probably sink your project!

Buying into microservices forces you to adopt things like structured Logging, Tracing (yes, that’s not the same as Logging!!), SDNs2, Load Balacing, Service Discovery, Health and Readiness Checks, Storage Management, Configuration Management, API Versioning etc. I have not even scratched the surface of what you’ll be forced to deal with!

Microservices with all their beauty have to be payed for with massive investments in the operations processes of your system.

If you’ve read so far and you feel like you may not have thought of some things you should have, STOP driving your systems architecture forward. Any one thing you have failed to consider can and most probably will either kill your product/project or send it massively over budget!

After you’ve done this and you want to learn how to build a microservice system, this blog series is for you! I will show you step by step how you can design and release you first services and move forward from there. I will show you some of the traps and pitfalls I encountered, stumbled into and how I got out of them!

Stay tuned!

  1. this term was initially proposed by Martin Fowler on his blog ↩︎

  2. Software Defined Networking ↩︎