Fila em Banco: Escalando sua Aplicação com Banco Relacional

Será que você precisa mesmo de um broker como RabbitMQ ou Kafka para implementar uma fila de mensagens?

Nessa talk eu discuto como podemos usar um banco de dados relacional (RDBMS) para implementar uma fila de mensagens. A ideia básica é utilizar uma tabela como fila (queue), inserir mensagens (eventos) nesta tabela e por fim consultar os dados levando em conta concorrência e distribuição das mensagens entre consumidores concorrentes.

No fim, de forma simplista, podemos resumir a solução ao uso de SELECT...FOR UPDATE SKIP LOCKED, algo como abaixo:

  SELECT q.*
    FROM job_queue q
   WHERE q.status = 'PENDING'
ORDER BY q.created_at asc
   LIMIT 1
FOR UPDATE SKIP LOCKED

Eu palestrei sobre esse temas diversas vezes, e aqui você pode assistir a gravação da minha talk ministrada no evento online da Java Bahia:

Um dos principais pilares para escalar uma aplicação web é o uso mensageria, não à toa temos diversos Brokers para enfileirar as mensagens a fim de processá-las num ritmo que nossa aplicação consiga atender.

Mas será mesmo que precisamos adotar um Broker? A verdade é que não; por mais controverso que pareça, podemos usar um banco de dados relacional como uma fila de mensagens, aproveitando sua natureza ACID e todo seu controle de locking e concorrência. Com isso, obtemos um alto grau de performance e principalmente escalabilidade sem a necessidade de abrir mão do poder de um banco de dados ou ter que adicionar um novo componente de software (como um JMS Broker) na arquitetura da solução.

Nessa talk, você vai aprender como implementar mensageria utilizando um RDBMS através da feature SKIP LOCKED e entender que escalabilidade não se resume a Kafka ou Brokers MQ.

Os slides podem ser visualizados ou baixados no meu Speaker Deck: https://speakerdeck.com/rponte/fila-em-banco-escalando-sua-aplicacao-com-banco-relacional

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s