Lidando com o crescimento de aplicações na Cloud

Publicado por André Junior no dia dev

Uma das lições que aprendemos cuidando da operação do RD Station foi que desenvolvimento e arquitetura devem estar adaptados ao volume da aplicação de acordo com o crescimento da demanda dos usuários. Para auxiliar nessa escalada, o uso de serviços disponíveis na nuvem ajudam em diversas situações. Uma prática comum é subir novas máquinas em horários de pico para segurar a demanda de requisições - na maioria dos serviços você tem esta opção ao alcance de um simples clique. Além dessa, outras estratégias podem ser aplicadas no dia-a-dia da operação.

Na Resultados Digitais, somos extremamente cuidadosos com a performance de nossos serviços e com a experiência de nossos clientes. Inclusive, este tópico foi tema de uma palestra que apresentei junto com o Jônatas no TDC 2015 em Florianópolis na trilha de Cloud Computing com o título “Escalando na nuvem”. Aqui estão os slides.

Tempo é $

A maioria dos serviços disponíveis cobram por hora. Outros cobram por uso. Por exemplo, o Heroku cobra pelo uso de cada tipo de Dyno; a Amazon, por Hora da Máquina, taxa de transferência e etc. Como economizar nesse cenário?

A resposta é muito simples: Otimização de recursos. Se não está sendo usado, desligue. Otimize a performance da sua aplicação seja reduzindo o tamanho de dados trafegados pela rede, seja aprimorando a performance do código executado. Além de fazer com que a sua aplicação escale, suas otimização impactarão também no $ gasto no final do mês.

Para exemplificar melhor, imagine que você possui um processo que consome uma fila de tarefas. Cada tarefa executada demora 2 segundos, ou seja, 10 mil tarefas demorariam ~5 horas para finalizar. Reduzindo o tempo de processamento de cada tarefa para 400 milisegundos, estes mesmos 10 mil jobs demorariam cerca de 1 hora para serem executados.

Monitoramento

Automatize todos os processos e evite trabalho manual (aka humanos).

Somos times pequenos. Colher métricas e garantir que o sistema está funcionando como se espera não é uma tarefa fácil. Ao deixar todo este trabalho automatizado com alertas de uso e de serviço garante-se que, caso aconteça algo inesperado, você será o primeiro a saber - e não o seu usuário. Ferramentas como o New Relic e Librato nos ajudam nessa tarefa.

Além disso, manter sua aplicação bem monitorada vai ajudar a identificar possíveis melhorias no uso. Por exemplo, irá te ajudar a encontrar algum index esquecido que pode melhorar consideravelmente a performance das buscas na base de dados. Nunca se esqueça que sem métricas não há como garantir qualquer melhoria de performance.

Conheça suas fraquezas

Considere as taxas de crescimento de sua base de dados, de uso e de crescimento de clientes. Evitar surpresas e incêndios é primordial tanto para nós como para os usuários.

Identifique os gargalos e sempre tente estar um passo à frente. É muito comum ter uma solução que resolva uma situação para um certo volume mas que não funcione para um volume com o dobro/triplo do tamanho. Por essa razão, estamos constantemente analisando os nossos dados e procurando por melhorias.

Não reinvente a roda

Mantenha o foco na sua aplicação e não perca tempo. Existem N serviços disponíveis na nuvem, portanto talvez exista algum que tenha o que você precisa. Temos que entregar valor ao usuário. Um bom exemplo é o Keen.io: uma ferramenta que agrega e mostra análises customizadas a partir de qualquer dado que enviamos.

Se prepare para migrações

Com o tempo, sua a aplicação irá crescer, códigos serão reescritos e melhorados. Lembre-se de que serviços e requisitos mudam. Cedo ou tarde, algum tipo de migração de dados acontecerá.

Planeje suas migrações para que sejam reversíveis, rápidas e que causem o mínimo possível de impacto ao usuário. Vale também dar uma olhada em outro post do blog que fala sobre 9 dicas para migrações eficientes com Active Record.

Nunca pare!

Com a adição de novas features, diferentes serviços, constantes atualizações e - principalmente - mais usuários, acompanhar o crescimento de uma aplicação web não é uma tarefa fácil. A nuvem nos possibilita um crescimento rápido e, para aproveitar essa característica da melhor maneira possível, precisamos nos preocupar diariamente com a experiência do usuário.

André Junior

André Junior

Full Stack Developer

Comentários