Existem todos os tipos de técnicas para processamento de transações de alto desempenho, e a do artigo de Fowler é apenas uma das muitas no limite. Em vez de listar várias técnicas que podem ou não ser aplicáveis à situação de qualquer pessoa, acho melhor discutir os princípios básicos e como o LMAX aborda um grande número deles.
Para um sistema de processamento de transações de alta escala, você deseja fazer o seguinte, tanto quanto possível:
Minimize o tempo gasto nas camadas de armazenamento mais lentas. Do mais rápido ao mais lento em um servidor moderno, você tem: CPU / L1 -> L2 -> L3 -> RAM -> Disco / LAN -> WAN. O salto do disco magnético moderno mais rápido para a RAM mais lenta ultrapassa 1000x para acesso seqüencial ; acesso aleatório é ainda pior.
Minimize ou elimine o tempo gasto em espera . Isso significa compartilhar o menor estado possível e, se o estado precisar ser compartilhado, evitar bloqueios explícitos sempre que possível.
Espalhe a carga de trabalho. CPUs não tenha chegado muito mais rápido nos últimos anos, mas eles têm -se menor, e 8 núcleos é bastante comum em um servidor. Além disso, você pode até espalhar o trabalho por várias máquinas, que é a abordagem do Google; O melhor disso é que ele escala tudo, incluindo E / S.
Segundo Fowler, o LMAX adota a seguinte abordagem para cada um deles:
Mantenha todo o estado na memória o tempo todo . A maioria dos mecanismos de banco de dados fará isso de qualquer maneira, se o banco de dados inteiro puder caber na memória, mas eles não querem deixar nada ao acaso, o que é compreensível em uma plataforma de negociação em tempo real. Para fazer isso sem aumentar muito o risco, eles tiveram que criar um monte de infraestrutura leve de backup e failover.
Use uma fila sem bloqueio ("disruptor") para o fluxo de eventos de entrada. O contraste com as filas de mensagens duráveis tradicionais que definitivamente não são bloqueadas e, de fato, geralmente envolvem transações distribuídas muito lentas .
Não muito. O LMAX joga este embaixo do barramento com base em que as cargas de trabalho são interdependentes; o resultado de um altera os parâmetros para os outros. Esta é uma advertência crítica e que Fowler explicitamente chama. Eles fazem algum uso de concorrência, a fim de fornecer recursos de failover, mas toda a lógica de negócio é processado em um único segmento .
LMAX não é a única abordagem para OLTP de alta escala. E, embora seja bastante brilhante por si só, você não precisa usar técnicas avançadas para obter esse nível de desempenho.
De todos os princípios acima, o número 3 é provavelmente o mais importante e o mais eficaz, porque, francamente, o hardware é barato. Se você pode particionar adequadamente a carga de trabalho em meia dúzia de núcleos e várias dúzias de máquinas, então o céu é o limite para as técnicas convencionais de computação paralela . Você ficaria surpreso com a quantidade de produtividade que pode obter com nada além de um monte de filas de mensagens e um distribuidor de rodízio. Obviamente, não é tão eficiente quanto o LMAX - na verdade, nem próximo -, mas a taxa de transferência, a latência e a relação custo-benefício são preocupações separadas, e aqui estamos falando especificamente sobre a taxa de transferência.
Se você tem o mesmo tipo de necessidades especiais que o LMAX possui - em particular, um estado compartilhado que corresponde à realidade dos negócios, em oposição a uma opção de design apressada -, sugiro experimentar o componente deles, porque não vi muito caso contrário, adequado a esses requisitos. Mas se estamos simplesmente falando sobre alta escalabilidade, recomendamos que você faça mais pesquisas em sistemas distribuídos, porque elas são a abordagem canônica usada pela maioria das organizações atualmente (Hadoop e projetos relacionados, ESB e arquiteturas relacionadas, CQRS que Fowler também menções e assim por diante).
Os SSDs também se tornarão um divisor de águas; sem dúvida, eles já são. Agora você pode ter armazenamento permanente com tempos de acesso semelhantes à RAM e, embora os SSDs de nível de servidor ainda sejam terrivelmente caros, eles eventualmente cairão de preço assim que as taxas de adoção aumentarem. Ele foi pesquisado extensivamente e os resultados são surpreendentes e só melhorarão com o tempo, portanto todo o conceito "manter tudo na memória" é muito menos importante do que costumava ser. Então, mais uma vez, tentaria me concentrar na simultaneidade sempre que possível.