¿Nube, On Premise o VPS?
Si has seguido mis posts desde el comienzo, sabes que me gusta trabajar y desplegar servicios en la nube desde hace algunos años.
He encontrado muchas oportunidades como developer para mejorar los productos que estoy construyendo usando servicios enfocados en “pay as you go” o incluso, servicios que soportan la escala y crecimiento de tu sitio o aplicaciones web.
Probablemente sabes que existen muchos Cloud providers con servicios similares enfocados en fiabilidad, alta disponibilidad, alto performance u opciones de auto escalamiento. Así pues, pensar en alojar nuestras aplicaciones en cualquiera de estos cloud providers nos garantiza que nuestros servicios podrán vivir por mucho tiempo.
Hay algunas cosas a tener en cuenta cuando estamos escogiendo ya sea hospedar nuestra aplicación en un VPS (Virtual private server) donde tu debes que instalar todos los pre-requisitos para correr tu código, o escoger un servicio auto administrado y preparado para la mayoría de los fallos en el mundo del software.
Ahora, revisemos estos 5 puntos que deberías tener en cuenta para subir o no, tu producto a una nube pública:
1. ¿Tu app será consumida por usuarios finales?
No todo el código de internet es consumido por muchos usuarios al tiempo, quizá tú estas trabajando en una tarea recurrente que envía algún email o procesando algunos archivos.
Este tipo de aplicaciones no necesitan una gran infraestructura para poder soportar usuarios. Estos procesos que corren una vez a la semana o mensualmente, en algunos casos es aceptable que estos servicios corran en una VPS configurado con una crontab. No necesitas una nube para hacer todo eso.
Pero, si tus servicios necesitan una cantidad increíble de recursos y hardware para responder a todos tus usuarios, quizá deberías considerar contratar una instancia de EC2 con los suficientes recursos para completar la tarea.
Incluso, hay nuevas formas de contratar servicios en la nube para correr tareas en una instancia con buenos recursos, pagando solo por las horas que tu requieres. (Revisa SPOT instances on AWS).
Usualmente pienso que la mejor opción para correr este tipo de tareas con pocos recursos y recurrente, es escoger una función serverless, que solo tiene el código necesario a ejecutar, y no necesito preocuparme por los recursos, disponibilidad o mantenimiento de la infraestructura.
2. ¿Tienes clientes al rededor del mundo que necesitan el contenido rápido y disponible?
Este es el caso que tenemos cuando nuestro servicio es consumido en muchos países al rededor del mundo. Si quieres alojar tu aplicación en tu propio VPS o Datacenter, tienes que tener muchas cosas en mente para tu servicio. Entre esas, pensar en los tiempos de latencia de enviar el contenido desde la ubicación de tu servidor a la zona geográfica.
Si tu datacenter esta ubicado en Florida USA y tus clientes quieren acceder a tu contenido desde Singapur, ellos probablemente experimenten malos tiempos, recibiendo y cargando tu data.
Para este caso, deberías considerar usar una de las grandes compañías que ya tienen, al menos, un datacenter en cada continente del mundo. Esto te permite estar seguro de que tus clientes estarán solicitando y recibiendo tu información desde la ubicación más cercana a ellos.
Los Cloud providers ya poseen muchas maneras de compartir y replicar el contenido entre diferentes ubicaciones geográficas, usando diferentes formas de redundancia en tus apps, data, servidores o contenido.
3. ¿Tu app será consumida por miles o millones de personas?
Puede darse el caso que tu app vaya a ser consumida por algunos empleados internos de una compañía desde una misma localización que no necesita cantidades asombrosas de recursos para poder darles a todos una buena experiencia.
Como también puede darse el caso en el que tu aplicación sera consumida al tiempo por miles de personas desde una misma ciudad o país, o incluso desde todo el mundo. Lo importante es que una cantidad de trafico gigante, necesita una infraestructura que lo soporte.
Ten en cuenta que miles de usuarios representan miles de queries al mismo tiempo para tu DB, miles de respuestas que recibir y entregar desde tus APIs y es aquí donde perfectamente las opciones de los Cloud providers pueden beneficiarte.
Hay muchas formas en las que puedes configurar tus servicios como bases de datos, servidores virtuales privados o APIS para crecer junto con tu compañía y el trafico de tu servicio.
- Puedes configurar tu base de datos para aumentar la RAM de tu instancia si pasa el 80% de consumo.
- Puedes habilitar nuevos servidores virtuales si los que tienes actualmente están por encima del rango de CPU que tu configuraste.
- Puedes configurar reglas de balanceo de tus solicitudes a diferentes servidores para no centrar todo el tráfico en una sola instancia.
y como estas, más personalizaciones que puedes agregar para soportar fielmente el crecimiento de tus servicios.
Puedes entregarle la responsabilidad de escalar tus servicios (con algunas mínimas configuraciones) a los cloud providers y enfocar a tus equipos o desarrolladores a mejorar la experiencia de los clientes en tu servicio.
4. ¿Necesitas constante monitoreo de tus servicios?
Después de haber pasado por el gran reto de subir desde 0 un servicio a tu propio VPS quieres saber como está funcionando tu aplicación internamente, es decir, debes instalar y configurar más herramientas más para lograr una monitorización efectiva. Algo que no siempre es fácil.
Con los Cloud providers puedes ahorrarte esta tarea ya que la mayoría de sus servicios están dotados de monitorización para conocer como están sus recursos (CPU, RAM, I/O de Disco y más) como también su comportamiento interno: cantidad de solicitudes recibidas, fallidas y exitosas.
Aparte de estas ventajas, también incluyen una serie de alertas personalizables para los servicios que desees usando servicios de Correo o SMS, incluso puedes conectarlo con tus herramientas de trabajo como Slack o Pager-Dutty.
De esta manera, puedes conocer el estado de tus servicios constantemente, comparar datos entre tus recursos, ver el histórico de monitorizaciones y generar alertas simplemente con desplegar tus servicios en los proveedores de nubles publicas que existen.
5. ¿Quieres probar cosas rápidamente?
Este es el TOP numero uno del uso que le doy en mi caso a Amazon Web Services. Es una forma rápida y ágil de probar las ideas que tienes en la mente.
- Si quiero hacer una API en pocos clicks, uso API Gateway.
- Si quiero probar una maquina con muchos recursos por algunas horas, uso EC2.
- Si quiero desplegar rápidamente una pagina web de tus proyectos personales, uso S3.
- Si quiero crear una tarea recurrente, uso Cloudwatch y Lambdas.
- Si quiero implementar una IA para reconocer objetos en imágenes, uso AWS Rekognition.
Los cloud providers han creado pequeños servicios especializados y configurables para que pueda ser usado por cualquier developer. De esta manera puedes probar e incluso desplegar los recursos que quieras con pocos clicks y en muchos casos puedes aplicar a capas gratuitas para reducir el costo de estos servicios.
Gracias por leer este post. Hasta la próxima 👋🏼