Arquitectura de Google App Engine

Posted by in Programación, Python

Hoy es una entrada muy teórica acerca de la arquitectura de Google App Engine (#GAE). En la entrada sobre Google Code Lab ya definimos qué es GAE, y que ahora volvemos a repetir:

Google App Engine es una plataforma como servicio en la nube, que puede ser usada por desarrolladores y para almacenar aplicaciones web en los servidores de Google. Las aplicaciones están distribuidas por múltiples servidores (de Google), lo que ofrece escalabilidad a las aplicaciones, permitiendo un número alto de peticiones (el propio sistema GAE es el que se encarga de asignar los recursos necesarios según la demanda).

Para sacar todo el rendimiento a GAE es importante que conozcas cómo funciona, y es lo que pretendo hacer entre esta entrada y las siguientes … en las que se continuarán trabajando con varios ejemplos en GAE y Python.

Los mejores ingenieros del mundo trabajando para tí

Cuando inicias una aplicación o un proyecto web, a priori, desconoces el éxito de la misma. Pero por un momento, imagina que tienes que procesar 2 millones de peticiones (exitazo!!) …. ¿podrá con todas ellas tu servidor contratado? A los pocos días, no son 2 sino 4 millones …. ¿está preparada la infraestructura de servidores para aguantarlo? No contabas con estos problemas, ¿verdad? Pero hay más …. además de saber programar tu aplicación web de éxito, …. tienes optimizada tu arquitectura de servidores, estabilizada la carga entre ellos, etc, etc ? Demasiados problemas que solucionar, a pesar del éxito que has tenido!

Otro caso real (y típico) es que en momentos muy puntuales, tu aplicación multiplique por 1.000 su tráfico normal ¿lo aguantan tus servidores? Pero … ¿y si de pronto tienes un problema y se te para un servidor …. y se cae tu aplicación web? Además, desconoces en momento exacto en que se procudirá dicho pico de tráfico en tu web.

Una aplicación web que tenga éxito y que no sea capaz de aguantar su tráfico puede convertirla en un auténtico fracaso.

Aquí es cuando entra en acción Google App Engine, cuyas dos características principales (hay más) son escalabilidad y confianza (scale and reliability), así que … si tu aplicación web sufre estos problemas que te he contado antes, deberias valorar muy seriamente que GAE es lo que necesitas: Google se encarga (por tí) de toda la infraestructura de servidores, de que no te falta máquinas que respondan a tus peticiones incluso en picos, etc, etc …. y con un coste de eficiencia muy bajo: los mejores ingenieros del mundo trabajando para ti!!

Volvemos al lenguaje de calle: Google tiene infraestructura más que de sobra, y te la alquila!!

Ahora, compara lo que a tí te costaría tener personal para que monte la arquitectura que necesitas, y el coste del hardware: te lo presta Google! Algunas cosas son gratis, y otras, depende del uso que hagas.

GAE encapsula para ti

GAE te proporciona una plataforma donde «evitas» todos los problemas de compra de hardware, administración de servidores, picos de tráfico, replicación, de capacidad, coste de eficiencia, almacenamiento, … que para los desarrolladores pueden ser verdaderos dolores de cabeza (Google lo hace por tí!), pues un arquitecto de sistema no tiene porqué saber programar, ni un desarrollador tiene porqué saber de arquitectura de sistemas. Así que, desde mi punto de vista como desarrollador, yo creo que es todo un acierto GAE!

Conforme tu aplicación necesita responder a la demanda de peticiones, se van arrancando o parando máquinas virtuales de forma que los recursos empleados siempre están optimizados a la demanda real de tu aplicación.

Para los que suelen (y yo me incluyo) con bases de datos relacionales, cambiar el desarrollo tradicional a GAE supone un cambio en tu forma de trabajar (en cierto modo, hasta radical), pues no disponemos de un gestor de bases de datos, sino de Datastorage (de la que hablamos ampliamente en otra entrada).

GAE no es sólo un lugar donde alojar tu web de forma gratuita (o con el pago por uso, a muy buen precio), sino que trabajar en ello te «anima» a usar las buenas prácticas de Google para escalabilidad y confianza, y uno de los precios que hay que pagar es usar un modelo no relacional como es Datastorage o BigTable (si necesitas una base de datos relacional, puedes usar Cloud SQL, que es un MySQL y cuyo coste depende del uso que tengas).

Los distintos datacenters que Google tiene distribuidos por el mundo irán replicando tu aplicación en caso de que tengas clientes repartidos por todo el mundo, pero lo que recibe cada usuario será de su datacenter más próximo, reduciendo el tiempo de la petición. El balance de carga entre servidores corre por cuenta de Google, al igual que hace con los servicios de Google como Search, Maps, ….

Antes del resumen, comentar que hay que conocer cómo es el funcionamiento de GAE a nivel de front-end y de back-end, para conocer los beneficios de esta plataforma de desarrollo.

En resumen sobre GAE

Las características de GAE son:

  • Escalabilidad
  • Confianza
  • Coste de eficiencia
  • Integración con otros servicios (sobre todo, con los de Google)
  • Cola de tareas

El diseño de esta plataforma en la nube supondrá una nueva forma de programar aplicaciones, the Google way, pero ya te puedes imaginar los beneficios asociados:

  • Disponibilidad 24 / 7
  • Facil de desarrollay y depurar
  • No tiene coste inicial
  • No necesitas gestión de actualizaciones, parches, bugs, ….

Y … eso es todo por hoy, que no es poco! Buen día.