Home > Net >  Is there a specific standard to follow to therefore call something a"Microservices Architecture
Is there a specific standard to follow to therefore call something a"Microservices Architecture

Time:03-12

In the past I worked with what I believe were "microservices". We had a service discovery and the applications communicated with each other through REST sync calls, which I believe is called request / response.


Now we are working on an application that is simply broken down into multiple small applications which work together through publish / subscribe using Kafka, there's no direct communication between them nor a service discovery, per say.

Is it safe to say that these are "Microservices" too or what should I call them?

CodePudding user response:

As one commenter pointed out- An answer will always be opinionated (and stackoverflow is generally not the best place for opinion based questions), but I am not afraid to give mine in an attempt to help.

My view goes along the lines of what Martin Fowler and others have taught us in last decade, as well as the insight from the pioneering work of Werner Vogels at Amazon. Their definitions are that microservices are not a well defined single standard, but an architectural style that can encompass a range of different approaches in distributed computing. What they have in common are the goals of providing scalability in many different dimensions, but mostly system complexity, organizational productivity, throughput and resilience - All while being affordable. To achieve that the designs should be centered around:

  1. Service boundaries cut according to business goals (a type of Domain Driven Design).
  2. Sizing / Scope of services to be limited (the famous two-pizza team size idea).
  3. Clear separation in terms of organizational responsibilities and maintenance. This includes independent teams and release-/ maintenance cycles for each service.
  4. Embrace of automation on all layers (how cloud virtualization, devops, CICD, infrastructure as code, etc. became popular tools).
  5. Design focus on failure-resilient operation, e.g. avoid cascading failures, defined failure states, fallbacks, etc.

A consequence of those goals is also the embrace of distributed system architectures and design for horizontal scalability (statelessness, separation of compute and storage, etc.).

So if you feel your designs are along those lines then in my opinion you would have applied the microservices architectural style successfully.

If you want to learn more about this school of thought I recommend this read.

  • Related