# Mokap Community: Servicio de comunidad en línea para el intercambio de recursos gráficos/Análisis Cloud Computing
## ¿Por qué elegimos una tecnología en la nube?

En caso de que la comunidad, por cualquier razón, llegase a tener mucho tráfico, hemos decidido optar por una tecnología más escalable, que nos evite a largo plazo dedicar mantenimiento para transicionar a estructuras más escalables.
Nos centramos en tecnologías “en la Nube”. Los dos competidores más destacados del mercado son Amazon Web Services y Google Cloud Platform (App Engine y Compute Engine). Ambos ofrecen cuotas muy variadas con sus respectivos puntos fuertes y débiles. Amazon ofrece una cuota mínima gratis durante el primer año, en cambio Google ofrece la cuota gratis para siempre por el servicio mínimo. Además, Google gestiona de manera transparente al usuario la configuración y asignación de máquinas virtuales. Google parece más interesante, a priori, no sólo por las ofertas que ofrece (ligeramente mejores) sino que además facilita la comunicación con Android (al cliente le interesa esto último).

## Los líderes del mercado
### Google

Google Cloud Platform ofrece servicios de cómputos, almacenamiento y aplicaciones para soluciones web, para móviles y de backend. Utiliza la misma infraestructura que usa Google para ofrecer todos sus resultados de búsqueda, publicar vídeos de YouTube y proporcionar almacenamiento de Gmail o Google Drive.
Los productos que ofrece para computación son dos: Google App Engine y Google Compute Engine. App Engine es la plataforma administrada por Google, y permite desarrollar aplicaciones con servicios integrados de manera gratuita. Compute Engine es la infraestructura, que sirve para ejecutar cargas de trabajo a gran escala en máquinas virtuales alojadas en ella. Con este último servicio hay que pagar una cuota por minuto.

### Amazon

Amazon Web Services ofrece un amplio conjunto de servicios globales de informática, almacenamiento, bases de datos, análisis, aplicaciones e implementaciones que ayudan a las organizaciones a avanzar con mayor rapidez, reducir costes de las tecnologías de la información (TI) y escalar aplicaciones.

## Servicios que incluyen

* Sitios web y alojamiento de sitios web: fácil de escalar, de bajo coste y con baja latencia.
* Análisis de Big Data: desde NoSQL a Hadoop.
* Copia de seguridad y almacenamiento: almacenamiento bajo demanda, escalable y fiable para todas las necesidades de negocio.
* 12 primeros meses de servicio gratuito (limitado).
| | Google | Amazon |
| Pros | - Gratis para siempre (hasta 28 horas/día) - Almacenamiento escalable - En caso de que queramos tratar con Big Data en el futuro, Google es una de las empresas más avanzadas en el tema - Se integra con herramientas como Eclipse - Mantenimiento transparente | - Almacenamiento escalable |
| Contras | - No tiene el nivel de madurez de su competidor más directo aunque está creciendo a un ritmo muy rápido. | - Solo es gratis durante 12 meses |
A primera vista Google Cloud parece ser una mejor opción para nosotros, sobre todo por el aspecto del precio.

## Funcionalidades

Amazon Web Services fue lanzado oficialmente en 2006, dos años antes que Google Cloud Platform. Esto le permitió ser el líder del mercado al principio aunque últimamente está compitiendo ferozmente con Google por ganar la mayoría del mercado. Ambas compañías ofrecen distintas capas de servicios de computación en la nube que analizamos con mayor detalle a continuación.

### Google Compute Engine/App Engine Vs Amazon EC2
#### - Google Compute Engine: Servicio de máquinas virtuales.

* Ofrece servicios de VM con Linux, con la infraestructura interna de Google.
* Datos de facturación estimados para nuestro proyecto:
** Facturación por minuto de cómputo: $0,069/hora el más barato.
** Facturación por salida a Internet: $0,01 con cambio de zona.
** Facturación por ancho de banda: $0,12/GB
* Sencillez de uso: Requiere gestionar una VM, algo que puede dar algún quebradero de cabeza.

#### - Amazon EC2: Servicio de máquinas virtuales.

* Ofrece VM con varios sistemas operativos.
* Datos de facturación estimados para nuestro proyecto:
** Facturación por instancia: $8,79/mes
** Facturación por red: ~$1/mes
* Sencillez de uso: También requiere gestionar una VM.

#### - Google App Engine: Servicio de hosting de aplicaciones web.

* Ofrece la posibilidad de alojar aplicaciones web en varios lenguajes sin necesidad de gestionar la máquina en la que se encuentran.
* Datos de facturación estimados para nuestro proyecto:
** Facturación por instancia: Gratuita si no se superan 28 horas/día y aplicación entre todas las instancias.
** Facturación por red: Gratuita hasta 1GB/día y aplicación.
* Sencillez de uso: No requiere gestionar la VM, permite subir aplicaciones Java directamente desde Eclipse prácticamente sin configuración.

##### Conclusión:

Google App Engine parece la opción más sensata por su sencillez, ofreciendo incluso el servicio básico de forma gratuita mientras no se superen las cuotas diarias establecidas.

### Google Cloud Storage Vs Amazon S3 y Amazon Glacier
#### - Google Cloud Storage.

Google Cloud Storage es un servicio de Internet que te permite almacenar datos en la nube de Google. Provee una sencilla interfaz para programar que permite a los desarrolladores tomar ventaja de la seguridad y la velocidad de la estructura de las redes de Google. Si la aplicación a realizar utiliza archivos o bien para ser mostrados o bien para ser administrados por los usuarios finales, Google provee de un entorno de desarrollo (Google Drive SDK).
Este servicio proporciona seguridad proveyendo de redundancia en los datos, permite Big Data, facilita las tareas de administración del sistema (aplicación, bases de datos, servidores…) y realiza un ajuste de escala según la cantidad de usuarios que utilicen el sistema (sólo pagas por lo que utilizas)Este servicio provee de una gran cantidad de características que hacen que guardar, compartir y manejar datos sea eficiente y seguro:
* Gran capacidad y escalabilidad.
* Fuerte consistencia de datos.
* Google Developers Console Projects. Servicio de Google Cloud Storage que te ayuda con la gestión de proyectos.
* Bucket Locations.
* REST API. Ayuda para realizar APIS XML y JSON.
* Autenticación OAuth 2.0. Proporciona seguridad.
* Autenticación de descargas de navegador.
* Soporte para compartir.
Precios:
* Almacenamiento: 0.02$
* Red: entrada gratuita - salida 0,12$ por GB.

#### - Amazon S3 y Amazon Glacier.

Amazon Glacier es un servicio de almacenamiento de bajo coste, que ofrece almacenamiento seguro y duradero para archivar datos. Para mantener un bajo coste, Amazon Glacier está optimizado para datos a los que se accede con poca frecuencia y para cuando se necesitan tiempos de recuperación de varias horas.
Características y ventajas de Amazon Glacier:
* Bajo coste. A partir de 0.01$ por GB al mes.
* Seguridad.
* Durabilidad. Este servicio almacena los datos de forma redundante para prevenir pérdidas de datos.
* Flexibilidad. Es un servicio muy escalable.
* Sencillez. Facilita la gestión del sistema.
* Está diseñado para utilizarse con otros servicios de Amazon Web Services.
Precios:
* Al empezar a utilizarse se recibe un año de servicio gratuito con 20.000 solicitudes GET, 2.000 solicitudes PUT y 15 GB de transferencia de datos salientes.
* Después cuesta 0,01 GB al mes.

##### Conclusiones.

Es más útil el servicio que proporciona Google ya que el servicio que proporciona Amazon está optimizado para datos a los que se acceden con poca frecuencia y en nuestro proyecto esperamos que se acceda a nuestros recursos con frecuencia. (Eso es solo Amazon Glacier, S3 si tiene almacenamiento en tiempo real)
Otro punto interesante para el servicio de Google es que proporciona de manera sencilla formas de empezar a utilizarlo.
Por último, otro punto en el que gana el servicio de Google es en el precio tal y como se observa en la noticia del enlace de InformationWeek de la bibliografía.

##### Bibliografía.

https://cloud.google.com/storage/
http://aws.amazon.com/es/glacier/
http://www.informationweek.com/cloud/infrastructure-as-a-service/google-wins-in-amazon-cloud-price-battle/d/d-id/1141560

### Google Cloud Datastore Vs Amazon DynamoDB
#### - Amazon DynamoDB: servicio de base de datos NoSQL.

Ofrece:
http://aws.amazon.com/es/
* Rendimiento rápido (milisegundos de un sólo dígito), partición automática y tecnología SSD en cualquier escala.
* Eliges la capacidad que deseas en cualquier momento, mediante consola o API.
* Soporta estructuras de datos de valor de clave y de documentos.
* Control de acceso mediante IAM (Identity Access Management).
* Servicio totalmente gestionado.
Coste (Región: EE.UU. Este, Norte de Virginia):
http://aws.amazon.com/es/dynamodb/pricing/
* 25 GB de almacenamiento gratuito cada mes ($0.25 por cada giga adicional ese mes).
* 25 unidades de lectura ($0.0065 por cada hora y 50 unidades) y 25 unidades de escritura (+$0.0065 por cada hora y 10 unidades).
* Transferencia de datos entrantes gratis.
* Transferencia de datos salientes:
* Primer GB/mes - $0.000/GB
* Hasta 10 TB/mes - $0.120/GB
* Siguientes 40 TB/mes - $0.090/GB
* Sigts. 100 TB/mes - $0.070/GB
* Sigts. 350 TB/mes - $0.050/GB
Facilidad de uso:
http://aws.amazon.com/es/dynamodb/getting-started/
Utiliza Java, .NET o PHP para utilizar el SDK para gestionar las tablas, en ciertas ocasiones permite la gestión mediante la consola.

#### - Google Cloud Datastore: servicio de base de datos NoSQL.

Ofrece:
https://cloud.google.com/datastore/docs/concepts/overview
* Robustez.
* Escalabilidad.
* Alta disponibilidad de lectura y escritura.
* Fuerte consistencia para lectura y anteriores queries.
* Consistencia final para el resto de queries.
Coste:
https://cloud.google.com/datastore/#pricing
* Almacenamiento gratuito hasta 1GB diario (+$0.18 GB/mes).
* 50000 operaciones de escritura al día (+$0.06 por cada 100000 operaciones).
* 50000 operaciones de lectura al día (+$0.06 por cada 100000 operaciones).
Facilidad de uso:
https://cloud.google.com/datastore/docs/apis/overview
Las siguientes referencias están disponibles:
* JSON API.
* Definiciones del protocolo del buffer para mensajes y servicios (librerías para Java y Python).
* GQL (lenguaje similar a SQL para recuperar entidades o claves de la base de datos).

### Google Cloud SQL Vs Amazon RDS
#### - Google Cloud SQL: Servicio de BD relacionales en la nube.

* Ofrece alojamiento para BD MySQL en la nube.
* Facturación estimada para nuestro proyecto:
** Desde $0,025/hora ó $0,36/día.
** Facturación por ancho de banda: $0,12/GB
** Facturación por almacenamiento: $0,24/GB al mes
* Sencillez de uso: Muy sencillo, administración mediante interfaz web o línea de comandos. Los servidores de MySQL son mantenidos y actualizados por Google.

#### - Amazon RDS: Servicio de BD relacionales en la nube.

* Ofrece alojamiento para BD PostgreSQL, MySQL, Oracle, Microsoft SQL Server
* Facturación estimada para nuestro proyecto:
** Desde $0,02/hora
** Facturación por ancho de banda: $0,11/millón de solicitudes
** Facturación por almacenamiento: $0,12/GB al mes
* Sencillez de uso: Completo y sencillo, acceso nativo a la base de datos. Amazon mantiene y actualiza el software de la BD.

##### Conclusión

La opción provista por Amazon es más completa y se puede estimar que en nuestro caso sería más barata. Sin embargo, Google proporciona una solución más sencilla de utilizar.

## Conclusiones

Finalmente, tal y como se ha ido adelantando en las anteriores secciones, para nuestro proyecto nos resulta más interesante el uso de las herramientas de Google.
Las razones por las que elegimos este servicio son las siguientes:
* Resulta más económico utilizar los servicios de Google que los servicios de Amazon.
* En el caso de que queramos utilizar Big Data (para comprobar cómo navegan los usuarios por nuestra web) Google es la empresa más avanzada en el tema.
* Se integra de una forma muy sencilla con el uso de herramientas como Eclipse.
* Proporciona un mantenimiento transparente del sistema.
En definitiva, las herramientas que usaríamos serían:
* Google App Engine.
* Google Cloud Storage
* Google Cloud DataStore
Respecto a la comunicación entre el backend y el frontend no parece haber ningún problema (al menos en el caso de las herramientas de Google) ya que proporcionan otro producto para encolar las acciones (Cloud Platform Task Queues).