O blog da AWS
Ânima Educação e AWS
A ÂNIMA EDUCAÇÃO
A Ânima Educação começou suas atividades em 2003, com a aquisição da Una, e hoje, menos de 20 anos depois, é uma das maiores organizações educacionais do país. Seus números impressionam: são cerca de 115 mil alunos, mais de 3800 colaboradores e quase 3 mil professores.
A presença da Ânima se expandiu para os estados de São Paulo, Minas Gerais, Goiás, Santa Catarina, Paraná, Bahia e Sergipe. Fazem parte do grupo atualmente as instituições Una, UniSociesc, São Judas, UniBH, AGES, HSM, HSMu, EBRADI, Le Cordon Bleu e SingularityU Brazil.
OS PROBLEMAS DE ESCALABILIDADE
Conforme o grupo foi crescendo, o TI foi incorporando novos sistemas, websites e tecnologias. Fazer a integração de todos estes ativos foi um desafio enorme.
Um ponto em comum entre as instituições que passaram a fazer parte da Ânima foi o uso da plataforma WordPress como portal de comunicação web. O maior problema de ter várias instâncias do WordPress em execução ao mesmo tempo, oriundos de diferentes fontes e preparados de maneiras distintas, é que torna-se muito difícil gerenciar as versões dos plugins, do PHP, dos webservers e até mesmo do próprio WordPress. E plugins desatualizados no WordPress são os vetores de ataque mais comuns da plataforma. Foram 17 falhas em 2018 e 11 em 2019, segundo o CVE (https://www.cvedetails.com/product/4096/Wordpress-Wordpress.html?vendor_id=2337), e a grande maioria pode ser resolvida com simples atualizações.
Para fornecer o poder computacional, eram utilizados servidores físicos. A escalabilidade dependia diretamente da disponibilidade de novos servidores e de pessoas para fazer o trabalho ─ bastante repetitivo ─ de provisionar máquinas e adicionar a capacidade aos sites rodando WordPress.
As instituições do grupo têm uma característica de sazonalidade presente na maioria dos grupos de educação: a quantidade de acesso supera em muitas vezes o que é esperado para um período normal em épocas de provas, entrega de trabalhos, vestibulares, etc. Nestes momentos, principalmente no período de captação (no início do ano letivo), havia um trabalho manual pesadíssimo, e mesmo assim aconteciam indisponibilidades nestes sites.
O ideal seria ter uma forma de disponibilizar novos sites de WordPress e gerenciar os sites atuais de um modo padronizado. Além disso, os sites precisariam escalar horizontalmente para aguentar a demanda variável, e ser eficientes na utilização de recursos, gerando custos de acordo com o uso.
MIGRANDO PARA A AWS
Migrar para a AWS trouxe muita facilidade para gerenciar os sites. Foram basicamente 3 grandes melhorias:
Bancos de Dados movidos para o RDS
O Amazon Relational Database Service (Amazon RDS) facilita a configuração, a operação e a escalabilidade de bancos de dados relacionais na nuvem. O serviço oferece capacidade econômica e redimensionável e automatiza tarefas demoradas de administração, como provisionamento de hardware, configuração de bancos de dados, aplicação de patches e backups. Dessa forma, você pode se concentrar na performance rápida, na alta disponibilidade, na segurança e na conformidade que os aplicativos precisam. Deixamos de nos preocupar com o gerenciamento do MySQL e temos mais tempo para pensar em melhorias.
Processamento em Instâncias EC2 com AutoScaling
O AWS Auto Scaling monitora os aplicativos e ajusta automaticamente a capacidade para manter um desempenho constante e previsível pelo menor custo possível. Com o AWS Auto Scaling, é fácil configurar a escalabilidade de aplicativos para vários recursos em diversos serviços em questão de minutos. Quando a demanda cai, o AWS Auto Scaling remove automaticamente toda a capacidade excessiva de recursos, evitando gastos desnecessários. O uso do AWS Auto Scaling é gratuito e permite otimizar os custos de ambientes na AWS. Com ele, agora deixamos que a aplicação escale quando for necessário, e volte ao tamanho mínimo quando não há tráfego.
Separação dos arquivos estáticos do site
Normalmente, um website precisa tratar dados dos usuários fazendo processamentos no servidor HTTP com ajuda de uma linguagem dinâmica, como PHP, Ruby ou Python. Mas existem muitos recursos que não precisam ser interpretados, como imagens, CSS e JavaScript. Eles são conhecidos como arquivos estáticos, e podem ser acessados através de um simples servidor ou serviço de HTTP. Gerenciar servidores HTTP é uma tarefa difícil e que envolve vários cuidados de segurança.
A AWS oferece uma solução baseada em CloudFront e S3 para servir os arquivos estáticos de forma econômica, segura e com baixa latência. O S3 é um serviço de armazenamento de objetos que pode ser configurado para servir conteúdo estático via HTTPS. O CloudFront torna os arquivos estáticos do seu site disponíveis a partir de data centers ao redor do mundo, denominados pontos de presença. Quando um visitante solicita um arquivo em seu site, o CloudFront redireciona automaticamente a solicitação para uma cópia do arquivo no ponto de presença mais próximo. Isso resulta em tempos de download mais rápidos se o visitante tiver solicitado o conteúdo em um data center localizado mais longe.
Visão geral da solução
Para cada um dos sites em WordPress, criamos um AutoScaling Group que possui seu próprio balanceador de carga. Assim, as aplicações podem escalar de forma independente, podem ter seu suporte delegados para times diferentes e conseguimos saber exatamente quanto gastamos com cada site. Estamos usando uma instância do RDS com várias bases de dados criadas, cada uma com seu próprio usuário, com privilégios limitados pelas policies do MySQL. Já estamos estudando a separação deste banco em vários bancos separados.
RESULTADOS
Depois de migrar para a AWS com esta arquitetura, conseguimos melhorar diversos aspectos: Provisionar ambientes facilmente: Atualizações ou novos sites podem ser provisionados em minutos, não mais em horas ou dias. Além disso, cópias podem ser geradas facilmente e utilizadas como ambiente de testes ou desenvolvimento.
Ambiente mais protegido: A infraestrutura global da AWS oferece proteção nativa aos endpoints que respondem para o CloudFront. Por padrão, o CloudFront utiliza HTTPS, protegendo os dados em trânsito, e possui mitigação automática contra os ataques mais comuns de DDoS gratuitamente. Há suporte para URLs assinadas e vários outros recursos de segurança.
Escalabilidade e Economia: Com AutoScaling e com os arquivos estáticos no S3 com CloudFront, o ambiente tornou-se menos volátil e passou a escalar de acordo com a demanda. A Ânima passou a pagar apenas o que é utilizado, sabendo via Cost Explorer exatamente quanto foi gasto em cada momento. Isso está permitindo uma gestão muito mais apurada dos custos de cada portal.
PRÓXIMOS PASSOS
A migração para a AWS não é um movimento do tipo tudo ou nada. Fazer estas mudanças já trouxe resultados, mas ainda há melhorias que estão no backlog para os próximos meses.
Aurora Serverless: Migrar para o Aurora Serverless vai estender as vantagens de escalabilidade para a camada de banco de dados, assim como já é feito na camada de aplicação. Com o Aurora Serverless, é possível criar um endpoint de banco de dados sem especificar o tamanho da classe da instância de banco de dados. Você define as capacidades mínima e máxima. O endpoint do banco de dados se conecta a uma frota de proxy que direciona a carga de trabalho para uma frota de recursos que são dimensionados automaticamente. Devido à frota de proxy, as conexões são contínuas. O Aurora Serverless escala os recursos automaticamente com base nas especificações das capacidades mínima e máxima. Aplicativos clientes do banco de dados não precisam ser alterados para usar a frota de proxy. O Aurora Serverless gerencia as conexões automaticamente.A maior vantagem é que é possível escalar até zero processamento, e pagar somente pelo armazenamento. Isso vai permitir que os sites da Ânima possam ser mais econômicos, deixando de pagar por instâncias de banco de dados quando não há demanda. A maior vantagem em aplicar esta mudança é conseguir isolar totalmente as aplicações web.
Docker e ECS: O Docker é uma ferramenta muito utilizada para empacotar uma aplicação e suas dependências em um único contêiner, capaz de executar em diversos ambientes da mesma forma. O Amazon Elastic Container Service (Amazon ECS) é um serviço de orquestração de contêineres totalmente gerenciado. Com ECS você pode optar por executar seus clusters usando o AWS Fargate, que é computação sem servidor para contêineres. O Fargate elimina a necessidade de provisionar e gerenciar servidores, permite que você especifique e pague pelos recursos por aplicativo, além de aumentar a segurança ao conceber aplicativos isolados. Como o ECS tem sido um pilar fundamental para os principais serviços da Amazon, ele pode se integrar de forma nativa com serviços de monitoramento, armazenamento, segurança, machine learning, entre outros, proporcionando uma experiência familiar para implantar e escalar seus contêineres. Migrando para Docker, conseguiremos melhorar o processo de deployment e diminuir a complexidade (trazendo o conceito de serverless com o Fargate).
CONSIDERAÇÕES FINAIS
Percebemos que não se trata de uma mudança. É uma jornada, e a cada novo serviço lançado, uma nova melhoria pode ser implementada. Estamos evoluindo no nosso ritmo, e já conseguimos colher alguns frutos: demorávamos meses para adicionar capacidade, hoje fazemos em minutos, com poucos cliques. Não temos mais o trabalho manual pesado para preparar o ambiente. Durante o ano todo conseguimos atender muito bem às demandas, sem indisponibilidade. A experiência dos nossos alunos tem sido muito boa, e esse é o maior indício que estamos no rumo certo.
REFERÊNCIAS
- https://d0.awsstatic.com/whitepapers/Security/AWS_Security_Whitepaper.pdf
- https://docs.thinkwithwp.com/AmazonCloudFront/latest/DeveloperGuide/infrastructure-security.html
- https://thinkwithwp.com/pt/ecs/
- https://docs.thinkwithwp.com/pt_br/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.how-it-works.html
Sobre os Autores
João Talles Dantas Batista é um arquiteto de software sênior na Ânima Educação, onde desenvolve aplicações escaláveis e resilientes, trabalha com métodos ágeis como SCRUM, e compartilha seus conhecimentos em tecnologia e educação, obtidos durante os últimos 10 anos. Trabalhou como professor, desenvolvedor, consultor e tradutor, entre outras atribuições.
Wesley Rodrigues é um arquiteto de soluções sênior na AWS com foco em clientes de organizações sem fins lucrativos (NPO). Seja ajudando a melhorar a performance de sites voltados a doadores, aprimorando práticas de dados por meio de bancos de dados gerenciados e análises, promovendo pesquisas por meio de machine learning ou melhorando o monitoramento remoto com a Internet das Coisas (IoT), seu foco é ajudar a tornar o mundo um lugar melhor para as pessoas viverem.