%%
date:: [[2023-04-25]]
parent::
%%
# [[Microservices]]
Microservices are [[Principle of Atomicity|atomic]] processes that are independently deployed but usually interact with each other to form a single application or system. Microservices-based architectures are in direct opposition to [[Monolith]]s, which are applications whose processes are tightly [[Decoupling|coupled]].
A microservice is a "minimal independent process interacting via messages". [^prakash]
Exposing API endpoints for every microservice is an essential part of this type of architectural pattern. APIs allow microservices to communicate with each other in a common language despite their function in the overall system.
Microservices are an implementation of [[Service-oriented architecture]]. [^prakash]
## [[Advantages of microservices]]
## [[Disadvantages of microservices]]
## [[Microservices vs Monoliths]]
## Concerns in implementation
### The [[Circuit breaker pattern]] needs to be implemented
The structure of microservices requires the institution of a type of circuit breaker to prevent [[Retry storm]]s and [[Cascading Failures]].
- A [[Load Balancer]] (such as an [[Ingress Controller]]) can be used to manage traffic
- [[Dimming]] can be introduced to preemptively fail requests faster, in the form of a [[Reverse Proxy]] like [[Kubedim]]
### [[Conway's Law]]
Conway's Law states that the structure of the architecture designed by a team is, to some degree, affected by the structure of the team itself. When implementing a microservices design, consider whether the team structure matches the design enough to be able to maintain the system.
### Observability is more important than ever, and also more complex
New approaches to [[Observability]] and [[Monitoring]] may be required by some complex microservices-based systems. For example, [[eBPF]] monitoring may be easier to implement than [[Instrumentation]].
## Criticisms of the term
Ben Nadel points out [^invision] that the term "microservices" is a misleading term because "micro" implies that services must be small. Instead, he suggests that services should be "right-sized", or sized appropriately for the situation. ^e45d5a
## [[Testing microservices]]
[^invision]: Nadel, B. (2018). _Why I've been merging microservices back into the monolith at InVision_. Retrieved from [https://www.bennadel.com/blog/3944-why-ive-been-merging-microservices-back-into-the-monolith-at-invision.htm](https://www.bennadel.com/blog/3944-why-ive-been-merging-microservices-back-into-the-monolith-at-invision.htm). [[Why I've Been Merging Microservices Back Into the Monolith at InVision]]
[^prakash]: Prakash, S. (2017). _Performance testing of event-driven microservices_. Retrieved from https://medium.com/capital-one-tech/performance-testing-of-event-driven-microservices-f5de74305985 . [[Performance Testing of Event-Driven Microservices]]
Not found
This page does not exist