Especializarse en microservicios ¿ Qué aprender en el 2021 ?

La carrera de un desarrollador de software es tan compleja como la de un médico, en el aspecto que debe estar aprendiendo y actualizándose constantemente. Cada día salen librerías, herramientas, marcos de trabajo y de forma general tecnologías nuevas que amplían el ecosistema de soluciones demandadas en el mercado laboral.

En esta entrada hablaremos de aquellos principios, patrones y por último de herramientas para aprender en el 2021 para especializarse en el desarrollo de arquitecturas basadas en microservicios.

Principios y patrones

El primer aspecto, más importante y probablemente menos tenido en cuenta en el proceso de enseñanza de un desarrollador de software, es aprender los principios básicos del buen programador y los patrones que guían el desarrollo de software y el desarrollo de microservicios en particular.

En cuanto a los principios que un desarrollador debe conocer y saber aplicar (o identificar) están los siguientes. Es de destacar que muchos de estos principios o prácticas forman parte de “Clean Code“, resumidos en el libro de igual nombre de Robert C. Martin.

Principios SOLID

Son un grupo de principios aplicables en el ámbito del paradigma de programación Orientado a Objetos con el objetivo de lograr aplicaciones extensibles, entendibles y mantenibles en el tiempo, básicamente son 5 principios fundamentales que no detallaremos en esta entrada, solo los mencionaremos:

  • S: Single responsability, principio de responsabilidad única.
  • O: Open-closed, principio de abierto cerrado. Las entidades deben estar abierta para extensiones y cerradas para modificaciones.
  • L: Liskov substitution principle, principio de sustitución de Liskov, asociado al principio de diseño por contratos.
  • I: Interface segregation, principio de segregación de interfaces. Muchas interfaces diferentes, acorde a su objetivo es mejor que una interfaz única.
  • D: Dependency Inversion, principio de inversión de dependencias. En esencia se debe depender de abstracciones y no de entidades concretas.

Principios KISS, DRY, WET & YAGNI

En esta entrada puede encontrar más información y ejemplos sobre estos principios.

Patrones de diseño de software

El desarrrollo de microservicios debe partir de aplicaciones internamente bien diseñadas y estructuradas, la buena calidad interna de cada servicio contribuirá a la estabilidad de los microservicios en su conjunto. Es por ello que si desarrolladas microservicios debes tener claro y saber aplicar este grupo de patrones.

Los patrones de diseño de software los podemos categorizar de acuerdo a la siguiente imagen:

Ruta de aprendizaje desarrollador microservicios

Por cada categoría algunos de los patrones que debes conocer y saber aplicar se mencionan a continuación.

  • Arquitecturales
    • Modelo vista controlador.
    • DAO
    • DTO
    • Data Mapper
    • Hexagonal Architecture.
    • Event sourcing / Event driving.
    • Layers
    • Repository
    • Unit of work.
    • Model View Presenter
  • Comportamiento
  • Creacionales
    • Abstract Factory
    • Builder
    • Converter
    • Dependency Injection
    • Factory
    • Object Pool
    • Value Object
    • Singleton
  • Concurrencia
    • Async
    • Leader election
    • Reactor
    • Thread pool
    • Event Queue
    • Producer consumer
  • Funcionales
    • Filtered
    • Collection Pipeline
    • Fluent Interface
  • Estructurales

Patrones de diseño de microservicios

Una vez que sepamos construir aplicaciones aplicando los principios y patrones adecuados, entonces veamos los patrones específicos que debemos tener en cuenta para el desarrollo y puesta en producción de microservicios.

Hemos agrupado los patrones de microservicios bajo las siguientes categorías.

Patrones para la implementación de una arquitectura microservicios

Sobre cada uno de estos patrones hemos abordado en nuestro libro Patrones para la implementación de una arquitectura basada en microservicios, que te invitamos a leer.

Tecnologías para aprender

Si bien los principios y patrones son independientes de una tecnología en particular (y por ello están enunciados primero en este artículo), existen un grupo de herramientas y lenguajes que te sería útil conocer, pues poseen implementaciones con un enfoque hacia la arquitectura microservicios.

DISCLAIMER: Las herramientas que mencionare a continuación son basadas en mi experiencia y criterio personal, no pretendo ser absoluto.

Lenguajes de programación y marco de trabajo

Recomiendo especialmente Java y Kotlin (sí, Kotlin para el backend). Ambos lenguajes pueden ser usados en el desarrollo con dos de los mejores frameworks con los que he trabajado: Spring/Boot y Vert.x.

Spring Boot por su parte es un proyecto de Spring, que incluye un grupo de mejoras. A su vez sobre la base de Spring Boot se construyó Spring Cloud, la solución que creo es más completa y sencilla para implementar microservicios. Spring Cloud posee herramientas que implementan la mayoría de los patrones explicados anteriormente.

Spring Cloud. Fuente: Sitio web del proyecto

Vert.x, por su parte no es un framework en sí, sino un toolkit que cuenta con el soporte de Eclipse (y de la comunidad) para el desarrollo de aplicaciones reactivas no bloqueantes. Implementa el concepto de Verticles e internamente la comunicación se basa en el paso de mensajes a través del Event Bus (su sistema nervioso central). El performance de Vert.x es impresionante.

Herramientas

Además de las herramientas que ya propone Spring Cloud y que se encuentran listadas acá, recomiendo el uso de las siguientes:

  • Apache Kafka, para bus de mensajes.
  • Apache Zookeeper, leader election y configuración centralizada.
  • Redis, cache distribuida, publicador/suscriptor y bloqueo distribuido.
  • ElasticSearch, almacenamiento distribuido, búsquedas escalables, centralización de logs, información geográfica, etc.
  • MySQL, PostgreSQL, base de datos relacionales.
  • Apache Cassandra, Manejo masivo de información distribuida.
  • ELK o TIG, dashboard, monitorización y APM en general.
  • Keycloak, implementación de Oauth2, protocolo e implementación para la autorización y autenticación.
  • Docker.
  • K8s.
  • Service mesh, ej: Istio

Proveedor de servicios cloud

En los últimos años todos los servicios se están moviendo hacia la nube por ello es importante que conozcas y tengas un buen desempeño en alguno(s) de los proveedores cloud del mercado. Los tres más populares son: Amazon Web Services, Microsoft Azure y Google Cloud Platform. Dichos proveedores cloud dan muchas herramientas de reemplazo a las mencionadas anteriormente como auto-gestionadas, lo que libera bastante la gestión de la infraestructura.

Te contamos, todo esto en nuestro canal de Youtube.

Patones para microservicios
Tecnologías

Espero te ayude esta entrada a que encuentres el camino para convertirte en un desarrollador de microservicios. Recuerda esta es mi experiencia y no es el único camino.