Como hacer crecer una idea o producto saludablemente desde el punto de vista tecnológico con recursos limitados
Convertir una idea en un producto escalable presenta numerosos desafíos. En este blog, explicaremos cómo nuestro equipo en algunos proyectos ha logrado una transición efectiva hacia una arquitectura de microservicios, permitiendo no solo maximizar la eficiencia del equipo, sino también mantener los costos de infraestructura al mínimo, ideal para equipos con presupuestos y personal limitado o en sus etapas iniciales.
Comenzando con un Monolito
Estrategia Inicial:
Al iniciar un proyecto tecnológico, es frecuente encontrarse con diversas incertidumbres respecto a la elección de la mejor arquitectura o tecnologías a emplear. Aunque la tentación de adoptar las arquitecturas de gigantes tecnológicos como Google o Amazon, hacerlo en las etapas iniciales podría resultar en un esfuerzo innecesario y desenfocado de los objetivos del negocio, especialmente si el equipo carece del expertise adecuado.
Una estrategia que hemos encontrado efectiva es comenzar con una arquitectura monolítica, pero pensando desde el inicio en cómo se podría descomponer en el futuro, estos son los puntos claves que desde el inicio nos han ayudará a lograrlo:
- Core de negocio agrupado bajo un prefijo común para el routing de tráfico, ejemplo: /api/monolito/v1.
- Autenticación y tareas programadas (cron jobs) manejadas fuera del monolito, esto lo que nos ayuda es a poder agregar escalado horizontal, sin temor de que los crons se ejecuten múltiples veces y que nos pueda causar algún daño por ejemplo si tenemos un cron que todas las noches realiza cobro de suscripciones, si tenemos múltiples nodos generamos múltiples cobros si escalamos, en el caso de autenticación separada nos permitiría agregar nuevos servicios sin necesidad de reconstruir para cada nuevo servicio.
- Evitar el almacenamiento de datos en disco, optando solo por almacenamiento temporal, esto nos permitirá agregar fácilmente escalado horizontal, si se necesita storage persistente s3 puede ser la mejor alternativa para almacenar los archivos.
- Dockerización para estandarizar y facilitar el despliegue de los servicios.
Por ejemplo podemos iniciar como un par de servicios inicialmente en ec2 dockerizados, y con una API gateway que nos sirva con propósito de autenticación y routing, para este podemos utilizar desde servicios open source como KrakenD, Traefick o incluso una propia implementación con lenguajes como GoLang o Rust que se pueden crear servicios con buen rendimiento y que cumpla con estos objetivos.

Posteriormente, se podría adoptar servicios en ECS que nos permite implementar autoescalado y enrutamiento a través de Application Load Balancers, ECS puede ser una buena opción, ya que la orquestación de los contenedores y balanceadores es gestionada completamente por el proveedor de servicios en la nube, liberándonos así más tiempo para enfocarnos en el desarrollo del producto en lugar de mantener un clúster.

Vamos a suponer que el servicio de órdenes se empieza a degradar ya sea por la estructura actual de la base de datos o arquitectura del proyecto actual, por lo cual se crea un nuevo servicio con una nueva arquitectura nuevo modelo datos etc., y para la infra lo único que sería agregar una nueva ruta /api/orders/v1 para que el tráfico llegue al nuevo servicio

Con esta arquitectura ya se puede llegar soportar miles de usuarios ahora el siguiente paso es pensar en nuevos retos como, comunicación servicio a servicio, utilizar protocolos como grpc, utilización de diferentes tipos de nodos para servicios como machine learning o como instalar herramientas open source para diferentes objetivos de negocio ya en este punto kubernetes es una herramienta que facilitara el trabajo y usando servicios gestionados como EKS (Elastic Kubernetes Service), GKE (Google Kubernetes Engine), AKS (Azure Kubernetes Service) son buenas opciones a contemplar para nuestras cargas y evolución.

Conclusión:
Si cuentas con experiencia en Kubernetes y no enfrentan restricciones de tiempo, presupuesto y conocimiento, Kubernetes podría ser la opción ideal para tu proyecto. Sin embargo, si operas bajo limitaciones de recursos, tiempo y conocimiento, es recomendable comenzar con servicios gestionados y soluciones sencillas. Es crucial recordar que cuando se están validando y probando ideas nuevas, lo más importante es encontrar maneras de entregar valor rápidamente. Por ello, te recomendamos utilizar servicios gestionados. Si la idea resulta exitosa y funcional, entonces contarás con los recursos, el personal y el tiempo necesarios para desarrollarla más a fondo.
En Cactus.Cloud, nos comprometemos a compartir nuestras experiencias y proporcionar una plataforma que facilite una evolución saludable. Nuestro objetivo es ayudarte a avanzar desde una máquina virtual a unos cuantos contenedores hasta incluso clusters de Kubernetes, donde puedas gestionar eficazmente tus cargas de trabajo.
Únete ahora y empieza optimizar tu infraestructura Book a Demo.