Empezando mi propio proyecto 🚀
Tags: microservices, docker, kubernetes, startup
Published: 2021-11-02 21:25:57

Muchas veces tenemos buenas ideas y no la empezamos porque es muy ambicioso, o por falta de dinero, por falta de buenos contactos y principalmente por el miedo de fallar. 

Pues a hora pienso diferente, estoy en un momento de mi vida que veo el fallar como parte del proceso. Pero siempre intentando prever los problemas, sabiendo que por más que uno se prepare la tempestad vendrá mas tarde o temprano.

Actualmente tengo tres ideas de proyecto, entonces pensé en crear una arquitectura que se pueda pivotar sin afectar otras cosas ya desarrolladas.

Preguntas que me venían en la cabeza como:

**Como puedo construir una aplicación que se pueda reutilizar en diferentes proyectos?**
✨ Con micro servicios.

**Como puedo construir un micro servicio separando las reglas de negocio con la tecnología?**
✨ Arquitectura DDD.
 
**Como puedo comunicar mis micro servicios con alta performance?**
✨ Protocolo gRPC.

**Y para informaciones que no tengo tanta urgencia, como gerenciar una gran cuantidad de mensajes de forma distribuida?**
✨ RabbitMQ.

**Como puedo multiplicar mis micro servicios en caso que aumente mi demanda?**
✨ Docker y Kubernetes.

Después de pensar mucho, llegue a esta arquitectura, donde cada microservice esta contenido en un Docker, y todo gestionado por el Kubernetes.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pmj1kb0eczx6vbbmitdb.png)

Voy a dejar el Kubernetes por ultimo, por a hora me voy a focar en crear los micro servicios conversando por una camada de protocolo llamada [Protocol Action](https://www.npmjs.com/package/action-grpc), más detalles cuento [aquí](https://dev.to/julioacontreras/action-protocol-abstract-layer-to-works-you-microservice-5d4h). 

Dividí los microservicios en dos tipos: agiles y de almacenamiento.

**Micro servicio agiles**

Son los micro servicios que necesita dar una respuesta inmediata al usuario. Para esto añadí la tecnología Redis, poniendo la información en cache. Estos contenedores serán de tipo worker, eso significa que dependiendo de la demanda Kubernete tiene el control para crear mas o menos instancias. 

**Micro servicio de almacenamiento**
  
Son los micro servicios que necesita persistir la información. Como tienen que interactuar con el disco duro terminan siendo mas lento, pero necesarios. Estos contenedores estarán categorizados por Kubernetes como main, eso significa que se mantendrán fijos, no se pueden destruir, diferente de los workers.   

**Métricas**

En cada micro servicio tendrá un endpoint para Prometheus poder leer la información y repasar para Graphana poder demonstrar estos datos de una forma visual. El ***protocol action*** crea un standart entre los microservicios, facilitando el envió de los datos para monitorización de los totales y tempo de requisiciones.

**Evolución** 

Un micro servicio ya esta disponible, dale estrellita y fork, eso me ayuda mucho. https://github.com/julioacontreras/authenticator-storage

Por a hora es esto, voy a intentar hacer posts semanalmente, pero es muy importante el feedback de ustedes. Si te interesasteis clica en **subscribirte** y **corazón** para saber que quieren más contenido como este.

Pueden entrar en contacto por [linkedin](https://www.linkedin.com/in/julio-contreras-6579b623/) para cualquier duda o sugestión.
Hasta luego y no dejen sus proyectos para después! 😀