Logo 10i9
Menu burger icon

Diminua os gastos do seu banco de dados e aumente a performance

Sumário
Compartilhe nas redes
FacebookLinkedinTwitter
Veja nesse artigo como otimizar um banco de dados relacional para diminuir o numero de conexões e com isso reduzir drasticamente os custos de sua aplicação.

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:

  1. 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.
  2. 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.
  3. 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.
  4. Financeiras: RabbitMQ pode ser usado para gerenciar a integração de sistemas financeiros, garantindo a precisão e eficiência das transações financeiras.
  5. 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.
  6. IoT: RabbitMQ pode ser usado para integrar dispositivos IoT, garantindo a comunicação eficiente entre dispositivos.

Case

rabbitMQ

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. 

AWS-schema-db-rabbitMQ

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

rabbitMQ-message-queue

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.

connecoes-com-sem-rabbitMQ

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:

  1. 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.
  2. 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.
  3. 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.
  4. Financeiras: RabbitMQ pode ser usado para gerenciar a integração de sistemas financeiros, garantindo a precisão e eficiência das transações financeiras.
  5. 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.
  6. 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.

Referências:

  • From 15,000 database connections to under 100: DigitalOcean's tale of tech debt: Link
  • RabbitMQ | Eficiência | Como jogar dinheiro fora, case da Digital Ocean: Link
Compartilhe nas redes
FacebookLinkedinTwitter
Gustavo Faria

Desenvolvedor Cloud especializado em AWS na 10i9 Tecnologia