%% 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]]