Criando
Aplicações Web
na Nuvem

Vinícius Campitelli

Sobre

Sobre

Sobre mim

Vinícius Campitelli
Vinícius
Campitelli
  • Bacharel em Ciência da Computação pela UFSCar
  • Desenvolvedor há mais de 15 anos
  • Membro do PHPSP
  • Entusiasta em cibersegurança
  • Consultor de TI e instrutor de treinamentos

Sobre

Slides

Computação em Nuvem

Computação em Nuvem

Conceito segundo o NIST*

... é um modelo para possibilitar acesso ubíquo, conveniente e sob demanda via rede a um conjunto de recursos computacionais configuráveis (como servidores, aplicações e armazenamento) que podem ser rapidamente provisionados e disponibilizados com o mínimo de esforço de gerenciamento ou interação com o provedor
Proposta SP 800-145

* Instituto Nacional de Padrões e Tecnologia dos Estados Unidos

Computação em Nuvem

Conceito segundo o NIST

Self-service sob demanda

Cliente deve provisionar seus serviços sem interação humana com o provedor

Acesso generalizado à rede

Serviços devem ser disponibilizados e acessados via mecanismos padrões de rede

Agrupamento de recursos

Devem servir múltiplos clientes, sendo reatribuídos de forma dinâmica

Elasticidade rápida

Recursos devem ser escaláveis para suportar a demanda

Serviço mensurável

Deve ser possível medir e monitorar o uso de cada serviço

Proposta SP 800-145

Computação em Nuvem

Vantagens

  • Permite ao cliente focar no problema
  • Velocidade de implementação
  • Elasticidade de recursos
  • Processamento distribuído
  • Economia de custos (de modo geral)

Desvantagens

  • Maior complexidade de início
  • Vendor lock-in
  • Ameaças de segurança (se não bem configurada)
  • Gastos imprevisíveis (se não bem configurados)

Cloud Computing

Principais provedores

Aplicação

Aplicação

Arquitetura do exemplo

Aplicação

Amazon Web Services

Amazon Web Services

Visão geral

O principal provedor de cloud segundo o Gartner nos últimos 10 anos, com mais de 200 serviços disponíveis

aws.amazon.com

Amazon Web Services

Infraestrutura global

Regiões (Regions)

Local físico onde um grupo de datacenters está localizado

Exemplos: São Paulo (sa-east-1), Virgínia do Norte (us-east-1) e Califórnia (us-west-1)
aws.amazon.com

Amazon Web Services

Infraestrutura global

Zonas de disponibilidade (Availability zones)

Cada grupo de datacenters em uma região com alta conectividade entre si, úteis para prover alta disponibilidade dentro de uma região

Exemplos: sa-east-1a, sa-east-1b, sa-east-1c
aws.amazon.com

Amazon Web Services

Infraestrutura global

Zonas locais (Local zones)

Locais alternativos mais próximos a grandes cidades para diminuir a latência

Exemplos: Rio de Janeiro, Fortaleza, Buenos Aires, Santiago
aws.amazon.com

Amazon Web Services

Infraestrutura global

34 regiões

108 zonas de disponibilidade

245 países e territórios atendidos

Mapa de infraestrutura global da AWS aws.amazon.com

Serviços para nosso frontend

Hospedagem

Serviços para nosso frontend

Hospedagem

Como nosso frontend é composto apenas de arquivos estáticos (HTML, CSS, JavaScript, imagens etc...), podemos utilizar os serviços de armazenamento de arquivos da cloud, como é o caso do AWS S3 (Simple Storage Service)

aws.amazon.com/s3

Serviços para nosso frontend

Hospedagem

Para isso, criaremos um bucket, que é como um "disco" com configurações como localização geográfica, políticas de versionamento e backup, sendo o responsável por conter nossos arquivos

aws.amazon.com/s3

Serviços para nosso frontend » S3

Criando Bucket

S3

Serviços para nosso frontend

Distribuição do Conteúdo

Serviços para nosso frontend

Distribuição do Conteúdo

Um Serviço de Rede de Entrega de Conteúdo (do inglês Content Delivery Network, resultando na sigla CDN) é responsável pelo caching e distribuição de conteúdo a partir de uma das localizações de borda mais próximas de seus clientes

O que é rede de distribuição de conteúdo (CDN)?

Serviços para nosso frontend

Distribuição do Conteúdo

Na AWS, iremos criar uma distribuição no CloudFront e apontá-la para o bucket S3 que criamos com os arquivos estáticos do frontend

aws.amazon.com/cloudfront

Serviços para nosso frontend » CloudFront

Rede global de borda (edge network)

Rede global de borda do CloudFront aws.amazon.com/cloudfront

Serviços para nosso frontend » CloudFront

Configuração

Distribuição do CloudFront

Serviços para nosso frontend

DNS

Serviços para nosso frontend

DNS

O Domain Name System é um serviço que tem como principal funcionalidade a conversão de domínios legíveis por seres humanos (por exemplo google.com) em endereços IP (por exemplo 142.251.132.238)

Existem diversos serviços, como o CloudFlare (gratuito) ou AWS Route 53 (pago, mas com diversas integrações com outras ferramentas da AWS)

cloudflare.com/learning/dns

Serviços para nosso frontend » Route 53

Configuração

Configuração do Route 53

Arquitetura

Frontend

Arquitetura

Frontend

Frontend

Serviços para nosso backend

Computação

Serviços para nosso backend

Computação

Para executar o nosso backend, precisamos de uma plataforma de computação ("servidor"), como o AWS EC2 (Elastic Compute Cloud)

aws.amazon.com/ec2

Serviços para nosso backend » EC2

Configuração

EC2

Serviços para nosso backend

Banco de Dados

Serviços para nosso backend

Banco de Dados

Para persistir as informações em nosso backend, precisamos utilizar um banco de dados, e optaremos pelo RDS (Relational Database Services) para simplificar a configuração, operação e dimensionamento do banco

aws.amazon.com/rds

Serviços para nosso backend » RDS

Configuração

RDS

Serviços para nosso backend

Escalabilidade

Serviços para nosso backend

Escalabilidade

Escalabilidade é uma característica desejável em todo o sistema, rede ou processo, que indica a capacidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer.
Escalabilidade | Wikipédia

Serviços para nosso backend » Escalabilidade

Auto Scaling

Serviço que monitora sua aplicação e ajusta automaticamente a capacidade (ligando ou desligando servidores) para manter um desempenho estável e previsível com o menor custo possível

aws.amazon.com/autoscaling

Serviços para nosso backend » Escalabilidade

Configuração do Auto Scaling

Auto Scaling

Serviços para nosso backend » Escalabilidade

Balanceador de Carga

Ferramenta que distribui as requisições entre servidores diferentes

Cada vez que uma máquina é criada ou excluída pelo Auto Scaling, o Balanceador de Carga é avisado para que atualize seu cadastro interno de serviços disponíveis

Serviços para nosso backend » Escalabilidade

Arquitetura sem Balanceador de Carga

Arquitetura com Balanceador de Carga

Arquitetura com Load Balancer

Serviços para nosso backend » Elastic Load Balancing

Balanceador de Carga

Balanceador de Carga

Arquitetura

Backend

Arquitetura

Backend

Backend

Obrigado!