Una pieza que faltaba: El Sistema de Integración

Bueno ya llevo mis primeras semanas dedicadas al tema de Arquitectura de Plataforma y sumergiéndome en el mundillo del desarrollo Java, aunque sea desde el punto de vista no ya del desarrollador sino de la gestión de sistemas y la organización de proyectos. El primer punto en el que queríamos focalizar los esfuerzos es en la gestión de entornos: desarrollo, pre-producción y producción y el paso que realizan los proyectos a través de estos.

Primero describir el escenario inicial: existen diversos grupos de desarrolladores trabajando en varios proyectos, muchos de ellos interelacionados entre si. Este proceso de desarrollo muchas veces se realiza en la propia máquina de los desarrolladores y se va subiendo a un repositorio común, en nuestro caso subversion. El problema aparece cuando se intenta llevar una versión a producción y esto se hace desde el equipo de algún desarrollador, por lo que en muchos casos ese código ni ha subido aún al subversion, se tienen instaladas librerías o versiones del JDK que no se corresponden con las que hay en producción, no queda registrada que versión pasa a producción y cuál había, otras veces el proyecto se compila dentro de la máquina de producción, etc… es decir, en el caso de un desarrollo ya medianamente grande se va creando un pequeño/gran caos.

Para solucionar este problema hemos desarrollado el siguiente esquema de funcionamiento en el que encontramos una pieza clave: el servidor de integración.

Todas las «piezas» que se quieran pasar a producción deberán ser construidas en este servidor de integración y además siempre se obtendrán todos los elementos necesarios para la construcción del sistema apartir del control de versiones.

Con ello matamos varios pájaros de un tiro:

– Tendremos controlada la versión de los proyectos desplegados, sobretodo si generamos un Tag de subversion tras la compilación correcta.
– El entorno de construcción está controlado, siempre se usará la misma versión de la máquina virtual, librerías, etc… y nos aseguraremos que en producción dispongamos de ese mismo entorno.
– No requeriremos de compiladores ni dependencias de ese tipo en los entornos de producción, cosa que es altamente recomendable por motivos de seguridad.
– Los desarrolladores ya no tendrán acceso a las máquinas de producción, simplemente tendrán que solicitar una nueva compilación de su proyecto al servidor de integración y los encargados de sistemas lo pasarán a pre-producción y una vez probado a producción.

Buscando alguna interfaz que nos permita hacer más amigable el proceso de compilación de proyectos en una máquina remota me he encontrado con los llamados servidores de integración continua, a los que dedicaré un post individual, pero que nos pueden facilitar enormemente esta tarea además de darnos algunas ventajas adicionales.

Por otro lado hemos descubierto que no debemos basarnos únicamente en los elementos ejecutables que pasan a producción, sino que en muchos casos habrá que hacer subidas también de datos requeridos para el funcionamiento de la aplicación: modificaciones a las bases de datos o al LDAP o directorios con ficheros necesarios. Estos objetos se empaquetarán junto con la consiguiente nueva versión del proyecto y deberán gestionarse de forma paralela a este, tanto en versionado cómo en su posterior subida a producción.

Finalmente otra gran ventaja la encontramos al disponer de entornos de pre-producción para cada proyecto que nos permitan probar las nuevas versiones de las aplicaciones antes de pasar a producción. Una buena infraestructura de virtualización nos puede ser de gran ayuda en esta parte ya que nos va a permitir tener multiples entornos dentro de un mismo servidor compartiendo recursos.

Arquitectura de plataformas

Al hilo de mi último post sobre el curso de JBoss y demás quería hablar sobre mi nueva dedicación dentro de Andago: la creación de un departamento de arquitectura de plataforma o arquitectura de sistemas, todavía no está decidido el nombre, aunque el logo podría ser algo así:

Para comprender este paso hay que tener en cuenta el cambio de orientación que ha tenido Andago en los últimos años: pasando de trabajar más en el area de sistemas y Linux propiamente dicho a abrirse al mundo del desarrollo de soluciones abiertas para la administración y al impulso de una fuerte política de I+D en este area. Esto ha probocado que la tortilla dé de alguna manera la vuelta y que el mayor crecimiento se haya producido en el area de desarrollo, tanto en personal cómo en proyectos que se llevan a cabo. Llegados a este punto uno se pregunta si aún quedará trabajo para un jefe de proyecto especializado en el area de sistemas cómo es mi caso.

Y la respuesta es que hay muchísimo trabajo por hacer a la hora de mejorar las plataformas y sistemas que alojarán las soluciones que salen del horno de la sección de desarrollo y muchos de los procedimientos a través de los cuales se está trabajando en este momento. Así que el departamento de arquitectura será un elemento transversal a la compañía y separado del departamento de sistemas y soporte que afectará a todas las areas de trabajo.

Algunos de los objetivos que nos estamos fijando son los siguientes:

– Unificación de soluciones sobre un marco común que las haga interoperables y compatibles entre sí,
– Paquetización de productos tanto para facilitar el trabajo a los equipos de desarrollo cómo para su posterior distribución en el mercado.
– Definición de políticas de entornos para que todo proyecto disponga de sus correspondientes entornos de desarrollo, pre-producción y producción y guías de cómo se debe pasar entre ellos.
– Dotar a las plataformas de alta disponibilidad y balanceo de carga.
– Mejora de la seguridad de las soluciones.
– Pruebas de carga y mejora de rendimiento de las plataformas.

Y muchas más que nos irán surgiendo… aquí os dejo un mapa conceptual que hecho con Freemind (herramienta que nos recomendó acs y de la que me he convertido en un gran fan):

Además siguen surgiendo muchos proyectos de sistemas y de redes inalambricas metropolitanas que irán surgiendo y con los que tendré el gusto de lidiar, pero ya os iré comentando más cosas. Por otro lado si el proyecto de Arquitectura de plataformas te ha resultado interesante y tienes conocimientos de Linux y servidores de aplicaciones (preferentemente JBoss/Tomcat) estamos buscando gente cómo tú (mandame tu curriculum a través del formulario de contacto de esta mísma página web).

Jboss for administrators

La semana pasada asistí al curso JB336: Jboss for administrators que impartía la gente de Red Hat. Las sensaciones han sido bastante satis satisfactorias y he aprendido bastante por lo que quería hacer un post sobre el tema.

Lo primero que me llamó la atención del curso y lo que me llevó a solicitar a mi empresa que me inscribiera fue su orientación hacia la administración y no tanto hacia el desarrollo. Llevamos algunos meses buscando un experto en servidores de aplicaciones sin éxito con lo que decidimos impulsar el conocimiento dentro de la propia empresa y este curso venía cómo anillo al dedo.

Este es el segundo curso que hago con la gente de RedHat, el primero fué el de certificación RHCE, y en ambos casos he acabado bastante satisfecho, eso sí cómo siempre lo bueno sale caro, pero al final terminas amortizándolo a el largo plazo con la mejora que puedes aplicar a tu trabajo con un conocimiento orientado en la dirección correcta.

De toda la vida he sito muy contrario a la filosofía JAVA y a todo lo que la rodea optando siempre por otras alternativas, pero su amplía difusión me ha llevado a tener que lidiar con ella finalmente y espero que esta nueva amistad tenga un final feliz.

El primer día de curso me pareció un tanto teórico pero me ayudó a afianzar muchos conceptos del mundo JAVA y de los servidores de aplicaciones que tenía algo entremezclados. Pero a partir del segundo día nos pusimos a darle caña al servidor profundizando en temas interesantes cómo los procedimientos de despliegue de aplicaciones, temas de rendimiento y tunning, balanceo de carga y alta disponibilidad, seguridad, etc… La arquitectura de JBoss es bastante flexible y extremadamente potente con lo que nos va a permitir muchas posibilidades a la hora de ponerlo en producción.

Por último comentar que he vuelto a reafirmar mi posición respecto a lo increíble que es recibir formación de gente experta en un tema que ha tenido que lidiar con ella en entornos de producción y que sabe muy bien de lo que está hablando frente a la formación académica que se recibe en muchos casos en la Universidad por un profesor que acaba de leer algo sobre el tema en un libro. Quizás por eso el formato muchas veces está cambiando y en muchos master las asignaturas no las imparte un único profesor sino que traen a expertos en la materia para bien de sus alumnos.

Atormentado por las ideas

Últimamente me rondan por la cabeza un montón de ideas que luego acaban en el cajón desastre de las cosas que nunca llegaron a hacerse, pero que hoy me ha dado por darles salida aunque sea a este blog. Algunas son un poco antiguas y ya las ha echo alguien y otras son simple efecto de la locura temporal. La verdad es que luego siempre me echo en cara que luego nunca me pongo con nada y que siempre ando perdiendo el tiempo.

Cabeza Pensante del Manzanares

Ahí va este chaparroncillo de ideas:

Servicios digitales para eventos. Esta idea me surgió mientras estaba sentado junto al escenario dónde tocaría más tarde Metalica en el Electric Weekend de Getafe. Mi misión era dar conectividad inalambrica tanto a organizadores, músicos y asistentes al concierto y estaba esperando que los electricistas volvieran de comer para empezar a subir nodos Mesh a las farolas y después de haber comprobado que el enlace Wimax con el troncal funcionaba perfectamente. La cifra que me había cometnado la organización que se manejaba cómo presupuesto para ese tipo de conciertos rebotaba en mi cabeza. También muchas de las cosas que podría ofrecer una empresa especializada en estos temas.

Antes de que tuviera lugar el concierto se podría comenzar con todo el tema de difusión: página web, blog, foros, posicionamiento, difusión en redes sociales, prensa digital, etc, etc… Luego en el concierto o en el evento de que se tratase está el tema de la conectividad: instalar un centro de mando, posiblemente una conexión por satélite a internet que se pudiera instalar en la calle, mesh para cubrir toda la zona, tomas de cable para prensa y muchos más. También se podrían hacer cosas cómo zonas de información por bluetooth, concursos por SMS, kioskos de conexión, etc… las posibilidades son infinitas y no se limitarían a conciertos, existen miles de eventos dónde los servicios de una empresa especializada cómo esta podría tener su cabida.

El agregador social: Este tema creo que ya está siendo desarrollado o hay iniciativas parecidas pero no sé si han terminado llegando a algo. Se trataría de una utilidad, podría ser en web o un aplicación de escritorio, que te permitiera interactuar con varias redes sociales de forma unificada, pudiendo así llegar a mucha más gente. Por ejemplo tendrías tus contactos independientemente de la red a la que pertenezcan, podrías subir una foto y que esta estuviese publicada a la vez en facebook, hi5, orkut, myspace, flickr y tu propio gallery, que recibiera y te mostrara los eventos que se producen en cada una de ellas. Por ejemplo, pepito a editado su perfil en facebook, menganito subió un video en youtube, alguien comentó tu foto en flickr, florinda te habla por el google talk o el skype, etc… La iniciativa de Google de OpenSocial facilitaría muchísimo llevar esto a cabo, porque por ahora habría que pelearse con todas las APIs una por una.

El escritorio social: Esta idea hace mucho tiempo que me ronda por la cabeza… y es algo parecido a lo que he comentado antes con el agregador social, pero sacado del navegador o su programa concreto e integrado en el escritorio. Disponer de widgets con información de los eventos de las redes sociales, poder ir caminando por second life cómo si fuera tu propio escritorio, etc… es decir transformar el escritorio más en una herramienta de comunicación que en un contenedor de aplicaciones locales y de ficheros, ya que últimamente nos dedicamos más a esa faceta cuando encedemos nuestras máquinas.

SMS-Twitt: Esta es una utilidad que no sé si está desarrollada para España pero que te permitiría twittear a través de SMS. Hasta dónde yo sé puedes recibir tus twitts por SMS pero no estoy tan seguro de que puedas publicar. El desarrollo sería fácil, bastaría con unos terminales móviles conectados a la computadora, al menos uno por operador o un acuerdo con estos últimos para la recepción de los SMS y asociar los números de teléfono de la gente que envié SMS con su cuenta de twitter correspondiente. A cada envío se le cobraría una pequeña cantidad a sumar a la que ya te cobra el operador por mandar el SMS. y es que a veces queremos twittear y no tenemos Wifi cerca o aún no hemos contratado esas tarifas tan baratas de 3G.

La verdad es que tengo muchas más ideas, pero por hoy yo creo que ya ha sido bastante atormentaros. Si hay alguien dispuesto a poner su tiempo o su pasta para desarrollar mis ideas, es bienvenido. 🙂

Haciendo pruebas de carga

Para uno de los proyectos en el que llevo trabajando algunos meses nos pidieron que efectuaramos pruebas de carga de los servidores del proyecto para ver hasta dónde podríamos llegar y cómo reaccionaban dichos servidores ante la carga.

El primer problema fué encontrar la forma de simular peticiones sobre los servidores web de forma que estas simularan la actividad de los usuarios reales. Esto era un tanto difícil por la forma en que se autenticaban los usuarios y que la mayor parte del contenido se accedía una vez autenticado. Aquí encontramos dos posibles soluciones:

– Scripting con curl: Utilizando bash script y el curl realizábamos una auténticación en el sistema que quedaba almacenada en una cookie que se utilizaba posteriormente cómo credencial de acceso en las peticiones siguientes. La verdad es que curl es una herramienta que me encanta y que nos permite hacer cosas realmente ingeniosas cuando se trata de automatizar algunos procesos web y os la recomiendo encarecidamente. Además se desarrolló otro script para parsear los resultados de curl de forma que pudieramos obtener estadísticas de tiempos de acceso por número de usuario y por página visitada. Un saludote a @jorgecab que se curró la mayor parte de los scripts.

– Jakarta JMeter: Es una herramienta java bastante potente que nos permite definir escenarios muy variados de pruebas de carga y analizar los resultados. Una de las cosas que más me gustó es su herramienta de proxy web que te permite levantar un proxy contra el que enchufas tu navegador y simulas la navegación que quieres que luego se repita durante las pruebas de carga. Muy potente y bastante flexible, y por supuesto Open Source.

Una vez que disponíamos de nuestro generador de stress y antes de lanzarlo contra los servidores hay que asegurarse de tomar bien «la temperatura» a los servidores, es decir capturar el máximo de datos de su estado durante el periodo de las pruebas. Para ello utilizamos el paquete sysstat que nos permite medir con precisión una gran cantidad de elementos significativos dentro de nuestro servidor. Para ello utilizamos dos herramientas:

– Sar: Que nos permite muestrear una gran cantidad de información de nuestro equipo cómo por ejemplo: uso de las distintas CPUs, carga del sistema, uso de memoria, entrada/salida, red, etc… Para ello definimos los parámetros que queremos monitorizar, el periodo entre cada muestra y el número de muestras que vamos a tomar.

– Pidstat: De toda la información que obteníamos con sar sólo echaba en falta el poder comprobar el estado de los procesos y cuales eran los que estaban cargando la máquina. Después de buscar un rato descubrí que a partir de la versión 8 de systat se incluye la utilidad pidstat que nos permite tomar muestras parecidas a las de sar pero por procesos indicando los pids de los procesos a monitorizar o trabajando con todos ellos. Así podemos comprobar la subida y bajada del uso de memoria y de CPU de los procesos más significativos.

A la hora de estudiar el comportamiento del sistema y de generar el informe sobre las pruebas nos encontramos con otra herramienta muy interesante: kSar que nos permite sacar de forma sencilla gráficas a partir de los datos obtenidos mediante sar. También tenemos la opción de exportar directamente la salida de sar o pidstat a un fichero csv y importarlo en nuestro openoffice calc para crear gráficas.

¡ A toda máquina !

Si con dos no te basta, suma la del portatil: x2x

Desde hace tiempo que vengo trabajando con dos pantallas en mi estación de trabajo y la verdad es que es un gustazo. Disponer de un espacio de trabajo de 2560×1024 es otra dimensión y es realmente útil a la hora de tener dos vistas completas al mismo tiempo: el editor de texto y google para extraer información, dos trozos de código a comparar, el gimp con todas sus herramientas desplegadas, etc… Algunos problemas que tuve al principio fueron que metacity no me colocaba correctamente las ventanas nuevas y solía mandarlas a la otra pantalla, lo que resultaba muy molesto. Al parecer esto se podía evitar utilizando compiz, pero en las primeras versiones se pegaba de tortas con los drivers de mi nvidia configurada con 2 monitores y se comía toda la cpu, aparte de ir muy lento. Con las versiones actuales de compiz o de los nuevos drivers de nvidia se ha solucionado el problema y ahora al abrir nuevas ventanas se abren en la misma pantalla en la que tengo el puntero. Digamos que sólo me falta solucionar un defectillo con el splash de algunos programas que se posiciona en el medio, es decir mitad en cada monitor. 😛

9x multiscreen

Pero dándole vueltas a esto, muchas veces tengo también sobre la mesa el portátil y es un rollo tener que cambiar de teclado y ratón para manejarlo y lo ideal sería poder controlarlo también con el mismo teclado y ratón que mi estación de trabajo. Bueno pues para eso tenemos x2x que nos salva la papeleta de maravilla. Tras permitirle acceso a las X del portátil a la estación mediante xhost, lanzamos en esta x2x indicandole a que lado de nuestras pantallas tenemos el portátil. Cuando el cursor llega al final de la pantalla de la estación de trabajo se pasa limpiamente a la pantalla del portátil y podemos controlarla sin cambiar las manos ni sufrir el calorcillo de nuestro pequeñin. Incluso podemos cortar y pegar texto de uno en otro, ya pasar ventanas teniendo en cuenta que son dos equipos diferentes parece un poco más complicado, pero seguro que se podría hacer. Incluso si no usamos Linux en nuestro portátil podríamos controlarlo si tenemos instalado vnc con x2vnc

Open Health Assistant

Hoy os voy a presentar el último proyecto que han desarrollado mis compañeros de I+D en Andago: Open Health Assistant. Se trata de una plataforma para móviles basada en Android de Google que ofrece importantes avances en el área de la asistencia sanitaria. Pero lo cuenta mucho mejor «Rafa» en un perfecto inglés:

Mi más gran enhorabuena a todo el equipo Android de Andago: Rafa, Ruth, Mariajosé, Silvia y Angel, y mucha suerte con el concurso Android Development Challenge. 😀

Firefox y Nagios se dan la mano

El otro día me enseñaron mis compañeros de sistemas de Andago un nuevo plugin que habían incorporado a firefox y a thunderbird que te permite saber en todo momento si tienes alguna alerta en tu red.

Nagios Checker

Me encanta Nagios, creo que es uno de los componentes de software libre que más he visto implantado en todo tipo de entornos corporativos para monitorización, tanto grandes cómo pequeños. Y poder tener información de las posibles alertas mientras navegas o lees correo está genial. Podéis descargarlo en:

¡A monitorizar sin parar de navegar!