jueves, 22 de noviembre de 2012
La catedral y el bazar
La orquestación de servicios y SOA
La orquestación de servicios y SOA
SOA: en términos simplistas, es una arquitectura que permite la interoperabilidad de sistemas por medio de pequeñas piezas de software que realizan tareas específicas cuando son utilizadas.
Esta arquitectura surgió en el año 2000 y ha sido ampliamente adoptado, lo que ha generado gracias a su reusabilidad, sin embargo, conforme se implementa, surgen nuevas necesidades, una de ellas conocida como Orquestación de Servicios.
Fiel a su nombre, la orquestación de servicios se refiere al esfuerzo de coordinar diferentes servicios para exponer un nuevo servicio que surge de la interacción de servicios básicos. Esta orquestación generalmente se realiza en base a mensajes y de la misma surgen términos como ESB: "Enterprise Service Bus" o "Bus de integración", EAI: Enterprise application integration y otros.
Esta orquestación requiere de herramientas que se encuentran disponibles tanto en el mundo Open Source como en los productos privativos. Estos productos, son los que finalmente, aprovechan o materializan las bondades y facilidad de crecimiento de la Arquitectura Orientada a Servicios SOA.
Tomado de http://www.mulesoft.com/service-orchestration-and-soa
viernes, 16 de noviembre de 2012
Elección de herramientas de Integración Continua
Elección de herramientas de Integración Continua
La Integración Continua es un concepto ampliamente definido en el que básicamente se pretende automatizar la construcción/compilación e integración del desarrollo de un producto software, para agilizar el ciclo de diseño-ejecución-prueba, detectando de forma óptima los errores, bugs y fallos en dicho proceso de desarrollo.
En el caso de desarrollo de software realizado por un equipo, queremos integrar nuestro código propio con el que finalmente va a ser lanzado. Para la gestión del desarrollo de todo el equipo, la integración de código, su compilación y pruebas habrá que seguir ciertas directrices, que están dentro del concepto de Integración Continua.
Una de las grandes ventajas de la Integración Continua está en el hecho de probar nuestro código “en tiempo real”. Esto está dentro del concepto Kaizen o mejora continua, cuyas ventajas se reducen en gran parte a la reducción de tiempo de integración con una fiabilidad enorme.
Los aspectos a tener en cuenta en la Integración Continua pueden resumirse a:
- Mantener un repositorio de código
- Automatizar la compilación e integración
- Hacer tus propios tests
- Commits diarios
- Cada commit debe compilar
- Compilar rápida y ágilmente
- Testar en clon de producción
- Hacerlo fácil
- Resultados accesibles por parte de todos
- Automatizar despliegue
Basándonos entonces en estos aspectos es importante poder realizar las tareas necesarias para disponer siempre de una última versión de nuestro código que esté testada y probada. Para ello existen herramientas software que nos proporcionarán un Servidor de Integración Continua que nos facilite la realización de esas tareas basadas en los aspectos anteriormente comentados.
Por ello, es esencial la elección de la herramienta que utilicemos para desarrollar en un entorno de Integración Continua. Esta elección vendrá determinada por ciertos criterios de selección que marcarán nuestras necesidades de desarrollo y el entorno. Estos criterios tratarán de ser lo más objetivo posibles.
Nuestros criterios a la hora de la elección estarán basados en:
- Características de la herramienta software, como
- Integración de sistema de control de versiones
- Capacidad de manejo e integración de plataformas de construcción y despliegue (Maven, Ant)
- Metodología de feedback e informes
- Etiquetado
- Si soporta dependencia de otros proyectos o no
- Facilidad de extender
- Fiabilidad y rendimiento. Productos opensource nos permitirán hacer pruebas de rendimiento fiables.
- “Longevidad” del software. Sin perder la funcionalidad y robustez de una herramienta consolidada y establecida, hay que tener una visión de futuro y pensar a largo plazo (posibilidad de extender nuestro producto o modularlo).
- Entorno objetivo. Hay que tener también una visión más allá de la calidad del código y no perder de vista el entorno de producción, trabajo y ejecución. Tendremos que tener en cuenta entonces los sistemas operativos soportados por los servidores, los requerimientos del sistema, el versionado y el soporte de versionado.
- Facilidad de uso. Aunque a veces este criterio puede ser subjetivo, el uso de consolas web, configuración a través de edición de archivos, utilización de asistentes o paneles de control vendrán determinados por los usuarios de la herramienta-servidor que va a ser utilizada y administrada.
Estos criterios de selección no deben ser rígidos y buscamos un entorno lo más flexible posible. Pero el exceso de flexibilidad puede llegar a hacer nuestro sistema improductivo y algo caótico, provocando el efecto contrario al deseado y por tanto, algo de rigidez del sistema nos puede ayudar a establecer las líneas adecuadas de actuación.
Por estas razones y según los criterios que hemos expresado para la elección de nuestras herramientas en un entorno de Integración Continua, una buena elección será el uso de Hudson como “CI Tool” (herramienta de Integración Continua) y Maven como “Lifecycle Build Tool” (herramienta de construcción del ciclo de vida).
De forma resumida exponemos las ventajas y características de estas dos herramientas para la gestión de nuestro proyecto de desarrollo de software.
Maven
De forma más detallada a nuestra introducción anterior, Maven es una herramienta de gestión y comprensión de proyectos de desarrollo de software, normalmente en Java, que nos permite compilar, testar integridad y compilación, desplegar, documentar y gestionar las dependencias de código de forma sencilla y extendible.
Maven es una herramienta abierta y libre (pertenece al Proyecto Apache) claramente orientada al trabajo en equipo, siendo esta es una de las principales razones por las que la elegimos como herramienta ideal para metodologías agiles de programación y posterior Integración Continua con otras herramientas software.
La herramienta es compleja pero fácil de usar y muy rápida a la hora de compilar y desplegar proyectos. Entre las ventajas de usar Maven como herramienta de desarrollo en el trabajo en equipo, podemos destacar:
La dependencia entre proyectos no es problema
Un mismo proyecto se puede ejecutar en distintos entornos. Sólo hay que cambiar un archivo de configuración
La integración del trabajo de desarrolladores es transparente
Hay una maximización de la cohesión del código y una minimización del acoplamiento
Fácil reutilización del código
Para los desarrolladores familiarizados con herramientas similares, como Apache Ant, Maven ofrece las mismas funcionalidades, con la diferencia de gestionar las dependencias de proyectos de una forma mucho más sencilla y comprensible, optimizando notablemente el tiempo de desarrollo en trabajos multiproyecto.
El funcionamiento de Maven viene expresado según el siguiente diagrama:
Los cuadros grises son dados por el desarrollador, los rojos por la herramienta, y el marrón es la salida y resultado final (lo que en Maven se denominan Artefactos). Es decir, podemos comprobar que Maven es muy flexible a la hora de poder personalizar plugins para nuestro proyecto y también para gestionar las dependencias y configuraciones con un simple archivo POM (Project Object Model). Pero tampoco podemos olvidar que nos proporciona la rigidez suficiente con su arquitectura y metodología para no perder el foco y que los trabajos multiproyectos no se conviertan en los temidos “dinosaurios” difíciles de gestionar.
En definitiva y en nuestro caso, Maven nos proporciona una solución modular orientada al trabajo en equipo que elimina problemas de herramientas anteriores, como es la compleja resolución de dependencias, a la vez que nos permite integrar el trabajo con otras herramientas de Integración Continua. Es importante destacar para nuestro caso que se dispone de un plugin para proyectos JRuby.
Hudson
Esta herramienta de Integración Continua nos lleva un paso más allá de los resultados de nuestra solución de Ciclo de Vida, que es Maven. Es decir, ya no sólo se trata de paquetizar e integrar las distintas áreas de desarrollo de nuestro producto resolviendo las dependencias de código de los paquetes subdivididos, sino de que la integración sea efectiva, cumpla nuestros criterios de calidad y el tiempo empleado en la detección de errores y su resolución sea el menor posible. Hudson nos proporciona una solución sencilla para llevarlo a cabo.
Hudson es una herramienta libre y abierta relativamente nueva de Integración Continua muy utilizada y de gran éxito en el entorno de desarrollo del software. Su arquitectura basada en plugins y su fácil instalación la hacen una herramienta potente y fácil de usar. El desarrollo de plugins es una característica importante al destacar su flexibilidad.
Podemos comprobar las diferencias con otras herramientas CI (Integración Continua) en este link, comprobando que además de ser una de las más completas, su extensibilidad viene proporcionada por plugins, lo que la hace bastante modular y ligera si no se necesita de amplia funcionalidad.
Podemos comparar a Hudson con una de las herramientas CI más consolidadas actualmente, que es CruiseControl, comprobando que, además de ofrecer mayor amplitud de funcionalidad, sus características vienen determinadas por la instalación sencilla de plugins.
Resumiendo, parte de las ventajas de Hudson vienen determinadas por:
- Fácil instalación y uso (un fichero WAR es toda la herramienta de instalación)
- Plugins fácilmente extensibles
- Soporte completo de Maven, lo que nos facilita enormemente la integración
- Soporte para entornos “colaborativos” (múltiples equipos y grupos de proyectos)
- Software Libre 100%
- Sistema de alertas intuitivo para los desarrolladores
- Muy pocos problemas “reportados” de esta herramienta
En definitiva, Hudson es una herramienta sencilla, de alta funcionalidad, abierta, bien documentada y con un futuro muy prometedor como CI Tool consolidada, y además, se integra muy bien con Maven. En nuestro caso cubre las necesidades, además de proporcionar un entorno “user-friendly”.
Fuente: Venera 7
martes, 13 de noviembre de 2012
Consejos para que pueda sobrevivir a una fusión
Las fusiones son un hecho de la vida corporativa. También requieren que IT desempeñe un papel
importante debido a que sistemas diferentes deben ser consolidados. El trabajo que IT realiza en las fusiones se
considera una misión crítica ya que si los sistemas no pueden ser fácilmente
consolidados y hacer que trabajen juntos, la fusión podría ser cancelada. No hace falta mencionar que el trabajo de IT
en la fusión de sistemas es peligrosa - no sólo técnicamente, sino políticamente. Aquí hay algunos temas que considerar si IT
tiene la tarea de una fusión.
Entender lo que está en juego
En las fusiones no solo están involucrados los procesos, si
no también las personas de cada organización, lo que significa que no todos
conservarán sus puestos de trabajo, incluyendo el personal de IT.
Para IT su tarea de fusión de sistemas es prioritario, sin
embargo se encontrará con que los sistemas escasamente están documentados, y
que las personas que conocen del mismo no son del todo colaboradores con la
transición.
Es necesario conocer y estar consientes de la complejidad de
la fusión y de los sistemas, lo cuál ayudará a que el encargado del proyecto
sea capaz de resistir las presiones y conflictos que puedan surgir.
Considere la posibilidad de sabotaje
Se debe tomar en consideración que probablemente encontrará
personal de IT que no coopera o que oculta información importante para llevar a
cabo la fusión, lo cual puede ser considerado como un sabotaje silencioso.
Si se da el caso, esto afectará el tiempo planificado de
ejecución del proyecto y posiblemente se requerirá de una extensión de tiempo.
Sepa cuándo es poco aconsejable realizar la integración de
sistemas
A veces, las
organizaciones desean fusionarse, pero sus sistemas son tan incompatibles que
no tiene sentido consolidarlos. En estas
situaciones, lo aconsejable es permitir a ambas compañías continuar funcionando
con sus sistemas, e identificar un "sistema
a largo plazo" que todo el mundo finalmente utilizará.
Comunicar
Aunque las noticias del proyecto no sean las mejores, se
debe comunicar lo más directo y pronto posible.
El no transmitir las mala noticias solo empeorarán la situación. Los ejecutivos con amplia experiencia saben
que en los proyectos siempre existirán malas y buenas noticias.
Tenga un plan de reserva
Una vez que se haya realizado todas las pruebas y esté listo
dejar los sistemas antiguos, asegúrese
de tener un "camino de vuelta" para la trasladarse en caso suceda un
error inesperado. Nunca está de más
tener un plan B.
jueves, 8 de noviembre de 2012
Urgencia de Sistemas Integrados
Urgencia de Sistemas Integrados
El haber trabajado en diferentes empresas, tanto de
iniciativa privada, estatales e incluso organizaciones no gubernamentales, me
ha permitido conocer y administrar múltiples versiones de aplicaciones
informáticas de todo tipo, la cuales van desde programas personalizados basados
en el desarrollo “hecho en casa”, pasando además por las desarrolladas en
código libre, sin contar las “heredadas” de alguna otra organización, por
alguna fusión inesperada, hasta llegar a las soluciones “empaquetadas de
fábrica” que tiene una función general y que no permiten realizar ningún
cambio. Y esta administración, se
dificulta cuando todas estas variedades coinciden dentro de una
organización.
Sin embargo, la administración de estas tecnologías no es lo
más preocupante, sino lo que esto conlleva y más aun sin que se tenga una
visión clara de la dimensión de esta situación y sus repercusiones para la
organización: la dispersión de los datos.
Esta dispersión de datos, no aporta valor agregado a la
organización para tomar decisiones estratégicas sobre su futuro y la gestión gerencial se dificulta enormemente
al no contar con un insumo indispensable, como lo es la información.
Supongo que esta situación que ahora enfrentan las
organizaciones, sin importar su giro de negocio o nivel de automatización
alcanzado, tiene su origen en que dichas organizaciones y cada una de las
entidades que las conforman, han afrontado y resuelto, “a su manera individual”
la forma de realizar las actividades cotidianas y no se han permitido “pensar y
meditar” en alguna forma de invertir
esfuerzos y recursos para dar un valor agregado al trabajo realizado, buscando
que éste sirva como fuente de consulta para el futuro. A esto hay que sumar el vertiginoso cambio
tecnológico vivido en estas últimas décadas y cómo éstos repercuten en un todo,
es decir en un sistema.
Si bien, en las organizaciones impera la necesidad de
alcanzar los objetivos estratégicos y metas de productividad, es importante
considerar que la definición correcta de éstos, proviene del trabajo de forma
integrada y sistemática, buscando ver totalidades en los procesos que se
realizan y la información que generan, la cual es un insumo indispensable para generar
conocimiento y así poder tomar decisiones y
realizar una planificación efectiva y verdaderamente estratégica.
Es por esto, que la función de la Gerencia de Sistemas es
trascendental dentro de las organizaciones y debe ir mas allá de apoyo a la
gestión, éste debe involucrarse directamente y buscar la sistematización,
automatización e integración de los procesos y servicios.
A menos que la Gerencia de Sistemas comience a diseñar ahora
todos estos elementos bajo una visión integral, la organización no los tendrá
disponibles cuando más los necesite, cuando la competencia sea más aguda y las
necesidades de las estrategias empresariales de contar con tecnología
integrada, así como información oportuna, veraz y confiable, sean más urgentes.
miércoles, 7 de noviembre de 2012
Más que un like en Facebook
Durante los últimos años dentro del vocabulario de millones de usuarios en Internet ha aparecido una nueva expresión que describe el sentimiento de agrado hacia determinado artículo o contenido: like. Seguramente muchas veces la hemos utilizado ingenuamente para demostrar nuestra simpatía o agrado hacia nuestros amigos o páginas de preferencia.
Y utilizo la palabra ingenuamente, por que hace poco tiempo recibí un correo donde los desarrolladores de google me informaban de sus últimos logros, entre ellos la integración de social networks con google analytics (para los que no saben google analytics es un servicio gratuito de estadísticas de sitios web).
Lo sorprendente del caso es que ahora puedes saber la cantidad de likes que recibes en tu sitio web ó en tu fan page de facebook, por medio de tu cuenta de google analytics. Claro ahora se preguntaran de que nos sirve esto si los conteos los da la misma página de facebook. Pero lo interesante viene en la comparación que puedes hacer con los otros datos que te genera google analytics y la comparación con la preferencia (por medio de likes) de tu sitio web. La integración es sumamente sencilla, les dejo este link donde se explica en pocos pasos como realizarla.
Finalmente la pregunta es que tanta información genera un solo like? y a quien le esta llegando esta información para conocernos mejor? Por lo que les sugiero pensar dos veces antes de dar un like, y si tienes una página web o algún negocio, que aproveches para conocer a tu clientela mejor a un costo muy bajo e integrando las herramientas disponibles en el mercado.
Suscribirse a:
Entradas (Atom)

