Hay todo tipo de técnicas para el procesamiento de transacciones de alto rendimiento y la que se encuentra en el artículo de Fowler es solo una de las más avanzadas. En lugar de enumerar un montón de técnicas que pueden o no ser aplicables a la situación de cualquier persona, creo que es mejor discutir los principios básicos y cómo LMAX aborda una gran cantidad de ellos.
Para un sistema de procesamiento de transacciones a gran escala, desea hacer todo lo siguiente tanto como sea posible:
Minimice el tiempo que pasa en los niveles de almacenamiento más lentos. De más rápido a más lento en un servidor moderno que tiene: CPU / L1 -> L2 -> L3 -> RAM -> Disco / LAN -> WAN. El salto desde incluso el disco magnético moderno más rápido a la RAM más lenta es más de 1000x para acceso secuencial ; El acceso aleatorio es aún peor.
Minimice o elimine el tiempo de espera . Esto significa compartir el menor estado posible y, si el estado debe compartirse, evitar bloqueos explícitos siempre que sea posible.
Difundir la carga de trabajo. Las CPU no se han vuelto mucho más rápidas en los últimos años, pero se han vuelto más pequeñas y 8 núcleos son bastante comunes en un servidor. Más allá de eso, incluso puede distribuir el trabajo en varias máquinas, que es el enfoque de Google; Lo mejor de esto es que escala todo, incluidas las E / S.
Según Fowler, LMAX adopta el siguiente enfoque para cada uno de estos:
Mantenga todo el estado en la memoria en todo momento. La mayoría de los motores de bases de datos lo harán de todos modos, si toda la base de datos puede caber en la memoria, pero no quieren dejar nada al azar, lo cual es comprensible en una plataforma de negociación en tiempo real. Para lograr esto sin agregar un montón de riesgos, tuvieron que construir un montón de infraestructura de respaldo y conmutación por error liviana.
Use una cola sin bloqueo ("disruptor") para la secuencia de eventos de entrada. Contraste con las colas de mensajes duraderas tradicionales que definitivamente no están libres de bloqueo y, de hecho, generalmente implican transacciones distribuidas dolorosamente lentas .
No mucho. LMAX lanza este debajo del bus sobre la base de que las cargas de trabajo son interdependientes; el resultado de uno cambia los parámetros para los otros. Esta es una advertencia crítica , y que Fowler llama explícitamente. Hacen alguna uso de concurrencia con el fin de proporcionar capacidades de conmutación por error, pero toda la lógica de negocio se procesa en un solo hilo .
LMAX no es el único enfoque para OLTP a gran escala. Y aunque es bastante brillante por derecho propio, no es necesario utilizar técnicas de vanguardia para lograr ese nivel de rendimiento.
De todos los principios anteriores, el # 3 es probablemente el más importante y el más efectivo, porque, francamente, el hardware es barato. Si puede dividir adecuadamente la carga de trabajo en media docena de núcleos y varias docenas de máquinas, entonces el cielo es el límite para las técnicas convencionales de computación paralela . Te sorprendería la cantidad de rendimiento que puedes lograr con nada más que un montón de colas de mensajes y un distribuidor de turnos. Obviamente, no es tan eficiente como LMAX, en realidad ni siquiera cercano, pero el rendimiento, la latencia y la rentabilidad son preocupaciones separadas, y aquí estamos hablando específicamente sobre el rendimiento.
Si tiene el mismo tipo de necesidades especiales que LMAX tiene, en particular, un estado compartido que corresponde a una realidad empresarial en lugar de una elección de diseño apresurada, entonces sugeriría probar su componente, porque no he visto mucho De lo contrario, es adecuado para esos requisitos. Pero si simplemente estamos hablando de alta escalabilidad, entonces le insto a que investigue más sobre los sistemas distribuidos, porque son el enfoque canónico utilizado por la mayoría de las organizaciones hoy en día (Hadoop y proyectos relacionados, ESB y arquitecturas relacionadas, CQRS que Fowler también menciona, y así sucesivamente).
Los SSD también se convertirán en un cambio de juego; posiblemente, ya lo son. Ahora puede tener almacenamiento permanente con tiempos de acceso similares a la RAM, y aunque los SSD de nivel de servidor siguen siendo terriblemente caros, eventualmente bajarán de precio una vez que aumenten las tasas de adopción. Se ha investigado ampliamente y los resultados son bastante alucinantes y solo mejorarán con el tiempo, por lo que todo el concepto de "mantener todo en la memoria" es mucho menos importante de lo que solía ser. Entonces, una vez más, trataría de centrarme en la concurrencia siempre que sea posible.