Mostrando entradas con la etiqueta performance. Mostrar todas las entradas
Mostrando entradas con la etiqueta performance. Mostrar todas las entradas

martes, julio 12, 2011

Martin Fowler analiza la arquitectura de LMAX

martes, julio 12, 2011 por Martín

Allá por Enero, escribía sobre la arquitectura de LMAX, una empresa que había desarrollado una aplicación para operar en mercados de derivados pero no sólo orientada a traders sino también al usuario final, y que presentaba unos números impresionantes. En InfoQ publicaron un video muy interesante donde los creadores de la arquitectura la explicaban en detalle.

Un amigo me ha pasado hoy este enlace, donde el mismísimo Martin Fowler ha hecho un análisis mucho más detallado sobre la arquitectura, complementado por notas que ha intercambiado por email con los autores. Si os interesa el tema de la escalabilidad y la computación de alto rendimiento entonces es un artículo que no os debéis perder.

viernes, junio 10, 2011

¿Es lento Lucene en tiempo real?

viernes, junio 10, 2011 por Martín

A través de este twit de Marc Sturlese, llego a un fenomenal artículo de Mike McCandless, miembro del proyecto Lucene y autor de la segunda edición de Lucene in Action, en el que se hace un exhaustivo análisis de las capacidades de Lucene para realizar búsquedas en tiempo real.

lunes, mayo 09, 2011

Oracle Coherence afirma haber conseguido rendimientos de RAM con SSD

lunes, mayo 09, 2011 por Martín

Llevo unos días bastante liado y con el blog un poquillo abandonado. A ver si lo solucionamos. Hoy, repasando mi lista de feeds he visto una noticia que ha salido en varios medios sobre el lanzamiento de Oracle Coherence 3.7.

Oracle compró Coherence en el 2007 (wow, como pasa el tiempo, este link apunta a mi propio blog en el Marzo del 2007, esto me ha dado un poco de vertigo). El producto es muy potente y es muy utilizado en sistemas que requiren alto rendimiento. En partícular es muy popular en sistemas de trading.

jueves, diciembre 23, 2010

GC: Only the good die young

jueves, diciembre 23, 2010 por Martín


Una frase popular dentro del frikimundo de la Garbage Collection es "Only the good die young", que proviene además de una canción bastante popular de Billy Joel y que le viene que ni pintada.

Un poco de background para la frase. Todo esto depende de la máquina virtual utilizada, pero tomando como referencia Hotspot que es una máquina virtual generacional, tenemos que la memoria se divide en dos generaciónes: Young generation y Tenured generation. Cada una de estas zonas a su vez está dividida en otras zonas, pero esto lo vamos a obviar por razones de simplicidad.

La Young Generation es mucho más pequeña que la Tenured Generation. Por lo tanto, la recolección de basura ahí es mucho más rápida. Pero aún más importante, la recolección de basura en la Young Generation se hace constantemente y no requiere parar los diferentes threads de la máquina virtual de Java, mientras que normalmente (recordad, esto es una visión meramente pedagógica y simplificada) la recolección de basura en la Tenured Generation exige parar todos los threads de la máquina virtual.

jueves, mayo 07, 2009

De BetFair a TradeFair. Historia de un motor transaccional.

jueves, mayo 07, 2009 por Martín


He estado viendo esta charla publicada hace unos días en InfoQ en la que el CTO de BetFair.com comenta como fue evolucionando su sistema de gestión de transacciones y como construyeron un motor capaz de funcionar tanto para apuestas deportivas como para mercados financieros.

El contenido de la charla es bastante interesante, aunque la charla en sí no es nada amena, así que no sabría si recomendárosla. Creo que sólo si os gusta el tema.

Uno de los comentarios interesantes de la charla es que parece que Oracle les comentó que BetFair puede ser una de las cinco aplicaciones más "calientes" del mundo en cuanto a contención de recursos.

En su caso el problema no es tanto la escalabilidad sino más bien el mantener el rendimiento del servidor durante determinadas ventanas de tiempo. En su web normalmente la mayoría de usuarios se concentran únicamente en torno a determinados eventos 'live'. Una vez que esos eventos terminan, los usuarios se mueven a otro evento. Un ejemplo es una carrera de caballos. La carrera empieza, se va sucediendo, termina y los usuarios se mueven a la siguiente carrera.

Todo esto los deja con que el problema pasa a ser un problema de optimización. ¿Cómo conseguir que el sistema se mantenga ejecutándose con un buen rendimiento de manera continua?

La gestión del riesgo y gestión de apuestas es mucho más sencilla ya que se puede dividir en clientes o cuentas, lo que permite fácilmente particionar y procesar en paralelo. La actividad de cada cuenta en estos sistemas suele ser pequeña, es decir, ningún usuario está ahí sentado en su ordenador ejecutando 50.000 apuestas por segundo.

La vista de mercado es read-only lo que les permite una serie de optimizaciones. El multi-casting es común para enviar el estado de las apuestas a diferentes clientes. Eso funciona para sus clientes de escritorio pero en la web tienen problemas. Ahora mismo utilizan polling. Están intentando migrar a una aproximación basada en streaming y comet pero todavía no estaba acabado.

En cuanto a la transaccionalidad, ahí es donde las cosas se tornan complejas. El objetivo de BetFair era pasar de las 500 TPS a las 50000 TPS. Para ello mantuvieron diferentes rondas de entrevistas con equipos y empresas clave, como puedan ser las compañías que desarrollan los mercados de valor por ejemplo. Pero aparentemente ninguna solución se ajustaba exactamente al modelo de BetFair. Les propusieron una especie de competición para conseguir el motor más rápido (asumo que o bien les pagaron o bien compartiron la propiedad intelectual), y BetFair salió ganando.

Todo el modelo de transaccionalidad se basa en el control programático de las transacciones, lo que muchas veces les obliga a compensar transacciones cuando hay que hacer algún rollback; en el uso de mensajería; y finalmente en el mantener enormes registros de auditoría con todas las operaciones. De modo que si algún servidor o algún agente se cae, puedan replicar todas las acciones que había pendientes.

Respecto a la alta disponibilidad, su reto era que si se caia un agente, tener otro listo para continuar sirviendo peticiones. Básicamente una estrategia activo/pasivo. Sólo uno está ejecutando el mercado en un momento dado, pero si algo falla, el segundo tomará el relevo. Evaluaron numerosas posibilidades (relatadas en la charla), pero al final se quedaron con el log tailing, que básicamente viene siendo que el agente pasivo lee los logs del activo y va replicando todas sus acciones.

Ya al final de la charla dedican unos quince minutos a hablar de como evolucionaron de BetFair a TradeFair y los retos que eso suponía. Partían de su motor, FlyWheel, capaz de ejecutar decenas de miles de transacciones por segundo, pero que sin embargo tenía unos niveles de latencia altos y no consistentes, algo no aceptable para los mercados financieros. Ese fue básicamente su principal reto. Entre las soluciones pues básicamente el intentar evitar la escritura a disco, controlar la recolección de basura y la instanciación de objetos, y también regular sus tasas de transferencia (throttling throughput).

jueves, diciembre 04, 2008

Latencia, monitorización de redes y microbursts.

jueves, diciembre 04, 2008 por Martín


El software para operar en mercados de valores es realmente apasionante. Desde fuera puede parecer muy aburrido pero una vez que estás dentro descubres que se trata de una lucha constante por la optimización. Minimizar la latencia es fundamental. En ese mundo, el que consigue que sus operaciones lleguen antes al mercado es el ganador. Y ahí cualquier cosa, ya sean switches, routers, servidores de aplicaciones o esa clase Java que está al final de toda la cadena y que envía el mensaje a la cola de MQ son importantes.

Todas estas cosas se multiplican por 1000 cuando estamos en una época de incertidumbre, y que en cualquier momento el mercado puede bajar un 5% o una moneda puede desplomarse frente a otra en cuestión de minutos. Muchas empresas emplean herramientas de monitorización para tratar de descubrir patrones de operación en el mercado. Estas herramientas pueden ser internas, como Wily Introscope con la uqe he trabajado y que no puedo más que recomendar, o externas.

Las herramientas internas tienen la ventaja de integrarse muy bien con el stack de la aplicación y de ofrecer información bastante específica, como tiempos que tardan en procesarse mensajes en colas, o el tiempo que tarda en ejecutarse un método determinado, etc. Sin embargo el inconveniente es que añaden una carga extra de proceso que irremediablemente impacta en la latencia, por lo que al final te ves obligado a desplegar una versión con monitorización mínima en producción; aunque son fenomenales para desarrollo, ya que ahí puedes permitirte monitorizar muchos más datos.

Por otra parte hay herramientas externas que funcionan ajenas a las aplicaciones y servidores y que se basan simplemente en capturar el tráfico de las redes y en analizar sus patrones para proporcionar información, generar gráficos y lanzar eventos a partir de ésta. Dentro de este sector se encuentra Endace. Por cierto que si os interesa el tema, Corvil es una empresa irlandesa que está teniendo también bastante éxito en este mundillo.

En Low Latency han publicado un pequeño podcast/entrevista de siete minutillos que explica algunas de estas cosillas y que es bastante ameno de escuchar. Es un poco publicitario, porque el entrevistado es Paul Doyce, Technical Manager de Endace, pero se lleva bastante bien.

También os lo podéis descargar directamente desde este link.

Photo via travel_aficionado@Flickr.

domingo, enero 13, 2008

High Performance AJAX Applications

domingo, enero 13, 2008 por Martín

En la Yahoo Developers Network se puede ver el video de una presentación muy interesante de Julian Leconte titulada High Performance AJAX Applicatons.



Julian Leconte es ingeniero del equipo de desarrollo web de Yahoo y en esta presentación trata temas tan interesantes como el rendimiento de JavaScript, DHTML, CSS, AJAX y como utilizar algunas herramientas para medirlo. La presentación se construye sobre el fenomenal trabajo que ha realizado Steve Souders con su High Performance Web Sites. Por cierto, la presentación es totalmente agnóstica y aunque utiliza ejemplos de YUI (Yahoo User Interface), todo lo que se puede aprender en ella es aplicable a cualquier otro entorno y frameworks.