Before we explore some ways to implement microservices, we should first review some questions that need to be answered as early as possible. If you are more familiar with large “monolithic” applications, moving to microservices can be easy at first, but without proper planning, can cause considerable frustration later on.
Q1: What technology or technologies are you going to use or need?
From a technology perspective nginx has a good series out that can start describing the pieces you will need to consider
Q2: What changes will you need to make to your software design process?
Moving towards a more Domain Driven Design process can also help you find the proper boundaries for your services.
Q3: Can your company support microservices?
You may need to examine your business processes.
Microservices may require you to embrace more of a DevOps or NoOps culture.
I love how simple the world works.
On the drive into work, traffic is always moving perfectly.
When I arrive at my desk, I have all my previous days tasks completed, and all of today’s tasks prepared.
Everytime I send someone an email, I receive an instant response and it always contains the information I needed.
Meetings start on time and everyone invited shows up prepared.
I doubt any person in the world could actually say their days were like that, but many times this is how we design software.
We expect that everything will always run in a reliable and calculated way.
I have seen very skilled and talented developers hit a mental roadblock when they move from synchronous systems to asynchronous ones.
Keep in mind that the real world forces us to cope with the unexpected every day. You can not safeguard your systems from all failures, delays or other unexpected errors. You can however put plans in place to cope with these events.
Do not ignore the complexities of asynchronous systems, deal with them head on.
As a benefit, your systems will model explicitly these coping and reconciliation scenarios.