Google Cloud & Google App Engine

Evento: Google I/O Extended y Google Apps Developer Challenge – Perú 2012

¿Qué es el cloud computing en Google?

La computación en nube, del inglés cloud computing, es un paradigma que permite ofrecer servicios de computación a través de Internet. La nube es una metáfora de Internet.”

La computación en la nube(grid) es una tecnología innovadora que permite utilizar de forma coordinada todo tipo de recursos (entre ellos cómputo, almacenamiento y aplicaciones específicas) que no están sujetos a un control centralizado. En este sentido es una nueva forma de computación distribuida, en la cual los recursos pueden ser heterogéneos (diferentes arquitecturas, supercomputadores, clusters…) y se encuentran conectados mediante redes de área extensa (por ejemplo Internet)”

Nosotros, ingenuos usuarios, hacemos peticiones pensando que lo que habrá “al otro lado” será un ordenador que se dedicará a atendernos a nosotros, cuando en realidad nuestra petición es dividida en varias tareas que serán atendidas por varias máquinas dentro de una red donde puede haber cientos o miles de ordenadores.

Pero no todas las máquinas de la red se dedican a los mismos usos. Hay máquinas especializadas en la realización de cálculos, máquinas que contienen los datos de las bases de datos, máquinas donde se albergan ficheros, etc.

Pero, ¿qué tiene que ver todo esto con el cloud computing? Muy sencillo, que todas todas todas las aplicaciones que se encuentran en “la nube” están funcionando sobre una arquitectura basada en grid.

Capas del Cloud Computing

Vamos a utilizar el modelo de cinco capas. Las vamos a colocar en forma de pirámide para recalcar el hecho de que las capas inferiores poseen mayor número de elementos que las superiores.

Hardware

A la vista de la pirámide podréis ver que está en la parte inferior y que es la más grande de todas. Como su nombre indica en esta capa se encuentran todos los dispositivos físicos que hacen funcionar a la nube: pasillos y pasillos con miles y miles de ordenadores unos apilados encima de otros:

En el caso que nos ocupa todo este hardware se encuentra en los datacenters de Google. Os recomiendo ver este vídeo para que os hagáis una idea de lo que es uno sólo de los muchos datacenters que Google tiene alrededor del mundo:

http://www.youtube.com/watch?v=zRwPSFpLX8I

Esta es la parte física del grid. Algunos de los ordenadores estarán destinados a almacenar datos, otros a procesar información, otros a almacenar archivos, etc. Todas nuestras búsquedas, nuestros correos de gmail, nuestros calendarios y últimamente hasta nuestros documentos se encuentran en esos ordenadores.

Todos ellos son fácilmente reemplazables y si queremos ampliar la capacidad tan sólo deberemos añadir más ordenadores o construir otro nuevo datacenter.

Virtualización

Como en todos los ordenadores y en todo tipo de dispositivos en general nos encontramos con que justo encima de la capa hardware se encuentra la del sistema operativo.

Otras nubes lo que hacen es instalar un sistema operativo muy reducido sobre el hardware y sobre ese sistema operativo reducido instalar máquinas virtuales con VMWare, VirtualBox, etc. Todo esto, como es natural, conlleva una pérdida de rendimiento.

Google no hace eso. Google utiliza sistemas operativos linux modificados con un sistema de ficheros propio: GFS(Google File System).

http://labs.google.com/papers/gfs.html

Con ello no sólo no pierde rendimiento sino que además va más allá de lo que un sistema de ficheros tradicional permite llegar, y es que el sistema de ficheros de Google:

  1. Es un sistema de ficheros distribuido en el que participan cientos o miles de ordenadores.
  2. Se diseñó pensando que los fallos en el hardware no son la excepción sino la norma.
  3. Generalmente maneja ficheros con tamaños de varios gigas que pueden llegar a los terabytes.
  4. Al escribir datos en disco lo normal no es modificar los que ya existen sino crear datos nuevos.
  5. Los ficheros, una vez escritos, sólo se leen y por lo general de manera secuencial.

Como veis en ningún momento se menciona para nada la palabra “borrar” :-). Es un sistema de ficheros en el que sólo guardas, guardas y guardas, y además ficheros de tamaños enormes que se encuentran distribuidos en varios ordenadores, que luego se leen prácticamente de un tirón con lo que ahorras al disco el trabajo y el tiempo de tener que buscar sectores en concreto.

De este modo GFS consigue un objetivo claro: una capacidad de almacenamiento ilimitada.

IAAS (Infraestructure as a service)

Bueno, de momento tenemos una red enorme de ordenadores organizados en datacenters que tienen un sistema operativo reducido y un sistema de ficheros hecho a medida. El siguiente paso es especializar a los ordenadores que se encuentren en esa red, de tal modo que algunos de ellos se encarguen de almacenar ficheros, otros de guardar bases de datos, etc, y de esta manera continuar construyendo nuestra nube basada en una estructura grid.

Si Google quiere destinar un conjunto de ordenadores al almacenamiento de ficheros lo tiene fácil, tiene máquinas y un sistema de ficheros propio muy adaptado a sus necesidades.

Pero, ¿y si quiere dedicar máquinas a almacenar datos como si de una base de datos se tratara? Si por algo es famoso Google es por sus búsquedas, así que “algo” tendrá donde poder almacenar información, ¿verdad?

Al igual que tiene su propio sistema de ficheros, también tiene su propio sistema de almacenamiento de información. Este sistema NO ES UNA BASE DE DATOS y se le conoce con el nombre de Bigtable

http://labs.google.com/papers/bigtable.html

Bigtable es un sistema de almacenamiento de datos distribuido diseñado para almacenar cantidades de datos del tamaño de ¡petabytes! en miles de ordenadores. No sigue un modelo relacional, aunque los datos se encuentran estructurados, y todas las relaciones entre elementos se encuentran desnormalizadas.

En Bigtable, como en GFS, no se borra nada, y además las actualizaciones suponen crear nuevos registros, nunca actualizar los ya existentes. Pensad que los datos están desnormalizados: cada vez que se actualiza algo se pueden estar escribiendo muchísimos datos nuevos.

De este modo la estructura de Bigtable consigue un objetivo claro: un tiempo de respuesta mínimo.

Una vez hemos llegado a este punto hemos cubierto todos los apartados presentes en una arquitectura basada en grid, que “casualmente” son las tres primeras capas de la computación en la nube.Tenemos alta disponibilidad, recursos ilimitados y una capacidad de almacenamiento infinita. Una vez tenemos la infraestructura aparecen los elementos propios de la nube.

PAAS (Plataform as a Service)

Una vez hemos llegado hasta aquí, ¿qué hacemos con los recursos de los que disponemos?, ¿cómo podemos utilizarlos?, ¿qué podemos hacer para explotarlos?

En este nivel aparece una capa que te da acceso a la plataforma que hay por debajo pero ocultándote los detalles. De este modo desarrollaremos aplicaciones utilizando una capa que usará unos recursos hardware a los que nosotros nunca podremos acceder. El almacenamiento infinito, los recursos ilimitados, la alta disponibilidad, etc ya están garantizadas gracias al grid, lo que nos encontraremos ahora serán facilidades y recursos que nos permitirán utilizarlas.

En este sentido PAAS (plataforma como servicio) actúa como una especie de API. Tus aplicaciones estarán programadas para funcionar bajo un determinado marco que te permitirá hacer cosas con esa increíble infraestructura que hay por debajo, pero no podrás hacer cualquier cosa, tan sólo podrás hacer las cosas que te estén permitidas hacer.

Y es aquí donde entra en juego el Google App Engine:

Si usas Google App Engine:

  • Tus aplicaciones se ejecutarán en los ordenadores de los datacenters de Google.
  • Tus ficheros se almacenarán usando GFS.
  • Tus datos se guardarán en bigtable.

Y además sin tener que preocuparte de nada, tan sólo de programar una aplicación que siga las reglas que exige Google App Engine.

Esto que acabamos de comentar sirve únicamente para poder ubicar a Google App Engine en su sitio y para saber qué es realmente.

SAAS (Software as a service)

Y con esta capa llegamos a la parte superior de la pirámide. Tenemos una infraestructura y una serie de facilidades a nuestro alcance con un único objetivo: el de poder crear aplicaciones que puedan ser utilizadas por nuestros usuarios finales o nuestros clientes. Y es que si no tenemos ni usuarios ni clientes que utilicen las aplicaciones no hay razón por la cual crear la nube.

Para entender mejor qué es el SAAS (software como servicio) vamos a intentar describir la situación actual de las aplicaciones que se utilizan en muchas empresas.

Cuando una empresa contrata un desarrollo a medida éste suele permanecer en un servidor que se encuentra físicamente dentro del propio edificio de la organización. Se contrata el desarrollo, éste se va haciendo, y cada cierto tiempo algunas personas van a las instalaciones del cliente a instalar una nueva versión del software en su servidor.

Para ello el cliente tiene en sus instalaciones un servidor dedicado a albergar la aplicación y, ocasionalmente, un segundo servidor en el que poder mantener la base de datos con la información. También necesita tener a alguien responsable de gestionar sus sistemas, aunque su modelo de negocio no tenga nada que ver con la informática.

Este responsable de sistemas tendrá que encargarse de realizar las copias de seguridad, de que los equipos funcionen correctamente, de tener repuestos por si alguno de los sistemas fallase, etc.

Suele ocurrir, además, que este tipo de aplicaciones son utilizadas por empleados que posiblemente no se encuentren en el mismo edificio en el que esté el servidor de la aplicación, con lo que hay que mantener una conexión a Internet que funcione constantemente, hay que disponer de un ancho de banda adecuado, hay que tener una serie de medidas de seguridad, etc.

Y si la aplicación se hace más grande, la base de datos crece mucho, o se empiezan a almacenar muchos ficheros de gran tamaño posiblemente el servidor en el que está funcionando la aplicación tenga que ser sustituido por otro.

El otro enfoque es el de SAAS, que aprovecha las ventajas de la nube para eliminar todos estos problemas. Dicho enfoque apuesta por hacer que tú como cliente no tengas que tener sistemas dedicados a tener funcionando tu aplicación, sido que te facilitan los medios necesarios en los que poder hacer funcionar tu software.

De este modo el propio equipo encargado de crear la aplicación puede ir actualizando el software sin tener que desplazarse al edificio del cliente, y es el personal de la nube quien se encarga de realizar las copias de seguridad, de poner los medios para que no te quedes sin espacio en disco, de poner las máquinas necesarias para que no tengas que cambiar de servidor, etc. Aparte no te tienes que preocupar de tener una conexión a internet que funcione constantemente con un ancho de banda grande.

El SAAS para los clientes supone despreocuparse de las infraestructuras necesarias para hacer que la aplicación funcione y de los problemas técnicos que éstas puedan acarrear y, para la empresa desarrolladora de software, supone disponer de un entorno conocido y accesible con el que es más fácil poder publicar nuevas versiones del software y detectar posibles errores.

Google App Engine

Como hemos visto, Google App Engine es una plataforma que nos permite acceder a los recursos de Google con el objetivo de crear aplicaciones que funcionen en la nube. Se sitúa por tanto en la capa PAAS de la pirámide.

http://code.google.com/intl/es-ES/appengine/

Dichas aplicaciones, por naturaleza, funcionarán siguiendo el paradigma del SAAS (Software como servicio) y dispondrán de una disponibilidad asegurada en unos recursos prácticamente infinitos.

http://code.google.com/intl/es/appengine/docs/whatisgoogleappengine.html

El tener nuestra aplicación en la nube, como clientes, nos supondrá despreocuparnos por la infraestructura que hace que funcione nuestra aplicación pero, también como clientes, hará que nos planteemos algunas dudas, como por ejemplo ¿qué costo tiene todo esto?, ¿puedo usarlo gratis?, ¿qué tamaño pueden tener mis aplicaciones antes de empezar a pagar?

La última de las preguntas tiene su respuesta en este enlaces:

http://code.google.com/intl/es-ES/appengine/docs/quotas.html

Como podéis ver el máximo gratuito es muy muy alto:

  • 1.300.000 solicitudes diarias o 7.400 por minuto.
  • 10 GB de subida y de bajada de datos diaria o 56 MB por minuto.
  • 1 GB de almacenamiento en el almacén de datos (el datastore).
  • 10.000.000 llamadas al almacén de datos diarias o 57.000 por minuto.
  • 7.000 llamadas al API de correo diarios o 32 llamadas por minuto.
  • 2.000 destinatarios de correo electrónico diarios u 8 por minuto.

Aparte, las aplicaciones desarrolladas con Java se encuentran con los siguientes límites:

http://code.google.com/intl/es-ES/appengine/docs/java/runtime.html#Quotas_and_Limits

  • Solicitudes máximas de 10 MB.
  • Respuestas máximas de 10 MB.
  • 1000 archivos de aplicación como máximo.
  • 1000 archivos estáticos como máximo.
  • 10 MB como tamaño máximo de un archivo de aplicación.
  • 10 MB como tamaño máximo de un archivo estático.
  • La aplicación completa debe ocupar, como mucho, 150 MB.

En caso de ser necesarios más recursos estos se pueden contratar y así aumentar los límites, de hecho las tarifas tienen unos precios económicos.

http://code.google.com/intl/es-ES/appengine/docs/billing.html

Como desarrolladores dispondremos de una plataforma muy potente cuyo hardware no será accesible. En dicha plataforma existen una serie de facilidades que nos permitirán poder crear aplicaciones eliminándonos muchos problemas y facilitándonos muchos servicios pero, a su vez, limitándonos en otros aspectos.

Los lenguajes con los que podremos crear aplicaciones para el Google App Engine son Python y Java y los servicios a los que podremos acceder desde el Google App Engine son los siguientes:

  • Almacén de datos (el datastore), donde podremos almacenar toda la información que nuestra aplicación necesite para funcionar.
  • Despliegues, con lo que podremos poner a nuestra aplicación en funcionamiento.
  • Cuentas de Google, que facilitará la autenticación de usuarios.
  • Extracción de URL, que permite acceder a recursos de internet.
  • Correo, ya que las aplicaciones podrán enviar correos electrónicos.
  • Manipulación de imágenes, para poder rotarlas, recortarlas, ajustar su tamaño, etc.
  • Memcache, que permite un acceso muy rápido a datos que no se encuentren en el almacén de datos.
  • Programación de tareas, servicios que se vayan a a ejecutar a intervalos regulares.

http://code.google.com/intl/es/appengine/docs/whatisgoogleappengine.html

No nos tendremos que preocupar del mantenimiento de estos servicios, únicamente de usarlos. Aparte Google facilita un kit de desarrollo con el que facilitarnos el desarrollar para su plataforma.

http://code.google.com/intl/es/appengine/downloads.html

Sin embargo la propia plataforma define sus límites, los cuales al programar con Java son los siguientes:

http://code.google.com/intl/es-ES/appengine/docs/java/runtime.html

  • Las aplicaciones se deben basar únicamente en un principio de petición-respuesta.
  • El tiempo máximo para procesar peticiones es de 30 segundos. Las operaciones que superen ese máximo no terminarán.
  • No se pueden utilizar ni hilos ni grupos de hilos en las aplicaciones, al igual que tampoco se pueden crear temporizadores.
  • La aplicación no puede crear nuevos ficheros dentro de su propio ámbito de aplicación.
  • Hay métodos de la clase java.lang.System que no hacen nada y cuya invocación es inútil.
  • Se puede utilizar la reflexión en nuestras propias clases sin ninguna limitación, pudiendo mediante este mecanismo incluso cambiar los modificadores de acceso y ejecutar métodos privados. Sin embargo esto último no puede hacerse en las clases del JRE y del API. Puedes utilizar la reflexión contra esas clases pero no cambiar sus modificadores de acceso, con lo que no podrás ejecutar sus métodos privados.

Todo esto es debido a que Google utiliza su propia versión de la JVM, la cual es compatible con Java 6 pero posee algunas restricciones.

En la siguiente dirección tenéis un enlace a una pequeña aplicación creada con el Google App Engine:

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=Tutorial-basico-google-application-engine

Etiquetado .

Deja una respuesta

Tu dirección de correo electrónico no será publicada.