Baseado nas idéias do Disruptor (http://code.google.com/p/disruptor) um dos projetos mais interessantes que me deparei nos últimos tempos, estou lançando o MentaQueue.
Basicamente é o queue mais rápido para transferência de mensagens entre um trhead consumidor e um thread produtor com as seguintes características:
:arrow: sem lock
:arrow: sem garbage
:arrow: com batching
O resultado é baixa latência e alta performance. Não é atoa que o pessoal do Disruptor afirma que eles criaram a bolsa de valores eletrônica mais rápida do mundo: http://www.lmax.com
Quem quiser ajudar no projeto entre em contato via mensagem privada. Um bom comeco, para entender bem os conceitos, seria traduzir a documentacao para o portugues. É pouca coisa e o Kawai facilita muito.
Prezado saoj, parabéns, sempre trazendo projetos bacanas e muito úteis pra gente…parabéns pelo trabalho! Já baixei a bagaça e vou dar uma olhada a fundo assim que puder.
Quem tiver uma máquina com dois processadores físicos (ou mais) e quiser rodar o teste de performance e reportar os resultados seria ótimo. Outra coisa que acho que dá para fazer é melhorar o código do producer e do consumer para ser ainda mais rápido. Também um fator que vai influir no resultado é a estratégia de espera (http://mentaqueue.soliveirajr.com/Page.mtw?name=SampleCodeWithWaitStrategy). Deve ter como alterar as configuracoes das estratégias (e as estrategias em si) e conseguir resultados melhores. Planejo tentar codificar umas wait strategies que reportam estatísticas, mas só o fato de coletar essas estatísticas já deve influenciar no resultado.
O que tenho curiosidade de fazer é rodar isso num Linux com dois processadores e PINar cada thread num processador e ver o que acontece.
[quote=saoj]Baseado nas idéias do Disruptor (http://code.google.com/p/disruptor) um dos projetos mais interessantes que me deparei nos últimos tempos, estou lançando o MentaQueue.
Basicamente é o queue mais rápido para transferência de mensagens entre um trhead consumidor e um thread produtor com as seguintes características:
:arrow: sem lock
:arrow: sem garbage
:arrow: com batching
O resultado é baixa latência e alta performance. Não é atoa que o pessoal do Disruptor afirma que eles criaram a bolsa de valores eletrônica mais rápida do mundo: http://www.lmax.com
Quem quiser ajudar no projeto entre em contato via mensagem privada. Um bom comeco, para entender bem os conceitos, seria traduzir a documentacao para o portugues. É pouca coisa e o Kawai facilita muito.[/quote]
Curiosidade saoj, porque diz isso: [quote]Basicamente é o queue mais rápido para transferência de mensagens entre um trhead consumidor e um thread produtor com as seguintes características:[/quote] ?
Foram executados testes com outros modelos disponíveis ? Poderia postar esses testes ? No que se baseia essa informação ? A curiosidade é porque usamos bastante queue em nosso sistema e isso me deixou intrigado, mas uso o que o Glassfish 3.1.2 disponibiliza, nada fora disso.
> Foram executados testes com outros modelos disponíveis ? Poderia postar esses testes ? No que se baseia essa informação ? A curiosidade é porque usamos bastante queue em nosso sistema e isso me deixou intrigado, mas uso o que o Glassfish 3.1.2 disponibiliza, nada fora disso.
Foram realizados testes com varios modelos, mais precisamente 7 implementacoes diferentes. Os testes estão todos lá no site, com numeros, especificacoes e resultados.
[quote=saoj]> Foram executados testes com outros modelos disponíveis ? Poderia postar esses testes ? No que se baseia essa informação ? A curiosidade é porque usamos bastante queue em nosso sistema e isso me deixou intrigado, mas uso o que o Glassfish 3.1.2 disponibiliza, nada fora disso.
Foram realizados testes com varios modelos, mais precisamente 7 implementacoes diferentes. Os testes estão todos lá no site, com numeros, especificacoes e resultados.
O único problema atual nosso é o possível refactory em remover a implementação baseada em Filas atuais para utilizar a do MentaQueue. Teria de analisar com calma, todavia, os números tem se mostrado bem interessantes, se eles fizerem jus também a confiabilidade da entrega de mensagens, será bem interessante.
Falando nisso, o que ocorre se uma mensagem é enviada e há uma queda do consumidor ? Ela permanece em fila até ser consumida posteriormente ?
Abraços.
Para obter performances elevadas o queue tem que ser batching. Se vc olhar os testes vai ver que eu testei tb os queues em modo non-batching, o que se assemelharia mais aos queues tradicionais, (interface Queue do Java). Mesmo em modo batching o AtomicQueue ganho dos queues tradicionais.
Os testes estão testando isso. As mensagens nos testes são sequenciadas e se alguma se perder ele joga uma exception. Testei com 100 milhões de mensagens e nenhuma se perdeu. A própria implementacao assegura isso.
O queue tb se protege contra overlap do buffer circular. Testei 100 milhões de mensagens num queue pequeno (1024 entries) e não houve nenhum problema. A própria implementacao assegura isso.
Por isso cada vez mais vem aparecendo outras linguagens rodando na Plataforma Java ela é muito madura.
Sergio seria interessante colocar esse projeto no github assim contribuir ficaria mais fácil.
Parabéns pelo trabalho.[/quote]
Vou colocar esses links lá no site. Falando em site, o que acharam do site do projeto? O que eu mais gostei é que para documentar código eu apenas tenho que fazer: