Quem nunca teve um sistema ou um site que funcionava perfeitamente e de forma estável e de repente em um momento tudo começa ficar lento e para de funcionar. Os clientes começam a reclamar e a solução mais óbvia é de aumentar a capacidade da máquina de banco de dados e tudo volta ao normal.
OK, problema resolvido, mas depois no final do mês vem a conta da hospedagem e voce percebe que está pagando muito caro para manter um sistema relativamente simples e que deveria ter um baixo custo e o pior de tudo, fazendo as contas, sua margem de lucro começa a derreter...
Se você está buscando alternativas para reduzir seus custos com banco de dados, provavelmente você já pensou em alternativas como:
- Uso de cache de dados em memória
- Otimização do banco (compressão, indexação, separar leitura da escrita)
- Utilizar serviços em nuvem escaláveis (AWS, Azure ou GCP)
No entanto existe outra alternativa simples, direta e de baixo risco, uma vez que as alternativas acima demandam alterações na sua estrutura de dados e como consequência também exigirão ciclos de testes exaustivos para evitar possíveis efeitos colaterais.
Uma alternativa muito eficiente de conseguir isso é através do uso de filas. Nós da 10i9 estamos sempre buscando maneiras de garantir que as nossas aplicações sejam escaláveis, confiáveis e disponíveis 24/7. Vamos compartilhar e descrever abaixo um case nosso que trouxe ganho bastante expressivo.
Existem diversos sistemas de mensageria confiáveis disponíveis no mercado que te ajudam a implantar o gerenciamento de filas de forma eficiente e robusta, dentre elas podemos citar Kafka, RabbitMQ, Amazon SQS , Azure Service Bus dentre outros.
Através do uso adequado das filas, podemos reduzir drasticamente a carga de conexões simultâneas em um banco de dados relacional, evitando assim sobrecargas e garantindo que a aplicação continue funcionando mesmo durante picos de tráfego. Em nosso case detalhamos como fizemos para baixar de 6000 conexões para incríveis 15 conexões com o banco de dados, aliviando consideravelmente a carga no banco e consequentemente gerando uma economia enorme para nosso cliente.
O uso de qual a melhor solução de fila a ser utilizada vai depender da carga e da complexidade dos dados. Por exemplo, se a sua aplicação apresenta uma carga.
Porém, se sua aplicação apresenta uma carga de dados maior e complexa, é aconselhável usar o serviço do Kafka que é mais adequado para aplicações em larga escala que precisam processar grandes volumes de dados em tempo real, para mais informações do serviço Kafka você pode nos contatar.
Além disso, o RabbitMQ é fácil de integrar com outros sistemas e tecnologias e com sua aplicação existente e tirar proveito de suas vantagens sem precisar mudar completamente sua infraestrutura.
Para aumentar ainda mais a performance é possível utilizar o RabbitMQ junto com a nuvem AWS, através de máquinas EC2 ou Amazon MQ. Isso permite que as empresas tirem proveito da escalabilidade e flexibilidade da nuvem, sem comprometer a performance e a confiabilidade da mensageria.
Também é uma solução altamente recomendada para empresas que enfrentam desafios relacionados ao gerenciamento de mensagens e processamento de filas. Algumas das indústrias e aplicações que podem se beneficiar:
- E-Commerce: RabbitMQ é útil para gerenciar o processamento de pedidos em grande escala, garantindo a entrega rápida e precisa de informações aos usuários.
- Rastreamento de veículos: RabbitMQ é útil para gerenciar a carga do banco de dados com maior eficiência, garantindo que as conexões não fiquem lentas e também não tragam prejuízos para o sistema.
- Mídia e entretenimento: RabbitMQ pode ser usado para gerenciar a distribuição de conteúdo em tempo real para usuários em diferentes plataformas.
- Financeiras: RabbitMQ pode ser usado para gerenciar a integração de sistemas financeiros, garantindo a precisão e eficiência das transações financeiras.
- Saúde: RabbitMQ pode ser usado para integrar sistemas de saúde, garantindo a entrega rápida e precisa de informações médicas a profissionais de saúde.
- IoT: RabbitMQ pode ser usado para integrar dispositivos IoT, garantindo a comunicação eficiente entre dispositivos.
Case
No caso descrito, aplicamos o RabbitMQ para reduzir o número de conexões simultâneas ao banco de dados. Os testes foram realizados tomando como base a quantidade de 330.000 dispositivos de rastreamento de veículos, considerando que cada um realiza uma requisição por segundo, resultando em 6000 requisições por segundo. O banco de dados utilizado foi o RDS MYSQL e o RabbitMQ foi executado em uma instância EC2
Para aumentar ainda mais a performance é possível utilizar o RabbitMQ junto com a nuvem AWS, através de máquinas EC2 ou Amazon MQ. Isso permite que as empresas tirem proveito da escalabilidade e flexibilidade da nuvem, sem comprometer a performance e a confiabilidade da mensageria. Veja na imagem a seguir o esquema que foi aplicado para essa solução.
Diagrama de funcionamento
Os resultados do teste mostraram que a utilização do RabbitMQ foi eficiente para lidar com o grande volume de requisições ao banco de dados. Com apenas uma fila para todo o banco de dados, elevamos o teste ao máximo de esforço, e com 12 consumidores para a fila, conseguimos manter a performance do sistema estável. Além disso, a utilização da fila permitiu que as requisições fossem processadas de maneira ordenada e evitou o sobrecarregamento de conexões do banco de dados, passando de 6000 conexões simultâneas para apenas 15.
Se você está procurando uma solução de mensageria escalável, confiável e fácil de integrar, o RabbitMQ pode ser a escolha certa para sua empresa. Ele pode ajudá-lo a garantir que sua aplicação esteja sempre disponível, mesmo durante picos de tráfego, e a reduzir a carga de conexões simultâneas em seu banco de dados, garantindo assim um desempenho superior. Além disso, a integração com a nuvem AWS, possibilita ganhos significativos em termos de escalabilidade, disponibilidade e flexibilidade, além de uma redução nos custos de operação.
Na imagem a seguir temos um gráfico mostrando a quantidade de mensagens que o sistema deve suportar e a taxa de envio dessas mensagens
Taxa e Quantidade de Mensagens simultâneas
Através do uso adequado das filas, podemos reduzir a carga de conexões simultâneas em seu banco de dados, evitando assim sobrecargas e garantindo que sua aplicação continue funcionando mesmo durante picos de tráfego. Além disso, o RabbitMQ é altamente escalável e confiável, garantindo que sua aplicação continue funcionando mesmo sob alta demanda de dados simultâneos. Já se sua aplicação apresenta uma carga de dados maior e complexa, a alternativa é usar o serviço do Kafka que é mais adequado para aplicações em larga escala que precisam processar grandes volumes de dados em tempo real, para mais informações do serviço Kafka você pode nos contatar.
Comparativo com e sem Fila
Além disso, o RabbitMQ é fácil de integrar com outros sistemas e tecnologias e com sua aplicação existente e tirar proveito de suas vantagens sem precisar mudar completamente sua infraestrutura.
Também é uma solução altamente recomendada para empresas que enfrentam desafios relacionados ao gerenciamento de mensagens e processamento de filas. Algumas das indústrias e aplicações que podem se beneficiar:
- E-Commerce: RabbitMQ é útil para gerenciar o processamento de pedidos em grande escala, garantindo a entrega rápida e precisa de informações aos usuários.
- Rastreamento de veículos: RabbitMQ é útil para gerenciar a carga do banco de dados com maior eficiência, garantindo que as conexões não fiquem lentas e também não tragam prejuízos para o sistema.
- Mídia e entretenimento: RabbitMQ pode ser usado para gerenciar a distribuição de conteúdo em tempo real para usuários em diferentes plataformas.
- Financeiras: RabbitMQ pode ser usado para gerenciar a integração de sistemas financeiros, garantindo a precisão e eficiência das transações financeiras.
- Saúde: RabbitMQ pode ser usado para integrar sistemas de saúde, garantindo a entrega rápida e precisa de informações médicas a profissionais de saúde.
- IoT: RabbitMQ pode ser usado para integrar dispositivos IoT, garantindo a comunicação eficiente entre dispositivos.
No caso descrito, aplicamos o RabbitMQ para reduzir o número de conexões simultâneas ao banco de dados. Os testes foram realizados tomando como base a quantidade de 330.000 dispositivos de rastreamento de veículos, considerando que cada um realiza uma requisição por segundo, resultando em 6000 requisições por segundo. O banco de dados utilizado foi o RDS MYSQL e o RabbitMQ foi executado em uma instância EC2.