miércoles, 26 de marzo de 2014

¿Cuánto cuesta tener una aplicación en la nube? (Windows Azure)


Mucho se habla de los beneficios y flexibilidad que brinda migrar nuestras aplicaciones a la nube (cloud), pero para muchas personas es desconocido el real costo de tener un servicio en la nube que se factura mensualmente, es por esto que vamos a explicar en un ejemplo simple cómo calcular los costos asociados a una nueva aplicación.

El método es parecido en diferentes proveedores de plataformas en la nube, pero vamos a hacer el ejercicio usando Windows Azure. Microsoft provee un sitio muy bien documentado y detallado de los precios de los diferentes componentes que podemos utilizar en nuestras aplicaciones.

Para poder cuantificar el costo debemos tener 2 cosas en consideración:

1.- Al definir la arquitectura de una aplicación en la nube, ya no solo debemos tener en cuenta el mejor desempeño de la aplicación, los mejores componentes que optimicen los tiempos de desarrollo o del proyecto completo, sino que también los costos de estos componentes. Un ejemplo de esto, es una aplicación donde debemos almacenar registros con información, lo más normal es pensar en el uso de una base de datos transaccional y almacenar ahí la información, pero si revisamos el precio del servicio SQL Database tiene un precio mensual de $9.99 USD desde 100 MB a 1 GB y el valor de almacenar en una Tabla del servicio de Storage es de $0.007 por GB +  $0.005 por 100.000 transacciones.

Si debemos almacenar 500  megas de registros, en el servicio SQL (PaaS) de Azure nos saldría $9.99 USD, pero en el caso de ocupar "Table Storage" nos saldría $0.012 USD al mes. Y la diferencia se hace mayor a medida que la información que almacenemos crezca.

Esta modificación del diseño puede tener impacto en el performance de la aplicación y los tiempos de desarrollo, por lo que hay que considerar (como en todo) los costos versus los beneficios.

2.- Desarrollar aplicaciones en la nube es parecido a desarrollar aplicaciones tradicionales, la base tecnológica es la misma, pero hay que tener en consideración componentes que son propios de plataformas de cloud computing y que no existen (normalmente) en un ambiente de empresas, hosting o nuestros servidores.
Windows Azure cuenta con servicios Storage, redes, Mobile, Media, etc. que podemos utilizar para desarrollar nuestras aplicaciones, integrarlas con nuestros sistemas y mejorar la experiencia para nuestros usuarios. Por otra parte hay patrones de diseño, mejores prácticas y arquitecturas propias de la nube que debemos conocer, para poder sacarle mejor partido a las plataformas o evitar cometer errores.

Ejemplo:

Para el siguiente ejemplo vamos a considerar los siguientes requerimientos:

  1. Aplicación Web
  2. Se requiere almacenar datos en una BD - 1 GB
  3. Se requiere almacenar documentos y archivos - 1 TB
  4. Tráfico de entrada y salida de los servicios.


Solo vamos a comentar estas variables para simplificar la toma de decisión.


  • (1) Solo para el primero punto tenemos 3 opciones dentro de Azure, usar WebSites (PaaS), crear una máquina virtual donde hostear la aplicación (IaaS) o usar Cloud Services (PaaS)
  • (2) Para almacenar la información en una base de datos SQL tenemos 2 opciones, ocupar el servicio SQL de Azure (PaaS) o usar alguno de los template de máquinas virtual que cuentan con SQL Server instalado.
  • (3) Para almacenar documentos y archivos podemos ocupar el servicio Storage o si hemos instalado una máquina virtual podríamos hasta dejar los archivos en el disco, lo que no es recomendable, pero se podría hacer si estamos seguros que en el futuro no vamos a necesitar escalar la aplicación agregando mas nodos o si es una aplicación existente que movemos a Windows Azure.


Cada una de estas opciones tienes costos, niveles de servicios y performance distintos.

El calculo lo podemos realizar manualmente usando Excel, pero generalmente las plataformas de Cloud Computing proveen herramientas para realizar esta tarea:

Calculadora Windows Azure http://www.windowsazure.com/en-us/pricing/calculator/
Calculadora Amazon EC2 http://calculator.s3.amazonaws.com/index.html

Escenario 1 PaaS: Cloud Services (2 nodos)  + SQL Database


Escenario 2 IaaS: 2 Virtual Machine para Aplicación + 1 Virtual Machine SQL Server


Podemos notar que la mayor diferencia de precio se produce al usar el servicio de SQL Database, que es un servicio multitenant (compartido) administrado por Microsoft, versus tener nuestra propia máquina virtual con SQL Server.

En ambos ejemplo pusimos solo los componentes indispensables de la solución, se podrían sumar otros costos a medida que tengamos mas requerimientos y necesitemos usar otros componentes  o si quisiéramos agregar otras funcionalidades.

Otro detalle a tener en cuenta es que hemos calculado con valores de una aplicación existentes, pero la realidad dice que si es una aplicación nueva los valores para los primeros meses (o incluso años) pueden ser mucho mas bajos, si por ejemplo, tenemos pocos usuarios o estamos en marcha blanca y por consiguiente tenemos pocos registros que almacenar, el valor mensual de los primeros meses puede ser muy bajo.

Escenario 3 PaaS - Aplicación nueva: Cloud Services (1 nodo)  + SQL Database


Con estos escenarios podemos decir que usar los servicios de Cloud Services y SQL Database, es mas conveniente, pero hay que destacar que podemos mezclar estos componentes de diferentes y variadas maneras, como por ejemplo usar Cloud Services con SQL Server en una maquina virtual o tener nuestra aplicación en una máquina virtual, pero usando SQL Database. Todo depende de requerimientos técnicos, diseño, costos y funcionales.

Les recomendamos revisar la documentación de precios de Windows Azure.

Los cálculos se han realizado usando los precios al día de la publicación de este artículo y cambian constantemente (generalmente bajan, eso también hay que considerarlo)





1 comentario:

  1. Excelente análisis. Antes de considerar mantener una aplicación en línea, es importante estudiar las ventajas de los cloud servers para saber si es el tipo de alojamiento que deseamos darle o si simplemente es factible o no.

    ResponderEliminar