La compra hace 2 años de SpringSource por parte de VMware me pilló por sorpresa, ya que no entendia que hacia un proveedor de soluciones de virtualización comprando una empresa cuyo negocio era un framework para construir aplicaciones Java. Los analistas rápidamente comenzaron a elocubrar, que si VMware queria ampliar mercado ya que la cotización en bolsa estava estancada, que si significava la muerte de SpringSource (lo mismo dijeron de Hyperic), … Pero pocos se imaginaron entonces que su intención era ofrecer una solución PaaS, a pesar de que en la nota de prensa lo decía muy claro y que a los pocos dias se anunciara Cloud Foundry Enterprise Java Cloud, una especie de PaaS para aplicaciones Java corriendo en AWS. Pasado un tiempo, parecia además que no tenian una estrategia muy clara, que primero creo una alianza con salesforce, que luego la alianza es también con Google. Pués bien, la semana pasada nos vuelven a sorprender y anuncian la creación de Cloud Foundry, un PaaS de código abierto.
¿En que se diferencia esta de otras soluciones como Google AppEngine, Heroku o Engine Yard? Pués basicamente en 2 aspectos:
- El primero es que es la primera plataforma PaaS liberada como open-source y que no está ligada a ningún entorno cloud concreto. Puedes descargarte el codigo, modificarlo, e instalarlo donde quieras (en local, en AWS/RackSpace/OpenStack, bajo una infraestructura VMware, …).
- Y la segunda es que no está limitada ni a un lenguaje ni a un framework concreto, sino que admite algunos de los lenguajes y frameworks más populares actualmente, como Spring for Java, Grails, Ruby on Rails, Sinatra for Ruby y Node.js, además de soportar 3 motores de BD diferentes, MongoDB, MySQL y Redis.
En definitiva, que es la primera plataforma PaaS completamente gratuita y que no nos liga a una tecnologia en concreto (vendor lock-in). Como esta estrategia es bastante disruptiva, seguramente dinamizará el mercado y pronto veremos otras soluciones parecidas.
El servico se ofrecerá en 4 sabores, 2 de los cuales ya estan disponibles:
- CloudFoundry.com: en entorno PaaS operado por Vmware, completamente montado y listo para usar. De momento este servicio está en beta y, por tanto, se ofrece de forma gratuita, aunque en un futuro está previsto que este entorno sea explotado comercialmente.
- CloudFoundry.org: la comunidad open-source donde podremos participar en su desarrollo, y/o descargar e instalar la plataforma donde te plazca
- Cloud Foundry Micro Cloud: una imagen gratuita para VMware Fusion o Player y lista para ser usada en tu escritorio. La idea es que puedas desarrollar y probar en tu propia estación de trabajo y luego despliegues contra un entorno de producción que se comporta exactamente igual al de tu escritorio. El servicio estará disponible durante el 2do trimestre de este año.
- Cloud Foundry for the Enterprise and Service Providers: una versión comercial para ser utilizada en un entorno empresarial o por parte de proveedores de servicios que quieran ofrecer por si mismos un PaaS.
Si no lo has hecho ya, te recomiendo que pruebes la primera opción y te apuntes a la beta de CloudFoundry.com. Las invitaciones para probar el servicio se estan entregando con cuentagotas, pero con un poco de suerte te llegará una en breve. Como yo ya he recibido la mia, os voy a explicar mis experimentos.
En primer lugar instalamos Ruby y RubyGems, ya que la interficie de comandos para interactuar con los servicios está basada en este lenguaje y viene empaquetada como una gema. Acto seguido procedemos a instalar vmc:
~$ sudo gem install vmc
Fetching: vmc-0.3.10.gem (100%)
Successfully installed vmc-0.3.10
1 gem installed
Installing ri documentation for vmc-0.3.10…
Installing RDoc documentation for vmc-0.3.10…
Una vez instalada correctamente, indicamos que servidor nos va a dar servicio. En este caso escogeremos el servidor beta de cloudfoundy.com (aunque nos podemos descargar e instalar nuestro propio servidor):
~$ vmc target api.cloudfoundry.com
Succesfully targeted to [http://api.cloudfoundry.com]
Ahora le indicamos al servidor nuestras credenciales:
~$ vmc login
Email: xxx@xxx.xxx
Password: *********
Successfully logged into [http://api.cloudfoundry.com]
Acto seguido nos creamos una aplicación de pruebas. Vamos con ejemplo sencillo usando Ruby y el framework de Sinatra:
~$ cd repos
~/repos$ mkdir test-frodenas
~/repos$ cd test-frodenas/
~/repos/test-frodenas$ vi test-frodenas.rb
require ‘sinatra’
get ‘/’ do
“Hello Ferdy from Cloud Foundry”
end
Y ahora vamos a desplegar nuestra aplicación. Dejaremos todas las opciones por defecto excepto el nombre de la aplicación:
~/repos/test-frodenas$ vmc push
Would you like to deploy from the current directory? [Yn]:
Application Name: test-frodenas
Application Deployed URL: ‘test-frodenas.cloudfoundry.com’?
Detected a Sinatra Application, is this correct? [Yn]:
Memory Reservation [Default:128M] (64M, 128M, 256M, 512M, 1G or 2G)
Creating Application: OK
Would you like to bind any services to ‘test-frodenas’? [yN]:
Uploading Application:
Checking for available resources: OK
Packing application: OK
Uploading (0K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK
Comprobamos que la aplicación se ha levantado correctamente:
~/repos/test-frodenas$ vmc instances test-frodenas
+——-+———+——————–+
| Index | State | Start Time |
+——-+———+——————–+
| 0 | RUNNING | 04/21/2011 09:56PM |
+——-+———+——————–+
~/repos/test-frodenas$ vmc stats test-frodenas
+———-+————-+—————-+————–+————–+
| Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime |
+———-+————-+—————-+————–+————–+
| 0 | 0.1% (4) | 22.0M (128M) | 44.0K (2G) | 0d:0h:2m:50s |
+———-+————-+—————-+————–+————–+
Y solo nos queda acceder a la URL de la aplicación para comprobar que responde:
En caso de tener algún problema, podemos revisar los logs
~/repos/test-frodenas$ vmc logs test-frodenas
====> logs/stderr.log < ==== 172.30.8.253 - - [21/Apr/2011 19:57:27] “GET / HTTP/1.0” 200 30 0.0008 172.30.8.253 - - [21/Apr/2011 19:57:28] “GET / HTTP/1.0” 200 30 0.0003 172.30.8.253 - - [21/Apr/2011 19:57:28] “GET /favicon.ico HTTP/1.0” 404 18 0.0003 ====> logs/stdout.log < ==== == Sinatra/1.2.1 has taken the stage on 33248 for production with backup from Thin » Thin web server (v1.2.11 codename Bat-Shit Crazy)
Maximum connections set to 1024
Listening on 0.0.0.0:33248, CTRL+C to stop
Vamos a explorar que otras opciones tenemos disponibles:
~/repos/test-frodenas$ vmc help
Usage: vmc [options] command [] [command_options]
Try ‘vmc help [command]’ or ‘vmc help options’ for more information.
Currently available vmc commands are:
Getting Started
target [url] Reports current target or sets a new target
login [email] [–email, –passwd] Login
info System and account information
Applications
apps List deployed applications
Application Creation
push [appname] Create, push, map, and start a new application
push [appname] –path Push application from specified path
push [appname] –url Set the url for the application
push [appname] –instances Set the expected number of instances
push [appname] –mem M Set the memory reservation for the application
push [appname] –no-start Do not auto-start the application
Application Operations
start Start the application
stop Stop the application
restart Restart the application
delete Delete the application
rename Rename the application
Application Updates
update [–path] Update the application bits
mem [memsize] Update the memory reservation for an application
map Register the application to the url
unmap Unregister the application from the url
instances <num|delta> Scale the application instances up or down
Application Information
crashes List recent application crashes
crashlogs Display log information for crashed applications
logs [–all] Display log information for the application
files [path] [–all] Display directory listing or file download for [path]
stats Display resource usage for the application
instances List application instances
Application Environment
env List application environment variables
env-add <variable[=]value> Add an environment variable to an application
env-del Delete an environment variable to an application
Services
services Lists of services available and provisioned
create-service [–name,–bind] Create a provisioned service
create-service Create a provisioned service and assign it
create-service Create a provisioned service and assign it , and bind to
delete-service [servicename] Delete a provisioned service
bind-service Bind a service to an application
unbind-service Unbind service from the application
clone-services Clone service bindings from <src-app&ft; application to
Administration
user Display user account information
passwd Change the password for the current user
logout Logs current user out of the target system
add-user [–email, –passwd] Register a new user (requires admin privileges)
delete-user Delete a user and all apps and services (requires admin privileges)
System
runtimes Display the supported runtimes of the target system
frameworks Display the recognized frameworks of the target system
Misc
aliases List aliases
alias <alias[=]command≶ Create an alias for a command
unalias Remove an alias
targets List known targets and associated authorization tokens
Help
help [command] Get general help or help on a specific command
help options Get help on available options
Así pues una de las opciones es ver que entornos de ejecución tenemos disponibles:
~/repos/test-frodenas$ vmc runtimes
+——–+————-+———–+
| Name | Description | Version |
+——–+————-+———–+
| node | Node.js | 0.4.5 |
| java | Java 6 | 1.6 |
| ruby18 | Ruby 1.8 | 1.8.7 |
| ruby19 | Ruby 1.9 | 1.9.2p180 |
+——–+————-+———–+
Los frameworks:
~/repos/test-frodenas$ vmc frameworks
+———+
| Name |
+———+
| spring |
| node |
| grails |
| sinatra |
| rails3 |
+———+
E incluso conocer los servicios que podemos utilizar:
~/repos/test-frodenas$ vmc services
============== System Services ==============
+———+———+——————————-+
| Service | Version | Description |
+———+———+——————————-+
| mysql | 5.1 | MySQL database service |
| mongodb | 1.8 | MongoDB NoSQL store |
| redis | 2.2 | Redis key-value store service |
+———+———+——————————-+
=========== Provisioned Services ============
Y ya solo nos queda parar o eliminar la aplicación para dejar el entorno limpio:
~/repos/test-frodenas$ vmc delete test-frodenas
Deleting application [test-frodenas]: OK
Si esto de trabajar con línea de comandos os parece *anticuado* y preferis utilizar un IDE, teneis a vuestro disposición la SpringSource Tool Suite, un editor completo para construir aplicaciones bajo Spring, o simplemente el plugin de CloudFoundry en el Marketplace de Eclipse. Os dejo algunas imagenes del plugin:
Tiene buena pinta ¿verdad? En un próximo post explicaré como instalar el entorno en tu propio servidor, ¿o alguien lo ha hecho ya y nos cuenta su experiencia?
Buena entrada. Me ha quedado bastante claro las diferentes soluciones que van a plantear. Sin duda tiene una pinta excelente. Hoy mismo he hecho una prueba con la invitación que me han enviado.
Espero el siguiente post sobre como montar un servidor propio que seguro que le sacamos mucha utilidad.
Un saludo