Computación voluntaria con CouchDB

Embed Size (px)

Citation preview

CouchDB y la computacin voluntaria

Juan Julin Merelo GuervsOficina de Software Libre&Grupo GeNeuraUniversidad de Granada@jjmerelo

Imagen de sunlight in a jar en http://www.flickr.com/photos/sunlightinajar/1111631514/in/photostream/

Lecciones de andaluz (oriental)

Para programadores

He pedido traduccin simultnea de mi idioma al vuestro, pero la organizacin no me la ha podido proporcionar. As que para una correcta comprensin de mi charla, me veo obligado a impartirles unas cuantas lecciones de pronunciacin de mi idioma materno: el andaluz oriental.

Git

Github

CouchDB

JavaScript

La academia andaluza oriental de la lengua, reunida en Porcuna, no ha logrado ponerse de acuerdo sobre la correcta pronunciacin de esta palabra. Oscila entre jjjjjjavahcr y avahcr, pasando por javahcr y havahcr

Por qu?

Imagen de la izquierda de http://www.flickr.com/photos/cipherswarm/2414578959/ Christopher Bowns, de la derecha de ario_ http://www.flickr.com/photos/ario/4422273371/in/photostream/ No todo el mundo puede contar con un supercomputador. La computacin voluntaria tiene su origen en el proyecto SETI@Home de anlisis de seales procedentes del espacio buscando regularidades.

Lista de deseos

Bajo umbral de entrada

Escalabilidad masiva

Sistema todo-en-uno

Tolerancia a fallos (salvo fallos bizantinos)

Foto subida por Texas_mustang a Flickr en http://www.flickr.com/photos/astros/3977731447/in/photostream/

Por tanto...

Necesitamos un almacn de objetos

Imagen de Michael Flick en http://www.flickr.com/photos/17773534@N03/3237000861/in/photostream/Object Store en general se define por oposicin a una base de datos tradicional, en la que las columnas son fijas y se estructuran en tablas que tienen relacin unas con otras. Una object store, o key-value store, o base de datos NoSQL, almacena documentos indexados, habitualmente, por una clave.

Deshojando la margarita

Qu tiene de bueno CouchDB?

Fcil de instalar (sudo apt-get install couchdb)Posiblemente ya lo est (desktopcouch):/usr/lib/desktopcouch/desktopcouch-get-porthttp://localhost:/_utils

Ms seguro:file:///home/{username}/.local/share/desktop-couch/couchdb.html

Hosting gratuito: CloudAnt, Iriscouch

En realidad, es una situacin bastante transitoria, porque Ubuntu one no va a funcionar ya sobre l; aunque otras utilidades, desde Evolution hasta Gwibber, hacen uso de l para almacenar cosas.La documentacin dice que debera funcionar esto: dbus-send --session --dest=org.desktopcouch.CouchDB --print-reply --type=method_call / org.desktopcouch.CouchDB.getPort pero no siempre va. Al parecer, en Fedora va as.El interfaz que se muestra se llama Futon, y est escrito en JS/JQuery. Es el interfaz estndar para trabajar con CouchDB.

Y adems

Fcil de usar (interfaz REST)

Versionado de documentos

Actualizaciones en tiempo real mediante _changes

Soporte profesional con CouchBase

No se vayan todava, an hay ms.

Una buena comparacin en esta direccin http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis que incluye adems a otras muchas.Imagen en http://www.flickr.com/photos/thristian/4870449203/ por Thristian.

Volvamos a la computacin (in)voluntaria

BOINC, paradigmtico.

Infraestructura basada en PHP/MySQL

Capaz de manejar 8 millones de peticiones al da

Dato del trabajo de D. B. Anderson, http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1572226 Imagen de http://www.flickr.com/photos/23497193@N07/2870438187/in/photostream/ por frseti

Venga, confiesa, para qu lo quieres?

Ciencia low-cost.

Ciencia ciudadana.

Experimentos con algoritmos evolutivos

Ciencia web: redes sociales + sistemas computacionales

Imagen de StudioTempura en http://www.flickr.com/photos/zero101/4783232763/in/photostream/

Vale, me has convencido. Qu necesitas?

Tareas

UsuariosGrupos

Estadsticas

GUI

Imagen de UnitedBOINC http://www.unitedboinc.com/en/website-info/39-site-info/97-how-boinc-works Imagen del esquema de BOINC http://bof.linuxforum.dk/2005/slides/Carlos/tappingthematrix.html

Podr my CouchDB con esto?

Imagen de Kalexanderson en http://www.flickr.com/photos/kalexanderson/5491910420/in/photostream/

O, dicho de otro modo

Ensanos ya el cdigo, cohone!

Imagen de Tojosan en http://www.flickr.com/photos/tojosan/448977929/in/photostream/

Toma cdigo

bzr branch lp:couchdb-codemotion-ejemplos

https://launchpad.net/couchdb-codemotion-ejemplos

El cdigo tiene licencia GPL, as que podis hacer lo que queris con l.Imagen de Daniel*1977 en http://www.flickr.com/photos/didmyself/2391229347/in/photostream/

Venga, vamos a ello.

Creemos la base de datos

El interfaz se llama futon. Adentrarse en el mundo del couchdb es como meterse en el Ikea: no hay ms que colchones, tresillos, sofases y cosas por el estilo. Queda terminantemente prohibida la produccin de chistes que incluyan la palabra verbenero, desorejado y cosas por el estilo.

Chuck Norris no usara el GUI

curl -X PUT http://127.0.0.1:5984/dameargo

jmerelo@sheldon:~/$ lwp-request -m PUT http://localhost:5984/dameargoPlease enter content (text/plain) to be PUTed:[^D]{"ok":true}

curl -X PUT http://127.0.0.1:5984/dameargo

Referencia: la gua de CouchDB: http://guide.couchdb.org/draft/tour.htmlEl segundo es para nota, claro, en caso de tener instalado LWP, la librera de Perl para interaccionar con HTTP.Muestra de que CouchDB usa un interfaz REST. De que se puede acceder desde el ordenador local (y slo el) por defecto. Y del admin party, todo el mundo es admin. Chungo, pero veamos como lo solucionamos.El tipo de letra, por cierto, es inconsolata.

Voluntaria s, pero no involuntaria

jmerelo@penny:~/txt/docencia/tutoriales$ curl -X PUT http://CvavBlnCni:yBJzPFKYie@localhost:47143/una_nueva{"ok":true}

jmerelo@penny:~/txt/docencia/tutoriales$ curl -X PUT https://jjmerelo:[email protected]/otra_mas{"ok":true}

Se supone que hemos averiguado antes cual es el puerto usando la orden correspondiente o bookmarkeado la direccin (generada cada vez que se conecta uno). El nombre usuario y la clave son tambin aleatorios. Imagen de Sam Newman en http://www.flickr.com/photos/samnewman/201940197/in/photostream/ Con las mismas, se puede usar DELETE para borrarla. Ms fcil, imposible.

Ya est bien de crear bases de datos. O algo de eso.

CouchDB almacena objetos JSON.

Cada objeto tiene un _id

Ms metadatos: _revision

Computacin voluntaria: tareas + usuarios

Comencemos con las tareasObjetos JSON en una base de datosID de tarea

Datos de tarea

jmerelo@penny:~/txt/docencia/tutoriales$ curl -X POST https://jjmerelo:[email protected]/ahora_no -H "Content-Type: application/json" -d '{ "_id":"thefirst" }'{"ok":true,"id":"thefirst","rev":"1-967a00dff5e02add41819138abb3284d"}

Y CouchDB es guay, porque podemos meter cualquier cosa.Una introduccin buena al uso de la lnea de rdenes est en http://www.morethanseven.net/2007/12/11/using-curl-to-play-with-couchdb.html

10110101

10111101

10110101

10111101

10100001

00110101

10101101

00110101

10111101

10101101

10110101

10101101

00110101

10101101

10110101

10101101

10101101=5

10110101=5

10101111=6

Entonces, qu va a ser?

Chuck Norris tambin se cansa de la lnea de rdenes

Y usa, por supuesto, node.js

jmerelo@penny:~$ sudo apt-get install nodejsjmerelo@penny:~$ curl http://npmjs.org/install.sh | sudo shjmerelo@penny:~$ sudo npm install nano

Uso node.js porque est hecho en JS, y se supone que esta charla va de JS. En todo caso, es un intrprete de JS con un modelo muy interesante, y al estar basado en eventos, encaja muy bien.Instrucciones bsicas para usar nano http://writings.nunojob.com/2011/08/nano-minimalistic-couchdb-client-for-nodejs.htmlY para saber ms, http://nodejs.org Ojito! Los mdulos de nodejs se instalan, salvo que se lo digas de otra manera, en el directorio superior al directorio en curso, as que si cambias las cosas de sitio ten cuidadn.

Se acabaron los one-liners

Imagen de Marco de Mojana http://www.flickr.com/photos/mmojana/225310330/in/photostream/ El cdigo adaptado de http://writings.nunojob.com/2011/08/nano-minimalistic-couchdb-client-for-nodejs.html Usamos nano, un mdulo para trabajar con CouchDB en node.js

Las tareas hay que hacerlas

Node.js funciona de forma asncrona. Un poco como Jquery, pero todava no hemos aprendido como hacer esas cosas en el propio CouchDBUna forma fcil de decir que las tareas se han llevado a cabo es usar las versiones: con la versin 2, hecha. Con la versin 1, por hacer. As, de forma natural, podemos seleccionar las tareas que nos quedan por hacer. En este caso usamos node.js para hacerlo.

Poco a poco, va hilando la vieja el copo

Imagen de Boston Public Library http://www.flickr.com/photos/boston_public_library/6031892513/in/photostream/ Trabajar con el interfaz bulk reduce el overhead, porque nos ahorramos la latencia por todos y cada uno de los documentos. En general, habr que tener en cuenta cuanto tardan en llevarse a cabo las tareas para que la latencia (ms que otras cosas) no se coman la ventaja que tenemos distribuyendo el trabajo.

Espera todo eso tiene que hacer el voluntario?

Hay voluntarios muy voluntariosos.

Pero tampoco hay que abusar.

Usemos los adjuntos de CouchDB

Cualquier objeto puede llevar documentos binarios adjuntos.

Cucha, que no s como hacer peticiones

Peticiones en CouchDB === Vistas.

Las vistas son documentos de diseo.

Vistas escritas en JavaScript En cualquier otro lenguaje, tambin.

Dos partes: map y reduceMap: funcin sobre cada documento

Reduce: aplicada a lista de documentos/claves

En un sistema de computacin voluntaria hay que seleccionar, al menos, unos pocos de los que haya disponibles para evaluar. Digamos que la revisin primera es la tarea sin hacer, la segunda la tarea realizada y la tercera comprobada. Seleccionemos a todos los elementos que estn en su segunda versin, para comprobarlos. El interfaz bsico slo permite seleccionar rangos de Ids. Creando Ids a medida, se pueden encontrar formas de particionar la BD, pero es ms elegante (pero menos eficiente) hacer peticiones basadas en el contenido. Imagen titulada Phan Thiet fisherman de Lucas Jans http://www.flickr.com/photos/vsf/2130475253/in/photostream/

Cmodamente, desde nuestro colchn

Creamos una vista temporal para evaluarla.

La funcin map de la izquierda se aplica a todos los elementos de la base de datos y produce la lista que se ve. Desde el mismo interfaz se puede guardar la vista para usarla ms adelante.

An ms comodamente, desde la lnea de rdenes

Usando CouchApp: sudo pip install couchapp

jmerelo@penny:~$ couchapp push https://usuario:[email protected]/ahora_no

CouchApp se puede descargar de Couchapp.org y de otras mltiples formas, esa es slo una de ellas.Con un par de rdenes se crea una aplicacin (que era, posiblemente, lo que tenamos que haber hecho desde el principio) y aadimos una vista. Editamos la vista y la subimos CouchDBBorrar cuidadosamente los reduce si no los vamos a usar, ojo.

Vamos a bajarnos del silln

En la variedad est el gusto:npm install cradle

Cradle es otro de los competidores de nano en el mercado de los mdulos de couchdb para nodejs. Es parecido, en realidad, aunque tiene un nivel un poco ms alto.

Finalmente, llegamos a la computacin voluntaria de veras

Recuperar del servidor al navegador

Hacer cosas en el navegador

Devolver.

Por supuesto, con JQuery!

Imagen de rikkis_refuge en http://www.flickr.com/photos/rikkis_refuge/417852567/in/photostream/Una pena que los nicos voluntarios que hayamos encontrado para nuestro sof sean gatos, pero menos da una piedra. No parecen muy voluntariosos, tampoco.

T de quin eres?

Volvamos a la pesca

Imagen en http://www.flickr.com/photos/shutterhack/3688916759/in/photostream/ por Fadzly @shutterhackVamos a ver cmo se recuperara la informacin en JQuery

Y ahora, a hacer sushi

Imagen de catorze14 en http://www.flickr.com/photos/catorze/5782407641/in/photostream/

Sushi es como le llamamos en Andaluca Oriental al pescato frito. Es decir, se trata de, una vez recuperada la informacin, hacer algo con ella.Aqu le hemos aadido un par de cosas ms: nos bajamos slo los que estn en un estado determinado 1, es decir, sin evaluar, y adems le decimos que incluya con cada resultado el documento correspondiente. Nios, no hagis eso en casa. Eso es slo para que aprendis. Ya sabis, el que sabe, sabe, y el que no aprende.

No te lo quedes todo, quiyo

Hay que devolver a la base de datos lo que se ha calculado; se le aade al objeto el resultado y se vuelve a colocar en la base de datos.

y as sucesivamente

Segunda fase de verifificacin.

Particionado probabilstico para muchos clientes.

Replicacin de ida y vuelta para menor latencia (usar desktopcouch).

Prediccin de prestaciones social

...

Lo ms importante

Ni siquiera tiene que ser voluntaria

Esto es todo

Muchas gracias

Preguntas? + Perfil

Socio de Digital Learning, enseanza virtual: http://dlformacion.com

Lujoyglamour.net, la nica novela que te puedes descargar de CPAN: cpan Net::Lujoyglamour

Oficina de software libre de la UGR: http://osl.ugr.es

Grupo de investigacin GeNeura http://geneura.wordpress.com

Pulse para editar el formato del texto de ttulo