Diego's profileZonaDiegumPhotosBlogListsMore ![]() | Help |
|
January 28 Cómo Juega el Pensamiento Lateral en la Arquitectura de Software Hace unas semanas atrás metí un post sobre Edward de Bono y sus ideas acerca de Pensamiento Lateral. Lo metí en la categoría "Algo de Ocio - Reflexiones" ya que en el mismo no hablaba directamente de Arquitectura de Software sino que, ante todo, sentaba una base de discusión más amplia
A cualquiera que haya leído eso sin darse directamente por aludido, pensando que es una curiosidad pero que no se aplica a la realidad de cada uno -y en particular a la arquitectura de software-, espero con este post poder mostrarle mejor el valor de este tipo creativo de enfoque para la resolución de problemas
Recordemos lo básico: el Pensamiento Lateral lleva ese nombre porque pone una al lado de la otra distintas alternativas para resolver un problema, sin calificarlas previamente según la viabilidad. No busca entonces encontrar la solución más rápida ni la mejor, sino una solución al fin y al cabo. Al contrario del Pensamiento Lógico -al que no se propone reemplazar sino complementar- no analiza las alternativas en profundidad desde el inicio sino que busca enlistar varias de arranque para, en un segundo paso, recorrer los distintos caminos a ver qué tendencia presentan. Ahora sí, conozcamos los casos:
Caso 1: La Fusión de los Bancos
La situación es la siguiente: dos bancos habían fusionado sus carteras de clientes y pretendían ahora fusionar sus operaciones. Para ello enlistaron sendos portfolios de procesos de negocio para determinar los sistemas duplicados, y decidir cuáles discontinuar y cuáles promover a la nueva plataforma tecnológica
Particularmente se detectó que ambas entidades contaban con un módulo de cotizaciones, al que se accedía con un código de divisa y una fecha, para conocer a cuánto cotizó la divisa ingresada en la fecha dada. Se resolvió determinar cuál promover y cuál discontinuar en función de quién presentase el mejor rendimiento Así, sometieron a ambos sistemas a una prueba de carga y constataron que el sistema A presentaba un mayor consumo de CPU que el sistema B, y también un mayor consumo de memoria, en tanto que el sistema B pasaba grandes intervalos de tiempo ocioso Aunque inicialmente llegaron a creer que el sistema B era más liviano y eficiente que el sistema A, los resultados estadísticos finales mostraron que el throughput (cantidad de requerimientos resueltos por unidad de tiempo) del sistema A era marcadamante mayor que el de B Por consiguiente el sistema B fue discontinuado. Te animás a descubrir por qué? (Ayuda: qué podía tener al sistema A ocupando CPU y memoria, comparado con la pasividad del sistema B?). La respuesta va a salir publicada mañana como comentario en este mismo post Caso 2: La Optimización Fallida
Una compañía de turismo en línea venía sufriendo críticas caídas de ventas en temporada alta ya que el alto volumen de visitas al sitio para consultar promociones terminaba agotando los recursos del servidor. Como los visitantes recibían frecuentes timeouts, se terminaban desanimando y desistían de continuar en el sitio
La organización se dispuso a medir tiempos individuales de las consultas para determinar cuáles causaban los cuellos de botella. Encontraron así que la consulta de promociones dado el destino turístico era muy requerida en temporada alta, y acarreaba una demora de 10 (diez) segundos, no cacheaba las consultas más frecuentes a promociones por lo que siempre iba hasta la base de datos, formateaba los resultados, etc Se realizó un proyecto de optimización para cachear aquellas consultas más frecuentes, entre otras mejoras, y se logró bajar el tiempo de 10 segundos a un promedio de 2 segundos. Además, para evitar colapsar la memoria mediante el uso del caché, se adicionó memoria al servidor, y de paso se le agregó una CPU. Terminado este proyecto de mejoras, se hizo el pase a producción Sin embargo, y para sorpresa de la organización y de quienes trabajaron en las mejoras, aunque los síntomas en horas de alto tráfico demoraban unos minutos más en comenzar a manifestarse, no dejó de ocurrir que en determinado momento los visitantes comiencen a recibir sistemáticamente timeout, y la aplicación se torne inusable. Qué pudo haber fallado, a pesar de todo? La respuesta la publico en dos días más Caso 3: Escalabilidad Descendente
Los operadores de un supermercado en línea, precavidamente, habían dispuesto monitoreo y alarmas ante bajos recursos de la granja de servidores para la aplicación de ventas on line. Llegaron a la conclusión de que si bien los requerimientos se resolvían rápido y los accesos a la base de datos estaban optimizados, los cuatro servidores de la granja operaban casi al límite de las sesiones simultáneas que eran capaces de satisfacer. Aunque la granja habilitaba escalabilidad horizontal sin afinidad de sesión (lo que permitía que los requerimientos HTTP de un mismo comprador puedan ser atendidos por cualquier servidor en la granja), los requerimientos concurrentes iban siendo demasiados en la medida que el uso de Internet para la cotidianeidad aumentaba
La decisión de ampliar la granja a 12 (doce) servidores se aprobó sin más trámite, al punto que se decidió manejar las sesiones en memoria en lugar de usar una base de datos, por temor a que ésta pueda volverse el nuevo cuello de botella. Por esta razón, se les subió la RAM a cada servidor de la granja Se implementó, se hizo el pase a producción de todo esto con la ilusión de los operadores de que ya no iban a recibir alarmas por bajos recursos. Y no se equivocaron: ya no se dispararon más alarmas por bajos recursos. Ahora las alarmas comenzaron a llegar por bajo throughput. Si la aplicación en sí no se tocó, y se agregaron recursos... qué empezó a fallar ahora? Tenés tres días para descubrirla vos, o leerla directamente de mi comentario January 24 Revelando Intimidades: .NET en Cilzolloncas"La Lección de Anatomía del Dr. Nicolás Tulp". Óleo sobre lienzo del pintor holandés Rembrandt (1632) Dice el dicho que "los pingos se muestran en la cancha". Y yo espero con este post darte esos pingos para que los puedas mostrar Porque si a vos te pasó lo que a mí, muchas veces habrás sentido que te veían como un gurú, un capo que se las sabía todas, pero en realidad tu único mérito era que te sabías muchas cosas que la mayoría no sabía. Pero de ahí a sabertelas todas... Ojalá! Quién puede saber de absolutamente todo en esto si es gigante!? Bueno, pero por lo menos que los demás se lo sigan creyendo todo lo que pueda durar... Cuestión que, a la corta o a la larga, puede saltar una de esas peludas-peludas que te van a quedar grande incluso a vos, y ahí los demás pueden entrar a descubrirte tus límites, tus vulnerabilidades. A mí me pasó, en mis Java days, con cuestiones internas del manejo de memoria de la Java Virtual Machine (la JVM, o el equivalente del Common Language Runtime o CLR en .NET); me volvió a pasar con condiciones de carrera en ejecuciones de multihilos (multithreading); me pasó de nuevo con un bardo que saltó debido al ciclo de vida de clases estáticas y de nuevo me tumbó con otro bolonqui que saltaba con métodos sincronizados en un servidor Apache, que hacía que se encolen los requerimientos HTTP por minutos Y varios se preguntaban "y éste era el famoso arquitecto!?". Y lógico, uno creía que entendía pero cuando las cosas salían mal, en todas las marañas de código creadas por cincuenta desarrolladores en distintos tiempos, era muy difícil saber en el día qué era lo que pudiera estar fallando. Y lo peor: no había a quién preguntarle. Todos esperaban que uno lo supiera Bueno, espero con esto evitarte que te pase a vos lo que me pasó a mí con esas cosillas de bajo nivel que tiene .NET, que es ideal que los arquitectos conozcan para alguna eventualidad aunque mucho más ideal es que nunca vayan a necesitar tener que usar este conocimiento. Entro a tirar una serie de situaciones o preguntas
Parecen todas pregus de bajo nivel. Y lo son, en realidad. Ahora, decime. Nunca te tocó enfrentarte a un problema y en ese momento querer conocer la respuesta a alguna de estas preguntas? Bueno, hay un par de recursos bastante interesantes acá:
![]() Fig. 1 - Ejemplo de la pila de ejecución (stack) y de los diversos heaps (montículos de memoria) Si, como yo, sos de los que nunca vas a dejar el chupete de escribir código, acá tenés para entretenerte un rato mirando a la plataforma .NET desfilar en lencería eróstica... Otras Referencias
January 18 TechEd 2007: Tenés Sólo Hasta el Miércoles 24 Para Proponer Tu Sesión de Arquitectura!! Te acordás lo que te contaba hace una semanita atrás del Call For Papers para el track de Arquitectura en Junio próximo, en el TechEd 2007 de Orlando?
El Call For Papers termina el 24 de Enero, así que te quedan menos de 7 (siete) días!! No te gustaría exponer? Vamos! Ya vengo recibiendo varias propuestas de varios lugares pero me estás faltando vos!!
De verdad te querés quedar afuera? El post del que te hablé está dos posts más abajo de éste que estás leyendo: a éste le sigue la primera entrega de la serie "Sistemas de Misión Crítica" y después viene el del Call For Papers
De última enganchalo haciendo click acá: http://diegumzone.spaces.live.com/blog/cns!1AD5096D63670065!533.entry
Apurate!! January 13 Sistemas de Misión Crítica (I): Acuerdos de Nivel de Servicio (SLAs)(Este es el primero de una serie de tres artículos sobre Sistemas de Misión Crítica. En esta ocasión nos vamos a referir a los Acuerdos de Nivel de Servicio entre usuarios de tecnología y proveedores tecnológicos, y de cómo medir el cumplimiento de los mismos) Normalmente las necesidades que llevaron al surgimiento de la "Arquitectura de Software" como disciplina dentro de la Ingeniería de Software tienen que ver más con la continuidad operacional de los negocios soportados por software, que por las Ciencias de la Computación en sí mismas Ejemplos: la necesidad de abaratar costos de mantenimiento posterior; la necesidad de poder intercambiar mañana piezas sin quedar atado a decisiones previas, tomadas -claro está- en momentos en que el porvernir era difícil de precisar; la necesidad de eficientizar en forma conjunta el consumo de memoria, cómputo de CPU y ancho de banda utilizado en la red; y tantas otras El hecho es que los negocios existieron desde mucho antes que la Informática fuera creada y comoditizada (es decir, en otras palabras, accesible para una mayoría a costos no privativos). Sin embargo, la irrupción de la tecnología informática en general, y de la industria del software en particular, potenciaron la forma de hacer negocios, llevando a estos a una escala inimaginable en períodos previos al surgimiento. Esto a veces cuesta un poco de entender: si los negocios, las industrias habían sido creados previamente, cómo es posible que la no disponibilidad total o parcial de una determinada tecnología pueda impactar en los resultados de algo que no dependió originalmente de la misma? Sencillo de explicar: qué hacés hoy si se corta la luz en tu zona y en un radio de 50 kilómetros a la redonda? Te querés matar, no? No podés estar en tu casa ni podés ir a ningún lugar cerca porque estás en la misma. Y sin embargo la luz eléctrica fue aplicada en forma masiva hace menos de 200 años. Cómo hacían antes para no estar de mal humor? Simplemente se vivía distinto. Era otro contexto, otra expectativa y por lo tanto también se ponía otra energía en las cosas, acorde a este "sistema de coordenadas" limitado por aquel contexto En el mundo de los negocios de hoy, entonces, se habla de misión crítica -o de sistemas de misión crítica- cuando la no disponibilidad, total o parcial, de los mismos afecta seriamente a los resultados de estos negocios. Te pasó ir al banco a querer abrir un depósito a plazo (un "plazo fijo", como se lo llama en Argentina) y que te digan "ahora no, estamos sin sistema"? Al haberte ido sin hacer el depósito, el banco se pierde de prestar tu guita a un tercero, por ende renuncia a cobrar la renta por el servicio de la deuda y, en definitiva, a ganar plata. Eso es, entonces, un "Sistema de Misión Crítica": es un sistema cuya no disponibilidad total o parcial termina afectando negativamente las utilidades de un dado negocio. Y te voy anticipando antes de seguir qué es lo que pasa si en un negocio deja de entrar plata por un problema de los sistemas. Si eso se prolonga en el tiempo lo más probable es que empiece a salir cierta gente del área de Sistemas para desbloquear el paso y posibilitar que la plata vuelva a entrar al negocio. Capisce? Sabía que me ibas a entender: no es que los negocios hoy puedan subsistir sin los sistemas, pero si es claro que el área de Sistemas va a subsistir en la medida en que el negocio lo haga (y si no explicame por qué, si te toca trabajar de 9 a 6 de la tarde, hay días que ya son más de las 9 de la noche y todavía estas dando vueltas ahí adentro) sin una hora estimada de fin de actividades Pero claro, entendida la definición, aceptada la magnitud del problema viene la pregunta: y a mí arquitecto qué? Qué debo saber / hacer / evitar para que la continuidad del negocio no se vea seriamente afectada -al menos, al punto de poner en riesgo mi pellejo-? En lo que sigue, te paso las claves de supervivencia. El enfoque que voy a tomar va a ir del nivel más alto, desde la perspectiva empresarial, hacia los inferiores (más vinculados con aplicaciones específicas y la infraestructura que soporta a las mismas)
Business are business (Negocios son negocios)
Ahora bien, ninguna bola de cristal hace falta conseguir acá. Microsoft Operations Framework (MOF) es una guía que aglutina prácticas para llevar desde la Gerencia de Tecnología hacia los níveles inferiores de la misma, impactando en las actividades de todos sus integrantes. MOF se compone de cuadrantes: Optimización, Cambios, Operación y Soporte
Particularmente el cuadrante de Optimización incluye guías para Administración de Nivel de Servicio (MOF Service Management Functions), entre las que aparece, entre otras, la Administración de Capacidades (Capacity Management) que te comenté. Asimismo, cada producto de la familia Microsoft te ofrece sus propias herramientas para planificación de capacidades; herramientas éstas que deberías usar dentro de un proceso MOF
Monitoreo de Actividades
BAM habilita a especificar eventos que se disparan a medida que las actividades van sucediendo. Estos eventos sirven para actualizar indicadores que luego pueden ser analizados desde el portal de BAM o exportados a Excel (o también, mediante SQL Server Notification Services, enviados a aplicaciones externas)
Monitoreo de Procesos Sistémicos
Estimados, voy a parar acá. Esta serie de "Misión Crítica" va a contener una segunda parte explicando estrategias del punto de vista del desarrollo de aplicaciones, para que sean aptas para la misión crítica. En una tercera parte voy a explicar las herramientas que tienen a mano los arquitectos de infraestructura, sea para distribuir carga y hacer a los sistemas escalables, como para prevención y recupero de información ante desastres. Hasta entonces January 09 TechEd 2007: Call For Papers para el Track de Arquitectura Para mitad de año proyectamos hacer el TechEd 2007 en Orlando, Florida (EEUU) por lo que estamos convocando a speakers expertos para ofrecer sesiones de Arquitectura, así que esperamos que esto te pueda interesar (e inspirar!
El TechEd 2007 se va a hacer del 4 al 8 de Junio, y es el principal evento de Microsoft para entrenar a profesionales de TI y a desarrolladores de software tanto en productos, tecnologías y servicios actuales como los que se vienen. Las sesiones presentadas en TechEd se enfocan a soluciones diseñadas para resolver los desafíos en los negocios de hoy, abarcando temas en un rango que cubre
Nos complace invitarte para que envíes una propuesta de sesión no más allá del 24 de Enero de 2007 Querés saber más acerca de en qué consisten estas sesiones (breakout sessions)?
Si tu propuesta es seleccionada, Microsoft te paga el viaje, alojamiento y comida, el pase a la conferencia, y también te da una remuneración (esto último aplica sólo si no sos empleado de Microsoft) Si estás interesado en postular un tema para considerar, por favor seguí los pasos de acá abajo Pasos para Postular
Espero que estés dispuesto a compartir tu sabiduría en TechEd 2007 y quedo a la espera de tu postulación!
Fechas para Agendar
Pensamiento Lateral: Creatividad para Salirse del Montón
"Nunca la vida es tan precisa Supongamos que hiciste un generador de código que, dado como input el string de conexión a una base de datos, es capaz de generarte clases que mapean las tablas relacionales y contienen ya toda la lógica CRUD (por create, retrieve, update, delete) incluyendo ciertas validaciones basadas en los constraints (condicionamientos) del RDBMS (manejador de base de datos) que tu generador es capaz de detectar. Siempre suponiendo, imaginémonos que incluyendo accesos específicos a la base de datos para recuperar esos constraints y generar código que contemple los mismos (y enmascare errores o evite round-trips innecesarios a la base), el generador crea y compila una clase basada en una tabla en 1'23'' (un minuto veintitrés segundos) Si tu base de datos tiene sesenta (60) tablas y el generador va a generar lógica para todas ellas, una atrás de la otra en forma secuencial, en cuánto tiempo generó las sesenta clases? Acostumbrados, como nos enseñaron desde chicos, a razonar en forma aritmética y lógica, para responder a la pregunta de recién la mayoría de nosotros va a querer aplicar la regla de tres simple que nos enseñaban al terminar la primaria: "Si x me cuesta k, y me costará yk/x" Especializando la regla de tres a este caso, x = 1, k = 1'23'', y = 60 Por consiguiente, la respuesta es 60x1'23'', igual a... igual a... dejame pensar... un minuto por sesenta da una hora, y veintitrés segundos por sesenta... ché, nadie tiene una maquinita!? A ver, vos, fijate si con el Excel ahí me podés hacer esta cuenta... Pero mirá que tenés que redondear, eh? Porque es una cuenta de tiempo, y si te pasás de sesenta tenés que convertir eso a minutos y agregarselo a los minutos... un bardo... No, el bardo no es la cuenta redondeando tiempos. El bardo es no apiolarte que estás multiplicando justo por 60: la base del sistema sexagesimal que se usa para medir el tiempo. Entonces, sin calculadora ni Excel ni redondeos ni nada te digo Rta: tu generador de código va a generar lógica para las sesenta tablas en una hora veintitrés minutos (1h 23', es decir, queda todo como está excepto que los minutos ahora son horas y, los segundos, minutos) Estaba mal hacer la cuenta en serio? No, no estaba mal pero como en muchos casos se suele dar, te lleva a la solución por un camino predecible, de final conocido, aunque más largo que caminos alternativos que simplemente desechamos por falta de creatividad. Y no es que no seamos creativos! Seguro que varios de los que nos mandamos a contestar por el camino largo, solemos ser creativos ante aquellos problemas que claramente requieren de una solución original En cambio, frente a situaciones donde una solución conocida es aplicable, echamos mano a la misma sin complicarnos la vida con divagaciones metafísicas, aunque -como en este caso- el camino optado era indudablemente más complejo que el que consideraba que se estaba multiplicando por la base del sistema de medición Y es que la gran pregunta que todos nos debemos hacer es... si aplicar una solución creativa puede salir más barato que una solución aritmético/lógica conocida... cuánto más caro pueda ser encontrar rápido esa solución creativa? Y es verdad. Ser original es ante todo una manifestación de deseo, todos nosotros por momentos nos creémos que somos innovadores, creativos -o te lo terminan haciendo creer quienes admiran lo que hacés-, hasta que te enfrentan a una situación donde se te explicita "dale, ahora usá tu creatividad y resolvé este balurdo". Y zás... te bloqueás. Te tarás. No se te ocurre un soto, una porque están todos mirandote y otra porque te da miedo de decir una ganzada bajo presión y que a partir de ahí empiecen a desconfiar de tus habilidades Pero la buena noticia que te vengo a traer, es que hay alguien que estudio el orígen de la conducta creativa y concluyó que es posible laburar la croqueta para ser naturalmente creativo (y a la vez productivo) en todos los ámbitos (en el laburo, en la pareja, la familia, en la calle, el colectivo, etc) El buena onda que nos dice "vamos que tú puedes!" se llama Edward de Bono (psicólogo maltés nacido en 1933). De Bono acuñó en 1967 el término "Pensamiento Lateral" ("Lateral Thinking") para referirse a un tipo de pensamiento alternativo a los paradigmas de razonamiento aritméticos y lógicos que nos enseñan desde chicos (de Bono los llama "pensamiento vertical"). Su objetivo no es abolir las formas de pensar tradicionales sino complementar y enriquecer a estas con nuevos estilos de pensamiento que, por no desarrollarlos, los tenemos atrofiados El libro base en que enuncia todo esto se llama, sin romperse mucho el mate, "El Pensamiento Lateral" ("The Lateral Thinking") y es hasta el día de hoy un best-seller (el año 2010, o sea dentro de tres años, va a cumplir 40 años dicho material). En sus propias palabras
En el libro destaca las actitudes hacia un desarrollo del pensamiento lateral y ofrece ciertas técnicas para comenzar a pensar de costado sin caerse. Estas técnicas, como contaba antes, hoy son seguidas por legiones de personas, en forma individual, o incluso a nivel organizacional, para mejorar la productividad de los resultados basados en la toma de decisiones Existen, asimismo, infinidad de libros para ejercitar, fortalecer o al menos testear qué nivel de creatividad aplicamos para resolver problemas. En Argentina, particularmente, Ediciones de Mente lleva editados varios de estos libros que se suelen dividir en tres secciones
De Bono escribió otro best-seller llamado "Seis Sombreros para Pensar" ("Six Thinking Hats", 1985), que merece la pena referirme en otro post. Lo único que voy a anticipar es que, para los que quieren ir de lleno y a full con el pensamiento lateral, se les sugiere comenzar entendiendo los mecanismos de pensamiento paralelo (los seis sombreros) con los que la mente opera Quiero mostrar con otro ejemplo cómo el pensamiento lógico a veces nos lleva a pisar el palito (en realidad no es culpa del pensamiento vertical sino nuestra en cuanto al uso limitado que le damos): se nos pregunta si existiran dos números enteros que multiplicados entre sí den por resultado 11 (once). La primera reacción que yo tuve, desempolvando inmediatamente recuerdos de Álgebra de la facu, es que por ser 11 un número primo, no existen dos enteros diferentes de 1 y de sí mismo, (o sea 11) que sirvan de divisores del número. Con lo cual mi conclusión atolondrada fue "no, no existen". Y al revisar la respuesta me encontré "sí existen: 1 y 11 multiplicados entre sí dan por resultado 11". Gajes del oficio En cambio está anécdota que te voy a contar ahora como cierre del post es mucho más impactante: al final de la Segunda Guerra Mundial, un equipo de técnicos de la aviación norteamericana estaba revisando aquellos aviones que habían logrado volver, con el fin de brindar recomendaciones para bajar la vulnerabilidad de los mismos en los futuros modelos. Casi todos ellos presentaban daños sustanciales en varias partes, y curiosamente había partes que no presentaban daños en ninguno de ellos. Todos los técnicos recomendaban reforzar aquellas partes que al menos en algún avión aparecían dañadas, comenzando antes por las que estaban dañadas en más aviones. Excepto uno sólo de ellos, que sugería reforzar aquellas partes que no presentaban daños en ninguno de los aviones, quizás también usando parte del presupuesto para reforzar esas partes que estaban averiadas en un número bajo de aviones Su explicación? Lo que ellos estaban analizando no era el universo completo de la flota norteamericana, sino tan sólo aquellos aviones que consiguieron regresar. Por ende, existía evidencia en los mismos de que, aún con ciertas partes dañadas, esos aviones habían logrado volver. Esto le daba a pensar que aquellos aviones que sufrieron daños en las partes que estaban sanas en todos los que volvieron, fueron los que quedaron fuera de combate
PD: querés empezar ya a cebarte las neuronas con acertijos de ese estilo? Metete por acá, http://www.geocities.com/siliconvalley/pines/7894/acertijos.html, y dale las gracias a mi amiga Silvia (la ninjutsista Deianeira) que me arrimó ese link valiosísimo January 04 Buenos Aires Vice Versa (Cronica de mi viaje de Fin de Año) Viviendo tan lejos, la verdad que la tierra de uno se extraña y bastante. Pero lo bueno del asunto es que siempre se puede hacer un paréntesis y volver para colmar todo aquello que se extrañaba y dejar los contadores en 0 (cero)
Este viajecito que hicimos con Paula fue realmente sin desperdicio. Con la flía, con amigos, en casa, por las calles de Buenos Aires... Buenos Aires a full. No como la que yo extrañaba sino mucho mejor. Pasá a ver las fotos haciendo click acá
|
|
|