amazon web services logoHola a todos, hoy traigo un poco de información relativa a AWS, los famosos servicios proporcionados por Amazon de los que todo el mundo habla desde hace algún tiempo.

¿Que es AWS?

Bien, AWS no es más que un conjunto de productos reunidos bajo un interfaz común y que pueden interoperar entre ellos, al igual que se ha venido haciendo desde hace muuuuucho tiempo con esos mismos (o similares) productos antes de que existiese el famoso AWS. Obviamente, si una sola empresa proporciona todos estos servicios, seguro que se preocupa de que la interoperabilidad entre todos ellos sea excelente, que es lo que sucede con AWS y lo que personalmente pienso ha sido uno de los elementos principales de su éxito junto con la externalización de la infraestructura y la existencia de APIs subyacentes que abarca a todos ellos.

Los ramas principales de servicios que existen en AmazonWS son las siguientes:

  • Servicios relacionados con infraestructura tanto de chatarra como de infraestructura de red
  • Servicios de almacenamiento y de entrega de contenidos
  • Servicios de seguridad e identificación
  • Servicios de BBDD de diversa naturaleza
  • Servicios de análisis
  • Servicios de alto nivel para ser empleados como un producto mas por otros servicios o productos
  • Herramientas de gestión

Ahora entraremos un poco más en detalle a desgranar y comentar sobre cada uno de los puntos anteriores, pero lo importante es que el lector sea consciente de que esa misma infraestructura es la que hemos empleado en mayor o menor medida durante toda nuestra vida y seguro que cuando repasemos los productos concretos que se ofrece en cada una de las ramas por parte de AWS al lector le vendrá a la cabeza otro producto que hacía exactamente lo mismo que el correspondiente de la plataforma de Amazon. Pasemos a echar un vistazo un poco más en detalle:

Chatarra y red

  • Amazon EC2: Servidores virtuales
  • Amazon VPC: Redes privadas
  • Elastic Load Balancing: Distribucion de carga
  • Auto Scaling Automatically: escalado de infraestructura bajo demanda / consumo
  • Amazon Route 53: Enrutado
  • AWS Lambda: es un producto que sirve para lanzar ejecución de código en base a eventos (event-driven). No se por que pero se me viene a la cabeza el famoso node.js
  • Amazon ECS: Contenedores docker para las máquinas EC2

Almacenamiento y entrega de contenidos

  • S3: Almacenamiento escalable
  • CloudFront: Entrega de contenidos, es como se cataloga según los manuales que he visto. Dicho claro, para mi no es más que una cache de alto nivel, que se implementa en base a request y respuestas para acelerar la entrega.
  • EBS: Las NAS de toda la vida
  • Glacier: Almacenamiento a largo plazo, similar a lo que entendemos como archivar un documento

Seguridad e identificación

  • IAM: listas de acceso de toda la vida, con grupos y usuarios
  • Servicios de directorio: Servicios de directorio de toda la vida como Active Directory

BBDD

  • Amazon RDS: Bases de datos relacionales de toda la vida
  • Redshift: Datawarehouse, servicios de almacenamiento en cubos para su explotación posterior. Estos sistemas suelen ser empleados por sistemas expertos /estadísticos para la obtención de información que no resulta evidente. A veces yo me cuestiono sus conclusiones, pero bueno eso es otra guerra.
  • Amazon DynamoDB: bbdd nosql
  • Amazon ElastiCache: servicio de caché

Análisis

  • EMR: hadoop, computación distribuida
  • Data pipeline: Similar a las ETL de toda la vida
  • Kinesis: Tratamiento de streams, orientado al proceso y servicio de gran volumen de datos
  • ML (Machine Learning): en base a los datos obtiene información que luego se puede emplear para hacer predicciones. No lo conozco y tampoco conozco de ningún proyecto que lo haya empleado, pero me viene a la cabeza la asignatura de Inteligencia artificial de la carrera mezclada con un Data Warehouse de toda la vida.

Servicios de alto nivel

  • AppStream: Servicio de stream desde tu app a los usuarios
  • CloudSearch: Inclusión de capacidades de búsqueda en tu app
  • Elastic Transcoder: Conversor formatos digitales
  • SES: Emails
  • SNS: Notificaciones
  • SQS: Colas inter componentes, una especie de ESB
  • SWF: Coordinación de tareas

Gestión

  • CloudWatch: Monitorización de recursos y apps
  • CloudFormation: Plantillas de aprovisionamiento de infraestructura
  • CloudTrail: Log de las llamadas a la API
  • Config: Gestión de la configuración de la propia configuración AWS
  • OpsWorks: Gestión del entorno operativo, ya sea en AWS o en el propio site
  • Service Catalog: Distribución de productos empleando AWS

Visto lo visto, no vamos a negar las ventajas obvias de AWS que todos ya conocemos perfectamente. Pero lo que es cierto es que muchos de los productos que la plataforma ofrece los hemos empleado durante muchos años sin tanto bombo y platillo. Obviamente el tenerlo todo bajo la misma plataforma, accesible mediante las apis correspondientes, y con las capacidades de gestión y operación que proporciona cualquier proveedor IAS es una ventaja competitiva, pero no menos cierto es que hay poco «nuevo».

Desde el punto de vista puramente cloud, tan de moda a día de hoy, las ventajas de este enfoque son obvias, ahora bien ¿alguien se ha parado a comparar los precios de operación de los sites tradicionales vs. el enfoque cloud propuesto?

Bueno, pues yo sí lo he hecho con este mismo site en el que estas leyendo este articulo.

  • El coste del dominio no lo pongo por que en ambos casos tendría que pagarlo igualmente
  • Coste hosting de toda la vida para este site:
    • hosting: 600€ / 10 años = 60€ / año = 5€ / mes (creo recordar que hace unos años me costó más, pero bueno, los datos a día de hoy)
  • Coste AWS teniendo en cuenta que necesito al menos EC2 + S3 + RDS + CloudFront (opcional, tendria que estudiar cuanto me ahorro si no lo uso y tiro más de contenidos que tambien tiene coste claro) para un entorno de producción tal y como Amazon lo ve = 450$ /mes, contando con un solo servidor, si empleamos la característica de escalado se nos irán otros 75$ por web server al mes. Es cierto que en las guías se han ido a un servidor de dos procesadores y 8Gb de memoria, posiblemente se podría bajar a un tipo t2.small con un solo procesador y 2 Gb de memoria lo que abarataría el coste de la instancia desde los 80$ a los 20$ (da lo mismo por que lo dejariamos en 400$). El problema que he visto de AWS lo tiene en la capa S3 de almacenamiento. Me he llevado los datos de I/O de un site como el mío e incluso se dispara el coste. Inaceptable desde mi punto de vista.

La arquitectura estimada para WP en AWS es la siguiente:

arquitectura AWS WordPress

Las arquitecturas de ambas soluciones son similares en cuanto a rendimiento, y hablo en el caso de no escalar AWS. Si nos fijamos en el caso de AWS, al balanceador solo funcionara en el momento en el que levante otra instancia del Web Server y por lo tanto en condiciones normales, la arquitectura base es la misma en ambas plataformas, pero no así el coste. Tendría que disponer de ambos entornos para poder lanzar unas pruebas de carga contra ambos para poder evaluar si la estructura cloud proporcionada por AWS vale casi 100 veces mas que mi hosting, pero a bote pronto, me da que no.

Desde el punto de vista de la arquitectura, decidir si un desarrollo emplea una capa de cache como por ejemplo redis, es una simple cuestión de rendimiento o necesidad del lado tradicional, en el caso de la nube, no solo hay que tomar esto en cuenta sino del mismo modo el coste de dicho servicio. Por ejemplo, supongamos una app web tradicional de las de 3 capas con los problemas típicos de carga. Del lado tradicional, podemos emplear soluciones de sobra conocidas, balanceadores, cluster, caches en el server, en fin, lo de siempre. En cloud ¿empleamos CloudFront / ElastiCache para poder acelerar las consultas y de esta forma evitamos el acceso a la bbdd?¿dejamos que el sistema escale en capacidad y nos olvidamos de la caché?, ¿le damos otra solución?…¿que diferencia de coste plantea este mismo sistema sin caches de ningún tipo vs. ElastiCache vs. CloudFront?¿algun otro producto del catalogo AWS podría encajar con el objeto de abaratar los costes de operación?¿alguien lo ha evaluado para tomar la decision de arquitectura?

En definitiva, solo quiero trasladar 2 conceptos

  • AWS y el resto de servicios Cloud es mas de lo mismo pero en la nube. Ojo con la nube por que Megaupload tampoco iba a desaparecer hasta que lo hizo.
  • Llevarnos la estructura tradicional a la nube requiere de ciertos estudios adicionales, que no se necesitan del lado tradicional, que pueden desembocar en cambios de arquitectura por una simple cuestión de costes.
  • En definitiva, cuando tienes un martillo en la mano no todo son clavos.

Saludos a todos y hasta la próxima.

Enlaces de interés

  • Calculadora de costes https://calculator.s3.amazonaws.com/
  • http://aws.amazon.com/getting-started/projects/build-wordpress-website/services-costs/
  • https://www.dinahosting.com/ : site del que he sacado los precios de mi hosting actual

You must be logged in to post a comment.