| Jordi Gonzalez...'s profileJordiGO - Enterprise Arc...PhotosBlogLists | Help |
JordiGO - Enterprise ArchitectSoftware + Services - Enterprise Agile |
|||||||||||||
|
6/20/2009 Escalar el Desarrollo Agile mediante el uso de ArquitecturasMuchas son las experiencias que se va acumulando a lo largo de la vida He escrito en más de una ocasión sobre las metodologías Agile, y como las mismas pueden escalar, pueden ayudarnos a trabajar de forma más eficaz, y me gustaría remarcar en este post, como Agile debe también poderse escalar mediante la ayuda de arquitecturas, SI, Agile también tiene una base arquitectónica, veamos algunas de las estrategias que podemos utilizar. Todas las que citaremos no tienen porque ser excluyentes y dependerá de las circunstancias de cada proyecto que utilicemos unas u otras.
Son reglas básicas, pero las mismas nos pueden ayudar a que nuestros equipos Agile sean mucho más productivos en el desarrollo, os lo puedo asegurar no desde el punto de vista teórico sino práctico. 6/14/2009 Paralelismo resolver problemas de negocio NO de concurrenciaEl problema del paralelismo no es un elemento nuevo en este blog, cada día más los requerimientos de negocio nos demandarán soluciones que no bastarán con planteamientos simples y tradicionales, la tecnología está aquí y no tardará el momento que tengamos PC de sobremesa con 8-C. Empezamos a desgranar este problema en el post Paralelismo si resuelve problemas, con este nuevo post quiero analizar que nos aportará Visual Studio 2010, la iniciativa de Microsoft que nos ha de permitir simplificar la complejidad que siempre supone para los desarrolladores y testadores de las aplicaciones donde aplicamos paralelismo. La aproximación y compresión hacia el problema de Microsoft es conocido como solution-stack que comprende: Mejoras en el lenguaje y compiladores, pero la apuesta importante son las librerías que nos ayudarán a generar aplicaciones en paralelo. VS 2010 es la primera wave de un planteamiento de Microsoft a largo plazo donde nos ayudarán a construir aplicaciones en paralelo.
Aplicaciones que aprovechen las capacidades del paralelismo ya se pueden construir a día de hoy, pero requieren tener conocimientos específicos y profundos para poder desarrollar estas aplicaciones. Lo que se pretende en mejorar la productividad de los desarrolladores, que nos permita abstraernos de la actual capa que nos encontramos actualmente cuando queremos programar aplicaciones en paralelo. Una de las herramientas que tenemos actualmente son los Asynchronous agents library, sin duda ayudan pero se hace complicado construir aplicaciones realmente robustas y escalables y siempre nos queda el gusanillo de si dada determinadas circunstancias, escenario no testado se nos quedará bloqueado el sistema. Así pues necesitamos herramientas que nos ayuden a identificar bottlenecks o cuellos de botella, detectar áreas donde podríamos mejorar significativamente aplicando técnicas de paralelismo. Parafraseando a Justin Ratner, CTO de Intel en los próximos 10 años deberíamos poder desarrollar aplicaciones de forma fácil que gestionen 80-Core, veremos a ver. Para conseguirlo deberemos irnos apoyándonos en las libraries que nos proporciona Microsoft las Parallel Extensions (librería que soportan tanto programación declarativa como programación imperativa para datos, tareas y estructura de datos que hagan fácil la coordinación entre ellos), en la librería System.Threading (aunque aquellos que hemos utilizado hemos visto siempre serias barreras para acometer grandes aplicaciones paralelas, por la dificultad de gestionar threads en paralelo y sincronizar zonas de memoria común) y en Unified Cancellation Model (gestión de cancellation token que permita a las partes involucradas cancelar las tareas iniciadas en paralelo, para ello utilizaremos el objeto Barrier y el método SignalAndWait y CancellationToken). Ejemplo de Parallel Extensions en .NET Library tenemos:
La evolución lógica en la programación sería primero pensamos en Threads, luego nos pasamos al ThreadPool y luego llegamos a las Tasks, realmente sencillo y potente. Así pues toda sentencia independiente bien podríamos paralelizarla con Parallel.Do, ejemplo si tenemos MétodoA MétodoB y ambos son independientes porque hacerlos secuenciales, paralelizemoslo con Parallel.Do Sin duda VS2010 nos dará herramientas que nos facilitará esta tareas, como el Parallel Stacks, pero ya si queremos podemos empezar a trabajar en .NET Framework 3.5 y VS2008 descargándonos de las Parallel Extensions. Tenemos que empezar a conocerlo para cambiar la forma como enfocamos las aplicaciones. Seguiremos desde este blog trabajando y analizando que nos va incorporando VS2010. Otra site que recomendamos sin duda es Concurrency 6/6/2009 Se traza un buen camino con WF?Haciendo un poco de memoria, todos recordaremos la primera versión de Windows Workflow Foundation (conocido con las siglas WF) en el año 2006 y dentro del framework 3.0 y que posteriormente fue actualizado en la versión 3.5. Estas dos versiones representaron el punto de partida que si bien fueron muy interesantes, bajo mi punto de vista y mi experiencia no marcaron un antes y un después en los desarrolladores para las compañías y poco impacto tuvo en las consultoras que desarrollamos en .NET. La nueva versión .NET Framework 4.0 pretende cambiar esta percepción ya que formará parte intrínseca del toolkit de los programadores de .NET, por tanto habrá que tenerla especial atención. Aunque seguramente nos preguntaremos que es, que me aporta, para que es útil, cuando lo podría utilizar. Para dar respuesta quizás nos deberíamos preguntar como debemos trazar nuestros caminos de aplicación? Veamos el siguiente ejemplo, tenemos una aplicación, recibe una petición del cliente se atiende en un único proceso, llega una segunda petición que requiere un comportamiento diferente, mediante sentencias if/else se redirección su proceso y se ejecuta el componente de negocio más apropiado. Programación sencilla, muy básica y por tanto a priori, yo inicialmente optaría por ella, siempre vayamos a lo simple. Pero la simplicidad si va reñida con el no cumplimiento de los requerimientos es cuando no se debería seguir, en este ejemplo esta forma de procesar implica dado que tenemos una variable que gestiona el estado implica un secuenciamiento de las peticiones y por tanto una limitación en la escalabilidad de la aplicación, si este es un requerimiento la solución no sería correcta por muy sencillo que sea. Así que la siguiente derivada que seguramente ya todos hubieseis implementado es la paralelización de dichos procesos. Siguiendo el ejemplo veamos como quedaría, por supuesto esto es mucho más escalable que la versión inicial. Y naturalmente surge el tema que dado que tenemos multiproceso ya no podemos tener la variable estado en memoria tal como la teníamos, sino debemos mantenerla en un repositorio común a los dos procesos, hasta aquí nada nuevo que no supiésemos y que hubiésemos implementado. Por tanto fácil de implementar y fácil de seguir… o no es tan fácil, en este ejemplo concreto quizás si, pero y si los flujos son más sofisticados, quizás esta visión no sea muy fácil de seguir ni testar…Quizás deberíamos pensar en otro elemento que nos ayude a tener este control…
En esta imagen vemos como el runtime de WF procesaría la primera actividad la más externa, ya que estamos tratando con un ejemplo secuencial y seguiría por las siguientes actividades. Y naturalmente me preguntareis todo esto, para que, que ganamos de entrada… Como suelo decir siempre a la gente que trabaja conmigo, principio de la simplicidad, principio de la claridad, y bajo mi punto de vista un diagrama siempre es más clarificador que tratar de entender el flujo en el código, por tanto es una buena razón para su uso, no os parece? Pero me diréis, quizás con esta aproximación hemos perdido la escalabilidad que habíamos ganado. Veamos si esto es así o no… El siguiente gráfico podemos ver, que no es cierto, no perdemos escalabilidad, claramente lo vemos en las dos
imágenes que os he agregado, donde podemos ver como podemos seguir procesando las peticiones en múltiples máquinas, pero es ahora el runtime de WF quien nos facilita la gestión de la persistencia del estado, liberándonos y facilitándonos la programación, por tanto vamos por buen camino y si parece que nos ayuda en lugar de complicarnos la vida. Y un punto extremadamente importante es la hidratación de los procesos, estos pueden estar esperando un cambio de estado por tiempo (segundos a meses) que en el momento preciso se continuará el proceso. Pero yo destacaría otras características importantes de WF que ya vemos puede ayudarnos, coordinar trabaja en paralelo,
Otro interesante ejemplo que nos puede ayudar WF es el que muestro en el siguiente gráfico para la trazabilidad de nuestro flujo de trabajo, podemos a través de WF trazar por donde está pasando nuestras actividades, esta parte es muy interesante para monitorizar actividades de negocio de tu aplicación.
WF también nos va a permitir crearnos nuestras actividades custom mediante Custom Activity, estás pueden ser escritas en código C# o VB.NET o cualquier otro lenguaje .NET. De esta forma podemos crear actividades para ser reutilizadas en otras partes de la aplicación o en otros sistemas. Seguro que ya estaréis pensando, pues esto me iría bien con mis servicios WCF, sería posible, la respuesta es SI, por supuesto, Podemos ver en este gráfico como funcionaría. Naturalmente esto nos lleva a pensar en otros escenarios con el uso combinado de una aplicación ASP.NET con servicios WCF y el uso de WF y dando una vuelta más de tuerca Sin duda con .NET 4.0, WF, Dublin, WCF debemos plantearnos nuevas formas de diseñar las soluciones, que no pasan por complicarnos la vida, sino todo lo contrario, ganar en productividad, ganar en eficiencia, en escalabilidad, en control. Veamos si esta vez nos motivamos a su uso de forma empresarial. 5/15/2009 Las barreras de la interacción desaparecen, para mejorar la productividadQuisiera esta vez, mostraros un par de vídeos, uno es realidad, el otro nos invita a imaginar el futuro de la mano de las tecnología Microsoft que estoy seguro vendrán en un futuro no muy lejano, es solo cuestión de tiempo que alguna de las ideas que veremos en el siguiente vídeo sean una realidad. Sin duda, nuevas formas de interactuar con la información mejoran la calidad del servicio, y por supuesto mejora la productividad de las tareas realizadas. ya sea ocio, ya sea trabajo, relaciones sociales. Dispositivos virtuales, inexistentes antes de que la información fluya por ellos, adaptables, configurables, un abanico de divertidas formas de comprender la información, os invito a que dediques unos minutos a ver la totalidad de este primer vídeo, sin duda aquellos más apasionados de la tecnología pensarán ya queremos que sea una realidad, simplemente os digo que creo que estamos cerca. Ian Sands, Director of Envisioning nos explica en este video lo que acabamos de ver
Para llegar a ello, sin duda pasos como los que está llevando a cabo Microsoft en el tema de la interacción (Microsoft Interactive Canvas) ayudarán a que sea una realidad, el siguiente vídeo no es fantasía sino una realidad del uso de la tecnología que ya hemos comentado en este blog en alguna ocasión conocida con las siglas WPF (windows presentataion foundation) y el uso que esta tecnología a permitido a una empresa de diseño aventurarse al uso de la misma por encima de otras tecnologías que en su pasado claramente eran dominadoras en su campo, pero que van cediendo espacio a la imaginación de nuevas formas de ver entender y jugar con la información, el conseguido por esta empresa es el conocido por "Design Week" que es un equivalente a los Oscar. Lo que veremos es una aplicación conectada a varios monitores y sensores de movimiento, y una estación con una pluma digital para crear animaciones en tiempo real. Aquellos que os habéis quedado con más ganas de ver más cosas os invito a que vayáis a la siguiente dirección: vimeo Existen otros videos realmente apasionantes sobre el futuro que os animo a que visiteis Os puedo garantizar que seguiremos estando atentos para ver que otras novedades se nos presenta. 5/9/2009 ¿Nos movemos a la Cloud?Seguramente nunca antes, se había escrito tanto sobre un concepto como se está haciendo en tiempo record con Cloud. Que es? Generará tantos beneficios? Se movilizará tanta industria? En que situación nos encontramos?. Seguramente nunca antes había generado tantas dudas para los CTOs, CIOs, Directores de Sistemas la viabilidad de subirse a la nube/Cloud. En varios post con anterioridad hemos ido entendiendo que era este concepto y si sería tanta revolución como se anunciaba. Retomemos una pregunta inicial, Cloud y Cloud Computing es lo mismo…? Quizás no exista una respuesta única y seguramente cada uno matizará en base a lo que entiende y su propia visión. Me quedo con la idea que Cloud después de analizarlo no difiere mucho con respecto al concepto Internet, llevamos 25 años subidos a la nube, Internet ha ido evolucionando siendo un gran repositorio de datos y múltiples aplicaciones que nos han permitido analizar y ver la información desde la localidad y con la potencia de la globalidad. Cloud Computing pretende dar un paso más, pretende aprovecharse de toda la potencia “infinita” de escalabilidad que ofrece Internet para que cualquier aplicación puede aprovecharse de ella con una concepción global. Por tanto Cloud Computing es más bajo mi punto de vista una evolución que una revolución, ya que esta se inicio realmente con Internet, quizás el factor diferencial es la tecnología que permitirá un nuevo modelo de negocio = PAY-FOR-WHAT-YOU-USE. Seguramente ya no será necesario pagar por la totalidad de la aplicación si realmente solo hacemos uso de un 40% de la misma. Porque no trasladar modelos de negocio como los servicios domésticos como el agua o la luz, pagamos (en teoría) por lo que gastamos, porque no trasladar este mismo modelo al hardware, software, servicios? Por tanto si encima de la mesa nos ponen este nuevo plato, nos preguntamos debemos comerlo, nos sentará bien? Debemos llevar nuestras aplicaciones a la Cloud, seguramente os estaréis preguntando. Si es así, podemos llevar todas nuestras aplicaciones existentes, deberemos desarrollar nuevas aplicaciones? Seguramente las primeras respuestas lógicas serían, todas aquellas aplicaciones desarrolladas en clave de gran escalabilidad por la población de usuarios bien pueden ser candidatas a llevar a la Cloud, así pues si hemos diseñado una solución teniendo presente factores como seguridad, gestión de la información, mantenibilidad, reusabilidad, disponibilidad, escalabilidad, experiencia de usuario, distribución, etc., seguramente ya tendremos los primeros pasos realizados. Estas primeras claves nos llevarán a otra multitud de preguntas como por ejemplo si tomamos el ejemplo de la gestión de los datos, estos serán accesibles on-line o off-line o ambas necesidades son requerimientos de la aplicación, así pues será necesario implementar técnicas de sincronización de información. En función de los aspectos claves que necesitemos para nuestra aplicación clasificaremos nuestra aplicación en base a estas categorías como Cloud Infraestructura, Cloud Storage, Cloud Plataforma, Cloud Aplicaciones y Cloud Core Servicios. Veamos que dice el mercado respecto a estos conceptos:
Seguramente una pregunta natural sería decirnos hay un solo Cloud o puede haber más de un Cloud? O la siguiente pregunta el Cloud debería ser público o gestionado de forma privada? Todos los Clouds públicos deberían hacer uso de la misma tecnología? Y yo me pregunto, es importante esta cuestión? era importante esta pregunta cuando vivíamos en el mundo Internet? Creo que la selección de la misma y el éxito vendrá más de la mano de como se implementa, del conocimiento, visión, estrategia y conocimiento de la plataforma, de la infraestructura que de la decisión de una u otra, por tanto sepamos como hacer uso de la misma y hagámoslo bien desde el principio, pues si una cosa aprendo con el día a día es que el factor tiempo cada vez es más crítico para sacar algo con beneficio a medio plazo. En sucesivos post seguiremos analizando aspectos claves de este apasionante estado del arte. |
|
|||||||||||
|
|