Categories
General

Evento AWS en Barcelona by Capside

El  pasado lunes 24 estuvimos presentes en un evento de AWS organizado por Capside.
Captura de 2014-03-30 19:43:11
Repasado su web de manera rápida podemos comprobar porque se diferencian dentro del ecosistema de proveedores de servicios IT en el ámbito de la Infraestructura: sin duda se alinean a la explotación del modelo Cloud orientado a las necesidades del cliente. En definitiva expertos en arquitecturas de sistemas IT que las diseñan, subministran, mantienen y administran.
También me gustaría destacar que aseguran una visión de neutralidad trabajando con los proveedores Cloud que mejor se adaptan a los requerimientos técnicos y económicos de cada caso, proyecto o cliente. Visión que suena muy bien y que parece que encaja en este nuevo modelo de gestión de la infraestructura de TI.
Volviendo al evento después de un rodeo, su objetivo fue por un lado conocer novedades respecto a los servicios ofrecidos por AWS y por otro aportar conocimientos prácticos a través de casos reales en base a tres ejes :

  • Flexibilidad, escalabilidad y rendimiento: cómo diseñar arquitecturas elásticas y autoescalables, que le permitan ajustar sus sistemas dinámicamente a la demanda para optimizar costes garantizando siempre el mejor servicio.
  • Disponibilidad de su negocio: cómo tener sus servicios e infraestructuras siempre accesibles y operativas sin renunciar a un estricto control de costes.
  • Controlar y reducir costes TIC: al realizar la transición de servicios on-premise o físicos hacia “la nube” con arquitecturas elásticas.

Respecto a las novedades de AWS, Tiago Henriques ( Amazon Solutions Architect) realizó una presentación de como utilizan los clientes sus servicios dónde hizo especial mención de Cloud Formation en su apuesta de la definición de servicios en base a plantillas llegando a facilitar una solución deseada por todos como es el verdadero “reversionado” de entornos y las posibilidades que esto ofrece en el ámbito de las simulaciones junto con el paradigma de la integración continua. Uff… de verdad que como mínimo suena muy bien.
Captura de 2014-03-30 19:51:41
Tiago también repasó  DYNAMODB su servicio de bases de datos NoSQL dónde destacó aspectos como el rendimiento dónde utilizar tecnología SSD asegura tiempos de lecturas por debajo de los 5ms i escrituras por debajo de los 10ms. Ya casi al final de su intervención se introdujo como novedad Redshift como su solución de servicio de “data warehouse” con capacidades de Petabyte que según su web convierte el proceso de almacenamiento y análisis de enormes cantidades de datos en una tarea fácil ya que permite utilizar tus propias herramientas de “business intelligence” facilitando el acceso mediante conectores ya disponibles como los típicos JDBC, ODBC,…
En la parte central del evento vimos diferentes casos de éxito con empresas que por naturaleza necesitan muchísima flexibilidad en sus servicios/aplicaciones como el de Eduard Giménez, Co-fundador de la start-up Emtrics / Keweno y Raquel Priego, Corporate Communication Manager de ByHours que actualmente utilizan los servicios de Capside sobre AWS.
Ya para finalizar José Luís Martínez, CTO de CAPSiDE y Josep Ruano, CEO de CAPSiDE nos deleitaron arriesgando contra “efectos demo” una específica de las posibilidades de Autoscaling mediante EC2 sobre un escenario típico de aplicación de tres capas.
Y hasta aquí la crónica del evento. Buen vuelo!
Cloudadmins.org

Categories
Bigdata General Guide In detail NoSQL OpenSource Social

Datos en formato Grafo (Parte II – Web Semántica o Linked Data)

La Web Semántica también llamada Web 3.0 o Linked Data, es una funcionalidad de la Web que permite encontrar, compartir y combinar la información más fácilmente. Es una iniciativa de Tim_Berners-Lee (director del W3C e inventor de la Web) para permitir que la información que reside en la red sea accesible y “comprensible” no sólo por los humanos, sino también por las máquinas. Es una revolución tecnológica que está cambiando la forma de entender la Web y obligando a que todo evolucione: los buscadores, los navegadores, el desarrollo y el SEO.  Aquí es donde aparecen actores que quizás no les interese esta evolución.

La Web Semántica propone nuevas técnicas y paradigmas para la representación del conocimiento que faciliten la localización, compartición e integración de recursos a través de la Web. Estas nuevas técnicas se basan en la introducción de conocimiento semántico explícito que describa y/o estructure la información y servicios disponibles, de forma apropiada de ser procesada automáticamente por un software. La Web Semántica mantiene los principios que han hecho de la web actual un éxito, como son los principios de descentralización, compartición, compatibilidad, y la apertura al crecimiento.

Hay artículos que mencionan el fin de los grandes buscadores como Google si se aplicara la Web Semántica en toda la red. En este contexto un problema clave es alcanzar un entendimiento entre usuarios, desarrolladores y programas de muy diverso perfil. Uno de los ejes principales de esta visión es la noción de ontología, que viene del campo de la Inteligencia artificial, como herramienta clave para alcanzar dicho entendimiento entre las partes que participan de este conocimiento común.

Esquema de la Web Semántica

grafic1

Para entender la Web Semántica en su totalidad tenemos que entender las partes de RDF, OWL y el lenguaje de consultas sobre estos formatos denominados SPARQL. Como se puede ver en el siguiente esquema, un XML es un subconjunto RDF, como un RDF es un subconjunto de OWL. Vienen a ser un OWL que incluye las propiedades del RDF y el RDF incluya las propiedades del XML.

OWL, RDF y XML

grafic2

Comparación Web Actual con Web Semántica

En el gráfico se puede ver una comparativa de la Web Semántica con la Web actual, tal como se relacionan sus elementos entre ellas. El HTML tiene un tipo de relación simple llamada hipervínculo (HREF) que relaciona recursos (HTML) sin nombrar el tipo de relación, en cambio la Web Semántica tiene muchos tipos de relaciones entre distintos tipos de información, esta es una de las principales grandezas que tiene esta nueva tecnología.

grafic

Comparación generación Web actual con Web Semántica

Característica 1ª Generación 2ª Generación
Lenguaje principal HTML XML (RDF, OWL)
Forma y estructura Documentos no estructurados Documentos estructurados
Semántica Semántica implícita Etiquetado explícito (metadatos, web semántica)
Relación entre contenido y forma HTML = fusión de forma y contenido Estructura en capas de forma y contenido: XML + transformación (p.ej., XSL) a HTML, WML, PDF, u otros formatos
Editabilidad Documentos estáticos Documentos dinámicos
Descomponibilidad y recomponibilidad Sitios web monolíticos, independientes Bricolaje (agregación), sindicación, reasignación de contenido
Interactividad Medio de difusión unidireccional Web editable, bidireccional
Audiencias Para consumo humano Para humanos y ordenadores (p.ej., servicios web)
Control de producción Centralizado Descentralizado (peer-to-peer P2P)

Utilidad y ventajas de la Web Semántica

Para el fin de recuperar información, la Web semántica pretende la creación de una nueva forma de intercambio de datos que se fundamente en las representaciones de la información contenida en los recursos de la Web, de manera que puedan ser entendidos por las máquinas.

Se busca la mejora en la comunicación entre las máquinas y los humanos, reduciendo considerablemente la acción de estos segundos sobre los primeros. La forma de conseguirlo es dando a la Web un mayor significado, con lo cual se favorece la compartición, procesamiento y transferencia de información de forma sencilla.

La principal ventaja de la Web Semántica es recuperar información. Ésta permite al usuario dejar en manos del software, tareas de procesamiento o razonamiento de un determinado contenido. Por otra parte, el introducir significado a una Web mejora la eficacia de los buscadores, ya que facilita su tarea de estudio del documento. De esta manera, se puede afirmar que la Web Semántica facilita la localización de recursos; la comunicación entre programas y personas; y el procesamiento y manipulación de datos e información de manera automática en lugar de manualmente, como hasta ahora.

En conclusión, se intenta llegar a un estándar en esquematizar la información para poder poner la gran cantidad de información de la red en orden. Una mejor organización significa una mejor agilidad en moverse por la red. Además que se distribuye de forma más humana posible en comparación como se hace actualmente.

Algunos creen que la implementación de la nueva web será el fin de los grandes buscadores (ya que la web pasaría a ser descentralizada); otros que simplemente evolucionarán a mejor aunque tendremos más varias disponibilidades; o otros creen que habrán buscadores más temáticos y no tan generales. Lo más importante es que la libre circulación de la información dará mejores resultados.

Como ejemplos de casos prácticos actuales podemos encontrar:

  • Redes Sociales como Facebook, LinkedIn, Myspace, OpenSocial, etc.

  • Amarok y otros reproductores MP3 que tienen una base de datos de música en RDF.

  • Parecido a las redes sociales hay el buscador y reproductor musical Spotify, Last.fm. dónde el usuario, a partir de un grupo de música puede ir descubriendo grupos o músicas semejantes.

  • Hay experimentos como la Dbpedia.org que mapea toda la información de la Wikipedia para ser migrada a RDF. Otros como OntoWorld es un nuevo buscador desarrollado por MediaWiki. Hice pruebas con la DBPedia y busqué “Viajar+Joven” y me apareció Albergues (aquí la inteligéncia de que automáticamente relacionó Joven con viajes LowCost)

Antecedentes

Antes de entender la Web Semántica, hay que entender sus antecedentes y su evolución hacia la posible Web 3.0.

En el inicio del WWW (World Wide Web) teníamos la Web 1.0 donde todas las páginas eran estáticas, principalmente creadas con el lenguaje HTML, con unos buscadores muy limitados. La mayoría de contribución de la red eran Webs de corporaciones, identidades públicas y privadas. El usuario tenía muy limitada su participación en ellas lo que la convertía en una red unidireccional. Más tarde, se empezó con la creación de páginas personales estáticas. Posteriormente, el Web 2.0 revolucionó el WWW con la llegada de lenguajes como el PHP, Flash, Java, etc. Estos lenguajes permitieron desarrollar Webs dinámicas y multimedia. La web dinámica tiene como principal protagonista el usuario humano que escribe artículos en su blog o colabora en un wiki. En cambio, la web semántica orienta el protagonismo en agentes inteligentes que entiendan de lógica descriptiva en OWL; y concebida para que las máquinas hagan el trabajo de las personas a la hora de procesar la avalancha de información publicada en la Web. Con ella encontramos ya inteligencia artificial en la web.

No está aún del todo claro si la Web Semántica y la Web 3.0 son sinónimas. Se comenta que “Web 3.0” es aún un concepto demasiado abstracto para definirlo. La web 3.0 será una revolución, si como hemos comentado anteriormente; se logra una combinación efectiva entre la inclusión de contenido semántico en las páginas web y el uso de inteligencia artificial que saque partido de ella.

Podemos comprobar que el rápido desarrollo de la sociedad de la información, en concreto de las tecnologías implicadas, ha hecho posible la superación de muchas barreras. Por ejemplo: el almacenamiento de datos es un reto superado, la comunicación es también otro problema resuelto gracias a Internet. Entonces, ¿cuáles son los nuevos retos a superar? Según muchos, es la búsqueda de información y su integración.

El ejemplo más claro y más rápido que se puede encontrar está en Internet. A pesar de la gran cantidad de información que hay en la red, no se encuentra siempre lo que se busca y a veces se tarda mucho en encontrarlo. Los metadatos y las ontologías intentan mejorar estos inconvenientes, y la Web Semántica se caracteriza por incorporar básicamente éstos.

Con las ontologías se intenta encontrar un lenguaje común para describir varios temas. Una ontología combina varios esquemas en una estructura de datos, que contiene todas las entidades relevantes y sus relaciones dentro del dominio. La ontología es usada para una variedad de propósitos, incluyendo el razonamiento inductivo, la clasificación, y una variedad de técnicas de resolución de problemas. Las ontologías se usan para establecer conceptos y relaciones, pudiendo ser compartidas por todos.

Dar significado a los datos ya disponibles en Internet es una tarea que se resuelve añadiendo nuevos datos a los datos previos. Estos “meta-datos” expresan la semántica de dicha información, haciendo referencia a elementos de una ontología (compartida por todos).

La idea de la web semántica es establecer un marco, a nivel mundial, capaz de abarcar tareas como la búsqueda, teniendo en cuenta la semántica y aportar esa tecnología de integración. Así, Berners Lee, a través del consorcio W3C, pretende establecer una serie de estándares lo suficientemente consensuados como para que sean globalmente utilizados. Por ello han planteado una arquitectura general:

Las siguientes diapositivas muestran un posible camino para la evolución de Internet. En éstas, ya se habla de la Web 4.0, pero lo curioso es que aún no se ha definido ni la Web 3.0. Se pueden comprobar los antecedentes de la Web Semántica, un posible después y su línea de evolución. Claramente son unos datos muy subjetivos y no oficiales, pero da una idea de los antecedentes previos y lo que puede llegar en un futuro. Se puede comprobar que cada tecnología viene acompañada de una serie de componentes e ideas que la forman.

Categories
General In detail

Rotando logs de apache a S3

Con la llegada de Amazon AWS y conceptos como el autoescalado nos surge un reto al que tenemos que enfrentarnos: como guardamos los logs de las máquinas que pueden ser creadas y borradas en cualquier momento?
AmazonS3-Multifile2

Soluciones

Para solventar este problema las soluciones son varias. A continuación se enumeran las virtudes y defectos de algunas de ellas y veremos como poner en marcha la solución de rotar los logs a un storage basado en objetos como S3.

  • Servicio de logs en cloud: Hay muchos servicios de este tipo: loggly, sumologic, papertrail, …. Las ventajas de un servicio de estas características es que nos despreocupamos de un componente de nuestra arquitectura y nos ahorramos dolores de cabeza, a parte de las funcionalidades extras para la visualización y análisis de logs. El problema pero cómo podéis ver en los enlaces de tarifas de loggly y papertrail son los precios, sobretodo si tenemos un volumen considerable de logs.
  • FIleSystem Compartido: Esta solución tiene la desventaja que tenemos un punto más de fallo en nuestra arquitectura.
  • Syslog-ng: Con esta solución la ventaja es que tenemos una máquina con los logs centralizados, pero tenemos que tener un servicio mas corriendo y si no tenemos muchas máquinas corriendo no es una solución muy óptima por los costes añadidos.
  • Rotación de logs a storage basado en objetos: Las ventajas de esta solución es que es económica y sencilla, a parte de no tener dependencias de servicios que puedan fallar al tratarse de S3 el cual tiene una disponibilidad de 99,99% y una durabilidad de un 99.999999999%. Cómo desventajas destacaría su tratamiento que como veremos existe una alta fragmentación y que existe la posibilidad aunque sea poco probable  de perder logs .

Rotación de logs a S3

log-rotate-300x299
Para rotar los logs de apache a S3 utilizaremos la herramienta logrotate, la idea es rotar los logs cada hora y sincronizarlos con un bucket de S3 con el comando s3cmd. A parte de rotar los logs cada hora, tenemos el añadido de que si nuestra máquina está corriendo en un autoescaling group, ésta puede ser eliminada en cualquier momento. Teniendo en cuenta que primero las máquinas són paradas con un soft shutdown, podemos crear un servicio que cuando la máquina sea parada fuerce a rotar los logs para no perderlos. En caso de que la sincronización tardara demasiado Amazon haría un hard shutdown y podríamos perder los logs de las últimas dos horas.

Instalación s3cmd

En primer lugar vamos a instalar s3cmd.
El primer paso es añadir los repositorios de epel para instalar pip:

# rpm -ivh http://mirror-fpt-telecom.fpt.net/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

Desactivamos el repositorio epel, para que sólo sea utilizado cuando lo indiquemos explícitamente en yum.

# sed -i "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo

Instalamos pip  y python-magic indicando que nos active temporalmente el repositorio epel.

# yum -y install python-pip python-magic --enablerepo=epel

Instalamos s3cmd:

# pip install s3cmd

Para la configuración del s3cmd creamos el fichero de configuración correspondiente en /root/.s3cfg, sustituyendo <acces_key> y <secret_key> por las credenciales correspondientes a nuestro usuario:

[default]
access_key = <acces_key>
access_token =
add_encoding_exts =
add_headers =
bucket_location = EU
cache_file =
cloudfront_host = cloudfront.amazonaws.com
default_mime_type = binary/octet-stream
delay_updates = False
delete_after = False
delete_after_fetch = False
delete_removed = False
dry_run = False
enable_multipart = True
encoding = UTF-8
encrypt = False
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase = testtt
guess_mime_type = True
host_base = s3.amazonaws.com
host_bucket = %(bucket)s.s3.amazonaws.com
human_readable_sizes = False
invalidate_default_index_on_cf = False
invalidate_default_index_root_on_cf = True
invalidate_on_cf = False
list_md5 = False
log_target_prefix =
mime_type =
multipart_chunk_size_mb = 15
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
recursive = False
recv_chunk = 4096
reduced_redundancy = False
secret_key = <secret_key>
send_chunk = 4096
simpledb_host = sdb.amazonaws.com
skip_existing = False
socket_timeout = 300
urlencoding_mode = normal
use_https = True
verbosity = WARNING
website_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com/
website_error =
website_index = index.html

Para testear que funciona bien el s3cmd, vamos a sincronizar un archivo, supondremos que ya tenemos creado un bucket de nombre logs:

# mkdir test
# cd test
# echo "This is a test" > test
# s3cmd sync . s3://logs/

En este punto deberíamos ver cómo se ha sincronizado nuestro fichero con el bucket. Para verlo con el s3cmd:

# s3cmd ls s3://logs/

Configuración logrotate

Vamos a configurar el logrotate para que al rotar los logs del apache sincronice estos con nuestro bucket de S3. Sustituimos el fichero /etc/logrotate.d/httpd con el siguiente contenido:

/var/log/httpd/*log {
    daily
    rotate 4
    size 5k
    dateext
    dateformat +%Y-%m-%d.%s
    compress
    missingok
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
        BUCKET=logs
        INSTANCE_ID=`/usr/bin/curl --silent http://169.254.169.254/latest/meta-data/instance-id`
        /usr/bin/s3cmd -c /root/.s3cfg -m text/plain sync /var/log/httpd/*gz* s3://${BUCKET}/${INSTANCE_ID}/ > /dev/null
    endscript
}

Con esta configuración, los parámetros a tener en cuenta son:

  • daily: Nos rotará los logs diariamente, aunque en nuestro caso los vamos a rotar cada hora si ocupan más de 5Kbytes. Más adelante veremos cómo.
  • rotate 4: Nos borrará los logs a partir de 4 rotaciones.
  • size 5k: Éste parámetro hace que los logs siempre sean rotados, aunque tengamos la política daily, si éstos ocupan más de 5KB.
  • dateext: Hace que los logs sean guardados poniendo la fecha en el nombre, el formato es el de dateformat.
  • dateformat +%Y-%m-%d.%s: Formato de la fecha: Año, mes, día del mes y segundos des de 1970.
  • compress: Al hacer la rotación los logs antiguos son comprimidos.
  • sharedscripts: Corre la sección de postrotate una sola vez para todos los ficheros.
  • postrotate: Sección a correr una vez se han rotado los logs, en nuestro caso se hace un reload del apache, se recoge el nombre de instancia de nuestra máquina en EC2 y se sincronizan los logs que están comprimidos con el bucket logs dentro de un directorio con nuestro nombre de instancia.

Tenemos que tener en cuenta, aunque la página del man diga lo contrario el postrotate es ejecutado antes de la compresión, por lo que no nos sincronizará los logs actuales hasta la siguiente rotación de logs, que como veremos será al cabo de una hora.
Debido a que la rotacion de logs ocurre una sola vez al dia, y en nuestro caso queremos que se haga cada hora, vamos a crear el fichero /etc/cron.hourly/1logrotatehttpd con el siguiente contenido:

#!/bin/sh
/usr/sbin/logrotate  /etc/logrotate.d/httpd >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

Le damos permisos de ejecución:

# chmod +x /etc/cron.hourly/1logrotatehttpd

Rotando logs al parar la máquina

Con lo que hemos visto hasta ahora, ya tenemos preparada nuestra máquina para que sincronice los logs cada hora, con la particularidad que siempre nos sincroniza los de la última hora y no los actuales. Si la máquina es borrada de nuestro autoscaling group perderemos nuestros logs, por lo que necesitamos crear un script en el /etc/init.d que sincronice los logs antes de apagar la máquina. Creamos el script /etc/init.d/s3sync con el siguiente contenido:

#!/bin/bash
#
# s3sync     Sync httpd logs to S3
#
# chkconfig: -  86 14
# description:	s3sync logs of apache
# processname: s3sync
#
#
### BEGIN INIT INFO
# Provides: s3sync
# Required-Start: $local_fs $remote_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: s3sync logs of apache
# Description: s3sync logs of apache
### END INIT INFO
# Source function library.
. /etc/init.d/functions
start() {
    touch /var/lock/subsys/s3sync
    return 0
}
stop() {
    /usr/sbin/logrotate -f /etc/logrotate.d/httpd
    BUCKET=logs
    INSTANCE_ID=`/usr/bin/curl --silent http://169.254.169.254/latest/meta-data/instance-id`
    /usr/bin/s3cmd -c /root/.s3cfg sync /var/log/httpd/*gz* s3://${BUCKET}/${INSTANCE_ID}/ > /dev/null
    return 0
}
restart() {
    stop
    start
}
case "$1" in
    start)
	start
	RETVAL=$?
	;;
    stop)
	stop
	RETVAL=$?
	;;
    restart)
	restart
	RETVAL=$?
	;;
    *)
	echo $"Usage: s3sync {start|stop|restart|condrestart|status|panic|save}"
	RETVAL=2
	;;
esac
exit $RETVAL

Hacemos ejecutable el script, lo configuramos para que arranque al arrancar la máquina y le hacemos un start:

# chmod +x /etc/init.d/s3sync
# chkconfig s3sync on
# service s3sync start

Como hemos visto mediante el logrotate no se rotan los últimos logs y en caso de que ocupen menos de 5k tampoco. Así pues necesitaremos hacer una sincronización después de rotados los logs. A parte para que los logs de menos de 5k sean también sincronizados necesitaremos ejecutar el logrotate con el flag -f (force). En CentOs para indicar que un servicio está corriendo y por lo tanto para que al parar la máquina ejecute el stop del servicio en cuestión se debe crear un fichero con el mismo nombre del fichero en /var/lock/subsys
Con esto ya tenemos nuestros logs de apache rotando a S3 y con el mínimo peligro de que se pierdan, como ya os podéis imaginar éste manual se podría aplicar a muchos otros servicios que tengan logs.
Un saludo cloudadmins !!
Oricloud