A aplicação da Rankdone é composta por um backend escrito em PHP com Zend Framework 2 e um frontend escrito em JS com AngularJS. Após conseguir a conta do maior banco privado do Brasil – que realiza centenas de contratações por mês – e também de outros grandes clientes, passou a experimentar um crescimento de uso exponencial de sua plataforma, onde começou a enfrentar problemas para escalar a aplicação, que até então era monolítica e utilizava armazenamento de arquivos locais, possuindo uma série de dependências e configurações difíceis de serem replicadas o que dificultava a escalabilidade horizontal.
Sobre o projeto
Desafios na implementação
- Tornar a aplicação “stateless” e passar a armazenar qualquer tipo de dados externamente.
- Rodar a aplicação em containers.
- Desenvolvedores deveriam utilizar em suas máquinas um ambiente muito similar ao de produção.
- Aplicação não pode parar e precisa rodar 24×7.
- A infraestrutura precisava ser versionada e testada de forma que fosse possível reconstruí-la em questão de minutos
- Necessidade de atuar de forma preditiva com a aplicação e seus componentes.
- Picos de uso podiam acontecer a qualquer momento e havia a necessidade de uma infraestrutura elástica.
Solução implementada
Para o armazenamento de arquivos externos optou-se pelo serviço S3 da AWS.
Levantamento de todas as dependências da aplicação para criação do Dockerfile
Com o Dockerfile, criou-se o arquivo “docker-compose.yml”, que seria utilizado localmente pelos desenvolvedores e em produção pelo Swarm.
Com a aplicação pronta para rodar em containers , criou-se um ambiente de produção: um cluster de Swarm composto por 3 máquinas EC2 na AWS com autoscaling. Todo esse ambiente, inclusive as instâncias de EC2 e configurações de autoscaling foi desenvolvido através de uma playbook Ansible, versionada no GitLab e que foi inserida em uma pipeline no Jenkins com testes de infraestrutura feitos com o Inspec.
Benefícios e resultados
- Ambientes em alta performance e infraestrutura com escalabilidade horizontal automática.
- Monitoramento preditivo com Prometheus, Grafana, Traefik, Graylog.
- Resiliência do ambiente em caso de falhas, que pode ser escalado sem a necessidade de Downtime.
- Rastreabilidade, validação e automação de mudanças de produção de forma ágil.
- Com toda stack no dockerfile (RabbitMQ, PostgreSQL, Memcached, Solr) . um simples “docker-compose up” ou “docker stack deploy” colocava a aplicação no ar.