Case:
Orquestração de containers com Docker Swarm em infraestrutura escalável na AWS
Setor: Recursos Humanos
Tecnologias:


Sobre o cliente
A Startup Rankdone é um spin off da 4Linux , foi criada em 2016 e é a maior plataforma brasileira para aplicação de testes em candidatos durante os processos seletivos. O produto é comercializado como SaaS e possui clientes como Sicoob, KPMG e DPascoal. Em 2017, foi uma das startups escolhidas pelo InovaBra (programa de inovação do Banco Bradesco) e com isso vem experimentando um crescimento exponencial.
- Sobre o projeto
- Desafios na implantação
- Solução implementada
- Benefícios e resultados
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.
- 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 24x7.
- 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.
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.
- 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.