JoseOnline

Introducción a Google App Engine: Plataforma como servicio

Antes de Adentrarnos al mundo de Google App Engine (GAE), quiero usar un par de minutos para explicar ciertos términos dentro de la computación en la nube. De esta manera tendremos una mejor perspectiva de donde estamos ubicados y así entender con mayor claridad GAE

En la actualidad, soluciones dentro de la computación en la nube (cloud computing) encajan dentro de las siguientes Capas:

  • SERVICIOS (SaaS)
  • PLATAFORMA (PaaS)
  • INFRAESTRUCTURA (IaaS)

SERVICIOS

También conocido como SaaS, Software como servicio (Software as a Service). SaaS es un modelo de software en el cual aplicaciones e información están alojadas de manera centralizada, típicamente en la "nube", y pueden ser accedidas por usuarios haciendo uso de clientes livianos como por ejemplo el navegador Web. Ejemplo de ellas tenemos: Google Apps, suite de aplicaciones empresariales en la nube (GMail, Calendar, Docs, Sites), Wordpress, entre otros. Aunque la mayoría de las veces SaaS se asocia a un contexto empresarial, pienso que es completamente valido para todos los servicios webs usados hoy en día: Google, Bing, Gmail, Yahoo, Facebook, Twitter... entre Muchos mas!

INFRAESTRUCTURA

Capa conocida como IaaS, Infraestructura como servicio (Infrastructure as a Service). IaaS es un modelo que permite entregar infraestructura computacional para el uso empresarial a través de la nube. En vez de comprar servidores, software, un lugar para tu centro de datos o equipo de redes, la tendencia es hacerse de estos recursos de manera externa (outsourcing). De esta forma se rentan servidores "alojados en la nube" los cuales puedes equipar a tu medida y alojar en ellos lo que quieras. Esto da muchas libertades en cuanto a lo que puedes hacer con los servidores, pero tiene la desventaja de necesitar un equipo de administradores de sistemas que arme y mantenga viva la infraestructura. Amazon EC2 es uno de los líderes en este mercado.

Por ultimo pero no menos importante tenemos:

PLATAFORMA

conocida como PaaS, plataforma como servicio (Platform as a Service). PaaS es un modelo que permite entregar una plataforma computacional y conjunto de soluciones como un servicio. Esta oferta facilita el despliegue de una aplicación sin preocuparse por el costo y complejidad de comprar y manejar el Hardware y software de servidores así como provisionar capacidades de alojamiento. Esto permite proveer todas las facilidades requeridas para soportar el ciclo de vida de elaboración de una aplicación web y servicios enteramente disponible desde la "nube". Con PaaS, la plataforma impone restricciones a tu código como: lenguajes soportados, tiempo limite para ejecutar una petición web, tipo de almacenaje de datos, entre otros. Pero si puedes respetar estas restricciones los beneficios serán inmensos: Solamente te enfocas a escribir código, publicarlo en la "nube" y te olvidas de administrar algo. Entre las opciones de proveedores de PaaS tenemos: Google App Engine, Heroku, Joyent, Microsoft Azure, phpfog, entre otros.

Ahora que sabemos donde encaja GAE en todo lo que es la computación en la nube, veamos de que se trata.

Google App Engine

Es un servicio de Google que te permite alojar una aplicación web en la infraestructura de Google con ciertas restricciones. Este servicio fue lanzado en la primavera del 2008 como la plataforma de la nube en la cual cualquier persona puede alojar su código en la infraestructura de Google. GAE busca compartir la experiencia en computación distribuida de la empresa a través de un servicio en linea, brindandole al usuario:

  • Configuración simple de la aplicación
  • Ninguna administración de sistemas.
  • Ningún tuneo para mejorar rendimiento
  • Escala automáticamente

Cuando me refiero a aplicaciones web, me refiero a aplicaciones que normalmente pueden ser accedidas a través de una navegador web: Tiendas en linea, redes sociales, juegos multijugadores, aplicaciones móviles, aplicaciones colaborativas, publicación de contenido, entre otras.

En especial GAE esta diseñado para alojar aplicaciones web que puedan tener muchos usuarios simultáneos, esto quiere decir que la aplicación escala automáticamente haciendo uso de la infraestructura de Google y sus poderosos centros de datos. Decimos que una aplicación "escala automáticamente" cuando luego de implementarla en GAE, esta puede servir muchos usuarios conectados simultáneos sin degradar su rendimiento. A medida de que mas usuarios accedan a la aplicación, GAE otorga y administra mas recursos a la misma sin tener que la aplicación preocuparse o saber algo de los recursos que utiliza.

Como podemos observar, este modelo atrae a muchos codificadores (incluyendome) dado a su atractiva propuesta. En primer lugar se tiene la "tranquilidad" de que la aplicación esta corriendo sobre los servidores de Google (Servidores con una reputación que no creo muchos puedan alcanzar) con centros de datos a nivel global, permitiendo tiempos de respuesta excelentes debido a que el trafico será atendido por el datacenter mas cercano disponible, pero no conforme con eso, GAE nos remueve completamente la necesidad de tener y ejecutar nuestra propia infraestructura, en cambio, como una opción PaaS, nos otorga API confiables de las cuales ellos se hacen cargo, simplemente nosotros debemos programar subir la aplicación y listo!

Analicemos esto un poco mejor, ¿Como realizábamos las cosas antes? tradicionalmente ademas de analizar, diseñar e implementar la aplicación, debíamos preocuparnos en donde alojarla la misma, si la aplicación no tenia mucho trafico con un hosting sencillo no habría ningún problema, de seguro podría soportar una 30.000 visitas por hora. Supongamos que esta aplicación es todo un éxito y tenemos 100.000 potenciales visitantes de una vez ¿que pasaría? bajo una fuerte carga, la aplicación estaría incapacitada para mostrar aunque sea el logo de la aplicación a 70.000 usuarios que les dio curiosidad. Esos clientes potenciales de seguro no volverán cuando el trafico haya disminuido.

Empresas pequeñas y personales no tienen acceso a grandes sistemas de servidores en estos días, lo que mejor sabemos hacer es codificar una idea y esperar que los problemas de rendimiento no dañen la reputación y ganas del usuario de seguir usando la aplicación. Dependiendo de como estén los fondos monetarios se podría ampliar la infraestructura, conseguir un poco mas de servidores pero esto solo aliviaría el problema un poco.

En la actualidad, tenemos otras opciones. Las grandes compañías como Amazon, Google y Microsoft están rentando parte de sus sistemas de alta capacidad a través de un modelo de pago-por-uso. Estos servidores están mas que capacitadas para manejar aumentos repentinos de tráficos con poca dificultad.

Lo bueno: GAE no nos permite simplemente usar la infraestructura de Google. Nos da un modelo para construir aplicaciones que crecen automáticamente. GAE nos da un conjunto de herramientas (API's) que incrementan la productividad en el desarrollo, nos permiten enfocarnos en las funcionalidad de la aplicación y experiencia de usuario, dejando atrás preocupaciones del estilo de: balancear cargas entre varios centros de datos, agregar niveles de almacenamiento caché, así como no depender demasiado en características de bases de datos relacional, las cuales no se construyeron con la intención de tener información distribuida alrededor de múltiples maquinas.

No todo es color de rosa, y así como hemos visto que GAE es una tremenda propuesta para personas y empresas sin la capacidad para crear una infraestructura que "aguante" las necesidades de la computación en la nube, debemos jugar bajos las reglas de google y adecuarnos a las limitaciones que esta plataforma imponga en el desarrollo. hablemos un poco sobre estas limitaciones:

No todas las librerías y frameworks pueden correr para los lenguajes soportados por el SDK de GAE. muchas de estas limitaciones se deben a la incapacidad de poder escribir sobre el sistema de archivos de Google (GFS).

Hasta los momentos los únicos lenguajes soportados son: Python, Java, Go, así como cualquier otro lenguaje que se ejecute sobre Java VM como: Ruby, Closure, Scala, Groovy, entre otros.

No existe bases de datos relacional, debido a que se ha demostrado que las Bases de datos relacional son muy complicadas de escalar a sistemas distribuidos, en su defecto GAE ofrece varias herramientas para persistir la información de tu aplicación, entre ellas tenemos: el almacén de datos (Datastore) así como un servicio llamado Blobstore (ideal para cargar objetos pesados) y un servicio de Imagen (Image API). Estas herramientas implican un cambio de paradigma en la forma de diseñar y programar nuestras aplicaciones, cambiarnos la mentalidad de relaciones y comenzar a desnormalizar nuestros modelos buscando eficiencia y escalabilidad. (en subsecuentes publicaciones hablaremos mas afondo del almacén de datos)

No es portable, esto quiere decir que si quieres cambiar de proveedor muy probablemente deberás re-escribir parte o toda tu aplicación, dado que las API de GAE no son de fuente abierta ademas de que son especificas a la infraestrucutra de Google por lo cual no se conseguirán en otro lugar. Básicamente se esta atando a las reglas de Google y sus limitaciones.

Muchos de sus servicios y herramientas imponen limitaciones del estilo de: Tiempos de respuesta, capacidad en memoria de la peticion, cuotas diarias, entre otros.

Aunque de seguro puden existir muchas limitaciones mas, para mi estas son las mas importantes, son aquellas que deberíamos considerar a la hora de adoptar esta tecnología.

Cuando hablamos de portabilidad, pienso que esto ocurrirá de una manera u otra con cualquier otro PaaS, mas si quieres que tu aplicación escale a grandes magnitudes no creo otra empresa en el mundo tenga la infraestructura que posee Google.

Por su parte, en mi opinión, una de las limitaciones de mayor peso e impacto es la necesidad de cambio de paradigma y mentalidad del usuario. Un cambio de paradigma donde debemos olvidarnos un poco de todo aquello que nos comentaron en la universidad sobre modelos relacionales y bases de datos relacional, en cambio debemos desarrollar adoptando el modelo de google: Pequeñas instancias de las aplicaciones, aplicaciones con inicio rápido, y una manera de almacenar información totalmente nueva. Aunque difícil no es imposible, pero no podemos olvidar que las Bases de datos relacionales han sido el paso a seguir en el desarrollo web a lo largo de esta ultima década. Este modelo de aplicaciones y el almacén de datos representa una nueva forma de pensar acerca de aplicaciones web, que aunque es tan sencillo como los modelos que veníamos manejando, requiere reconsiderar algunos principios que antes dábamos por sentados.

Google App Engine se creo pensando en los desarrolladores, y por eso fue desarrollando para:

  • Fácil Desarrollo
  • Fácil Mantenimiento
  • Fácil Escalar

Navegando, me conseguí con este fragmento:

We wear pagers so you don't have to

Aqui podemos notar la facilidad de la plataforma, Google se encarga de la infraestructura, mientras nosotros nos encargamos de construir software de calidad.

Algunos datos interesantes de GAE

  • Existen mas de 90.000 desarrolladores usando la plataforma.
  • Actualmente existen mas de 130.000 aplicaciones en producción.
  • GAE maneja volúmenes de 700 Millones de visitas diarias a las aplicaciones.

Ciclo de desarrollo en GAE

El modelo de construccion de aplicaciones dentro de GAE es el siguiente:

  1. Desarrollar código localmente, con la ayuda de el SDK.
  2. Probar localmente y publicar la aplicación en los servidores de Google
  3. Administrar la aplicación vía una interfaz web

Que servicios ofrece GAE

GAE, como plataforma, esta en constante evolución buscando incorporar cada día mas y mas servicios a la plataforma que permitan facilitar el desarrollo web. A continuación tenemos una lista de las API's así como una breve descripción:

  • Datastore (Almacén de datos) Servicio robusto y escalable que permite persistir la información para tu aplicación web. Almacén de datos NO RELACIONAL.
  • Memcache (Memoria Cache) Servicio de almacenamiento volátil, ideal para persistir información que se accede con mucha frecuencia y no sufre muchos cambios.
  • Mail Servicio que permite enviar y recibir correos electrónicos desde la aplicación.
  • URL Fetch (Acceso a través de URL) permite acceder a servicios externos a través de peticiones usando HTPP y HTTPS, ideal para acceder a web services y REST API's .
  • XMPP Servicio que permite a tu aplicación enviar y recibir mensajes de usuarios a través del protocolo XMPP (usado por google talk)
  • Task Queue (Cola de Tareas) Servicio que nos permite realizar trabajo fuera de una petición realizada por un usuario. Permite a la aplicación ejecutar trabajo en el fondo, organizando el trabajo en unidades pequeñas y discretas llamadas tareas.
  • Images GAE provee la habilidad de manipular imágenes usando un servicio dedicado de imágenes. Este servicio permite cambiar de tamaño, rotar, reajustar y cortar imágenes, ademas puedes mejorar fotografías usando algoritmos predefinidos.
  • Blobstore Servicio que permite a tu aplicación servir objetos, llamados Blobs, que son de mayor tamaño que los objetos permitidos en el datastore
  • User Servicio que permite a tu aplicación autenticar usuarios que tengan cuentas de Google, cuentas de un dominio propio usado en Google Apps, o identificadores de OpenID.
  • Channel Servicio que permite crear una conexión persistente entre tu aplicación y los servidores de Google, permitiendo a tu aplicación enviar mensajes a clientes en JavaScript en tiempo real sin hacer uso de polling. Ideal para aplicaciones que están diseñadas para actualizar usuarios acerca de nueva información de manera instantánea o propagar una información debido a la acción de un usuario.

Ademas de este nucleo de API's GAE nos ofrece otras bondades como:

  • App Engine Map Reduce Librería que aplica el algoritmo de google llamado Map Reduce
  • Cron Job Configuración que permite ejecutar una tarea de manera periódica.
  • Backends Instancias especiales de GAE que no tienen las limitaciones de las instancias regulares que se encargan de las peticiones de los usuarios.
  • Prospective Search API o búsqueda prospectiva
  • Pipeline API
  • Proveedor OAuth

Como podemos observar, GAE nos ofrece un abanico de herramientas que nos permiten elaborar aplicaciones web útiles de manera muy sencilla.

En siguientes publicaciones entraremos a detalles con algunos de los servicios, así como aplicaciones de ejemplo donde podemos observar el potencial de GAE.

Algunos enlaces de interés:



Comentarios en el blog potenciados por Disqus