Arquiteturas de várias regiões: Para aplicações críticas, onde um país inteiro terá acesso em um curto período de tempo e terá muita visão nacional e/ou internacional, é fundamental pensar em arquiteturas multi-regionais. Para atender à necessidade de direcionar o tráfego entre regiões, use os diferentes tipos de roteamento do AWS Route 53 (Simples, failover, geolocalização, geoproximidade, latência e muito mais) conforme necessário.
6. Autenticação e autorização: Quando falamos de autenticação e autorização para componentes que escalam massivamente, encontramos problemas complexos, por exemplo, como podemos autenticar centenas de milhares de usuários em um período de tempo muito curto? Para fazer isso, o Amazon Cognito fornece serviços de identidade, federação e sincronização para aplicativos móveis e da web. Ele também simplifica a tarefa de autenticar usuários e armazenar, gerenciar e sincronizar seus dados em vários dispositivos, plataformas e aplicativos. O Amazon Cognito fornece credenciais temporárias com privilégios limitados a usuários autenticados e não autenticados sem a necessidade de gerenciar nenhuma infraestrutura interna. O Amazon Cognito, além de gerar um conjunto de credenciais próprias, também funciona no modo de federação, usando provedores de identidade populares como Google, Facebook e Amazon para autenticar seus usuários finais. Com o Amazon Cognito, você pode usar recursos de segurança adicionais, como solicitar um duplo fator de autenticação ou um código único no momento em que os usuários fazem login. Você pode usar o seguinte blog como um guia de implementação (link)
7. Pense de forma diferente, faça arquiteturas serverless (sem servidores), processe no lado do cliente e resolva problemas difíceis de uma maneira fácil: Muitas vezes, pensa-se que, para exibir informações aos usuários, é necessário fazer uma consulta online no banco de dados. Isso torna as arquiteturas complexas porque é necessário pensar sobre como dimensionar bancos de dados (quantidade de IOPS, Shardening, réplicas de leitura, multimaster, entre outros), mas a realidade é que muitos desses processos podem ser processados em back uma vez a cada certo tempo e exibir o resultado para cidadãos, espectadores ou usuários finais. Vamos pensar em mostrar resultados eleitorais ou resultados de nota de estudantes em nível de país e tentar resolver isso de uma maneira diferente:
8. Toda vez que um usuário entra no portal para exibir os resultados das eleições, o portal fornece informações atualizadas segundo a segundo? A pergunta que os desenvolvedores precisam fazer é se o processo está pronto para processar segundo a segundo conforme a contagem de votos prossegue. Na verdade, o processo de consolidação é executado a cada determinado número de minutos e, em seguida, atualiza o banco de dados ou repositório com os dados consolidados. Com isso em mente, em vez de ter centenas de servidores fazendo centenas ou milhares de consultas em um banco de dados central, é possível executar um único processo que extrai as informações a cada 30 segundos e as deposita no formato JSON em um armazenamento de objetos como o Amazon S3, para que ele seja acessado e exibido aos usuários via javascript a partir do seu navegador.
Use Serverless para consolidar: Para resolver o ponto acima, você pode usar o AWS Lambda, que pode executar código para qualquer tipo de aplicativo ou serviço back-end sem ter que executar tarefas de gerenciamento. Basta carregar seu código e o AWS Lambda cuidará de tudo o que você precisa para executar e escalar seu código com alta disponibilidade. Nesse caso, você pode usar o AWS Lambda para executar automaticamente a cada “30 segundos” usando eventos do Amazon Cloudwatch para consolidar e gerar objetos JSON para posterior armazenamento no Amazon S3.
Armazene e exiba informações atualizadas como um site estático processando do lado do cliente: Lembre-se de que o Amazon S3 tem a capacidade de hospedar sites estáticos sem que nossos clientes se preocupem sobre como ele será dimensionado. Com o padrão do Amazon S3, quando um objeto é depositado, ele é replicado em 3 zonas de disponibilidade dentro da mesma região da AWS, portanto, teremos alta disponibilidade e durabilidade das informações. No caso de consulta de resultados nacionais e estaduais, sendo um processo crítico, você pode obter tolerância a falhas adicional ativando a opção de replicação entre regiões. Uma vez que o usuário acessa a página hospedada no Amazon S3, ela será interpretada pelo navegador e usando JavaScript, fará referência aos objetos JSON.
A imagem a seguir (Fig 2) mostra uma arquitetura de referência na qual uma página da web estática é hospedada usando o Amazon S3 e uma distribuição de conteúdo com o Amazon CloudFront. O back-end é executado usando o Amazon API Gateway, o AWS Lambda e/ou o Amazon ECS.
9. Simplifique a criação de aplicativos escaláveis da web e móveis: Para fazer isso, você pode usar o serviço AWS Amplify que facilita a criação, a configuração e a implantação de aplicativos escaláveis da web e móveis. Amplify provisiona e administra de maneira continua seu backend móvel e fornece uma estrutura simples para integrar facilmente seu backend com seus frontends iOS, Android, Web e React Native. O AWS Amplify também automatiza o processo de desbloqueio do aplicativo frontend e backend, permitindo que ele forneça recursos mais rápidos. Este serviço simplificará a forma como utiliza os serviços, tais como: Amazon Cognito, Amazon S3 e Amazon Cloudfront, sobre os quais já falamos neste blog. Com o uso desses serviços você pode criar sites escaláveis onde você não precisa de servidores e, portanto, se preocupar com a quantidade de recursos necessários para suportar centenas de milhares de solicitações por minuto, já que, como mencionamos, estamos usando serviços, não servidores. Use o link a seguir caso você não tenha implantado anteriormente no S3 um site estático (HTML, Javascripts, Imagens, JSON etc) usando o Amazon Route 53 e o Amazon Cloudfront.