Friday, September 4, 2020

Cross cutting concerns in Microservices Architecture

 Here's the list of cross cutting concerns/Common platform services:

  1. Logging & Tracing
  2. Exception Handling
  3. Caching
  4. Swagger documentation
  5. Health Check
  6. Dapper
  7. ISC (Inter service communication)
  8. Resilience
  9. Email
  10. KeyVault

 

Notes:

Logging & Tracing - Azure Application Insights

Caching - Azure cache for Redis

Swagger - Swashbuckle & ASP.NET Core

Health Check - in ASP.NET Core (HealthStatus.Healthy, Unhealthy, Degraded)

Dapper - Micro ORM for Azure SQL

ISC - Inter service communication  (HttpClient.GetAsync(url))

Resilience - Circuit breaker/polly framework

Email - SendGrind

KeyVault - Azure Key Vault


Sunday, June 14, 2020

When will you go for microservice & when will you go for monoliths?


If your company does not have appetite for below, then do NOT go for microservices

  • Rapid provisioning (Infrastructure)
  • Basic monitoring
  • Rapid application deployment (deployment as well as rollback)
  • DevOps culture

Another very important point is, if you cannot define the service boundary right at first place, then it will be very difficult to fix later in microservices.

Disadvantages of Microservice


Complexity – Microservices are distributed systems. Application needs to make remote calls. And remote calls tends to fail. This brings in complexity.

Consistency – Each microservices has its own data store. Hence only eventual consistency is possible.

Transactions – Managing transactions needs additional efforts.

Domain boundary – If you have defined the domain boundary (bounded context in DDD) wrong in first place, then it’s very difficult to fix in Microservice.

Advantages of Microservice


Scalability – It’s easy to scale in or scale out services depending on business need. Also doesn’t have to scale the entire application.

Availability – even if one service is down, application can be functional.

Partial deployment – it’s possible to deploy changes to specific to a microservices. This is faster compared to deploying the entire application.

Independently upgradable – each microservices are like components, it’s possible to independently upgrade or replace them.

Multiple platforms/technology - software development can be done using different technologies.  (Polyglot)