Esta es una pregunta donde muchas personas difieren entre si, ya que diferentes usos de la arquitectura han generado variantes las cuales tienen patrones y antipatrones muy marcados que llegan a ser confusos para quien quiere tener una concepcion de la tecnologia la definicion que hoy voy a dar de microservicio es para aquel publico que esta iniciando y asi mismo le ayude a entender que son y cual es la razon de ser de estos.
Es una arquitectura que busca dividir las funcionalidades de un sistema entero en pequeños segmentos que tienen la habilidad de comunicarse entre si, operar descentralizada y autonomamente.
Los beneficios mas visibles de esto son:
- Escalabilidad
- Redundancia
- Performance
- Autonomia
- Service Degradation
- Reusabilidad de Codigo
Las desventajas son las siguientes:
- Dificil monitoreo
- Complejidad al implementar pruebas
- Sistemas transaccionales
- Mantenimiento
Los patrones de diseño son formas en las que se puede emplear cierta tecnologia que dictan como solucionar un problema de manera optima. Patrones de diseño presentes en los microservicios:
- API Gateway
- Agregattor
- Proxy
- Chained
- Branch
- Shared data
- Asynchronous
- Adapter service
- Anti-corruption layer
- Backends for Frontends
- Bulkhead
- Gateway Aggregation
- Gateway Offloading
- Gateway Routing
- Sidecar
- Strangler
- Event Driven
- Saga
- Observer
- PubSub
- Data Driven Migration
- Functionaly First, Data Last
- The Timeout AntiPattern
- Using the Circuit Breaker Pattern
Golang permite intercomunicar pequeños servicios http/https entre si y se tiene mucha de la funcionalidad en el core, entonces muchas veces el mismo lenguaje te puede proveer de las herramientas, con un performancce de una aplicación compilada ademas de los features por los cuales es bien aceptado.
- Concurrency
- Parallelism
- Multithread
- High Level abstraction
- Memory Optimization
- Extensible