8 - Arquitetura e infraestrutura Web.key

Transcrição

8 - Arquitetura e infraestrutura Web.key
Aula 8. 13/04/2015.
Práticas de
Desenvolvimento de Software
Aula 8 - Arquitetura e infraestrutura de aplicações Web.
Oferecimento
Modelo cliente-servidor (1)
Cliente
Rede
Servidor
!
#
"
scheme://domain:port/path?query_string#fragment_id
http://example.com/pages?page_id=1
Modelo cliente-servidor (2)
!
#
"
1. A URL é parseada
2. É feito o lookup do IP a partir da URL (DNS)
3. É aberto um pedido de conexão com o servidor
4. O servidor aceita a conexão
5. A solicitação de conteúdo é realizada
6. O conteúdo é preparado
7. O conteúdo é servido para o cliente
8. O conteúdo é apresentado
Modelo cliente-servidor (3)
Clientes
!
$
%
Rede
#
#
Servidores
"
"
"
"
"
Protocolo HTTP (1)
Hypertext
É um texto estruturado que possui ligações
(hyperlinks) com outros elementos.
Protocolo
Neste contexto, é uma forma especificada
de comunicação entre dispositivos
interconectados através de uma rede.
WWW
A World Wide Web é um sistema de
documentos (hipertextos) interligados entre si
e que podem ser acessados pela Internet.
Protocolo HTTP (2)
Protocolo HTTP
O HyperText Transfer Protocol é o protocolo para
formatação e troca de hipertexto entre servidores web e
clientes conectados através de uma rede. Este protocolo
é a base de comunicação de dados da World Wide Web.
Protocolo HTTP (3)
Cliente
Rede
Servidor
!
#
"
GET
POST
HEAD
HTTP Request
Headers, método, recurso
solicitado, conteúdo…
PUT
…
DELETE
HTTP Methods
HTTP Response
Headers, status (200, 404,
500, …), conteúdo, …
Protocolo HTTP (4)
index.html
<html>
<body>
Hello World!
<img src="smile.png">
</body>
</html>
+
'
smile.png
=
Hello World!
'
Cliente
Servidor
!
"
GET index.html
&
index.html
GET smile.png
(
smile.png
Tecnologias web (1)
Cliente
Rede
Servidor
!
#
"
HTML
Internet
Rails
CSS
HTTP
SQL
JavaScript
Routing
Caching
jQuery
CDN
Web server
AngularJS
Proxy
App server
…
…
Bootstrap
VPN
…
Deployment
Tecnologias web (2)
Cliente
Rede
Servidor
!
#
"
HTML
Internet
Rails
HTTP
SQL
Routing
Caching
jQuery
CDN
Web server
AngularJS
Proxy
App server
…
…
CSS
JavaScript
Bootstrap
NEXT CLASS! )
VPN
…
Deployment
Arquitetura de uma
aplicação Web
Arquitetura do Clickgram (1)
Você é o responsável pela
infraestrutura de um novo
aplicativo chamado Clickgram.
CHALLENGE CONSIDERED
O Clickgram permite que qualquer
pessoa compartilhe uma foto com
seus amigos em apenas um clique!
Chegou o momento de você colocar o
aplicativo no ar e seu chefe exigiu que não
ocorram problemas de escalabilidade ou
de disponibilidade.
Arquitetura do Clickgram (2)
CHALLENGE ACCEPTED
Arquitetura do Clickgram (3)
A primeira versão do Clickgram possui as seguintes
características:
•
Possui acesso apenas através da aplicação web
•
Fotos podem ser armazenadas nos formatos JPG, GIF ou
PNG
•
A aplicação web foi desenvolvida com Ruby on Rails
•
O banco de dados é o MySQL
•
O cache em memória é implementado com Redis
Arquitetura do Clickgram (4)
Requisição
Resposta
Rails
Redis
MySQL
HD (arquivos)
Arquitetura escalável e redundante (1)
Servidor
Rails
MySQL
Redis
HD
Tudo pode ser instalado
em único servidor.
Arquitetura escalável e redundante (2)
Servidor
Rails
MySQL
Redis
HD
Como você escala para 2x a
capacidade atual?
Arquitetura escalável e redundante (3)
Servidor 1
Servidor 2
Rails
MySQL
Rails
MySQL
Redis
HD
Redis
HD
Parece bom?
Hum…?
Arquitetura escalável e redundante (4)
NOOOOOOOO!!!!
Arquitetura escalável e redundante (5)
Servidor
MySQL
Redis
HD
Camadas de dados não são
escaladas apenas "clonando" o
servidor. E agora?
Arquitetura escalável e redundante (6)
Servidor
Rails
MySQL
Redis
HD
Um servidor mais potente parece funcionar… Porém, esta abordagem possui um
limite físico de componentes do servidor. Em algum momento, não haverá
componentes melhores do que os atuais.
Além disso, o Rails pode necessitar de mais CPU, enquanto o MySQL pode
necessitar de mais memória. O upgrade do servidor pode não atender a
necessidades específicas de cada software.
Arquitetura escalável e redundante (7)
*
Dica: isole cada componente da aplicação
Servidor
Servidor
Rails
Redis
Servidor
Servidor
MySQL
HD
Arquitetura escalável e redundante (8)
?
Problema: o banco de dados está lento.
O que fazer?
Arquitetura escalável e redundante (9)
Servidor
Servidor
Rails
Redis
Servidor
Servidor
Servidor
MySQL
(master)
MySQL
(slave)
HD
Arquitetura escalável e redundante (10)
?
Problema: a quantidade de escritas e leituras no
sistema de arquivos (armazenamento de fotos)
precisa aumentar. O que fazer?
Arquitetura escalável e redundante (11)
Servidor
Servidor
Rails
Redis
Servidor
Servidor
Servidor
Servidor
MySQL
(master)
MySQL
(slave)
HD
(shard 1)
HD
(shard 2)
Arquitetura escalável e redundante (12)
?
Problema: o sistema de cache precisa de mais
memória. O que fazer?
Arquitetura escalável e redundante (13)
Servidor
Servidor
Rails
Redis
(+ memória)
Servidor
Servidor
Servidor
Servidor
MySQL
(master)
MySQL
(slave)
HD
(shard 1)
HD
(shard 2)
Arquitetura escalável e redundante (14)
?
Problema: a aplicação Rails não está atendendo a
todas as requisições por conta de limitação de
processamento. O que fazer?
Arquitetura escalável e redundante (15)
Requisição
Resposta
Servidor
Servidor
Rails
Redis
(+ memória)
Servidor
Servidor
Servidor
Load balancer
MySQL
(master)
MySQL
(slave)
Servidor
Servidor
Servidor
Rails
HD
(shard 1)
HD
(shard 2)
Arquitetura escalável e redundante (16)
+
A aplicação tornou-se escalável
,
Os componentes Rails e MySQL estão com
redundância
)
As requisições continuam sendo atendidas mesmo
que algum componente redundante falhe
Arquitetura escalável e redundante (17)
Servidor
Redis
(+ memória)
Requisição
Resposta
Servidor
Servidor
Load balancer
MySQL
(master)
Servidor
Servidor
Servidor
Rails
HD
(shard 1)
HD
(shard 2)
Arquitetura escalável e redundante (18)
Redundância
É um termo que abrange muitos aspectos no contexto
de uma aplicação. Nossa sugestão, do ponto de vista
de arquitetura física e infraestrutura, é que todos os
componentes tenham redundância de servidores, com
localizações em múltiplos data centers, preferencialmente
com distância superior a 300 km.
Infraestrutura de uma
aplicação Web
Modelos de contratação de infraestrutura (1)
Modelos de contratação de infraestrutura (2)
SHARED
VPS
DEDICATED
CLOUD
Modelos de contratação de infraestrutura (3)
Shared hosting
•
É um dos modelos de hospedagem mais antigos e
ainda muito popular
•
Em geral os provedores oferecem construtores de
site, facilitando a criação de sites
•
O servidor é compartilhado com aplicações de
outros clientes (é comum um servidor hospedar
mais de 1 mil aplicações)
•
Baixo controle do ambiente que executa a aplicação
•
"Não é possível" escalar ou oferecer redundância
•
O preço é baixo (~ USD$ 10.00/mês)
Modelos de contratação de infraestrutura (4)
VPS
•
VPS é uma abreviação de Virtual Private Server
•
Desde o início da década de 2010, a maioria das
empresas de shared hosting e de servidor dedicado
estão oferecendo VPS
•
Um VPS é uma máquina virtual rodando em um
servidor dedicado, consumindo recursos
fracionados deste servidor
•
Alto controle do ambiente que executa a aplicação
•
Não é fácil, mas é possível escalar e oferecer
redundância
•
O preço inicial é baixo (~ USD$ 20.00/mês)
Modelos de contratação de infraestrutura (5)
Dedicated server
•
É um servidor físico totalmente dedicado a você
•
É um dos modelos de contratação de servidores
mais antigos, muito usado por empresas que
buscam alto desempenho e nível de controle
•
Alto controle do ambiente que executa a aplicação
•
Não existe virtualização de recursos, ou seja, todos
os recursos do servidor físico estão disponíveis
•
Não é fácil, mas é possível escalar e oferecer
redundância
•
O preço inicial é alto (~USD$ 100.00/mês)
Modelos de contratação de infraestrutura (6)
Cloud server
•
Não estamos falando de Platform As A Service
(Heroku, Google App Engine, Engine Yard, etc.)
•
Consiste em servidores e serviços virtualizados
•
É uma das inovações em computação que
revolucionaram a Internet, pois permite que
qualquer desenvolvedor (pequeno ou grande) tenha
acesso a um poder computacional capaz de
executar qualquer trabalho a um preço acessível
•
É fácil escalar e oferecer redundância
•
O preço inicial é baixo (~ USD$ 10.00/mês)
•
Em geral, apresenta o melhor custo vs. benefício e
você "paga pelo que usa"
Modelos de contratação de infraestrutura (7)
Escalabilidade com cloud server
3.400 servidores
De 50 a 3.400
servidores em 3 dias
Modificação de
uma integração
com o Facebook
~ 1 semana (8 dias)
Modelos de contratação de infraestrutura (8)
Shared
VPS
Dedicated
Cloud
Recursos
Compartilhados
Fracionados
(virtualização)
Dedicados
Fracionados
(virtualização)
Ambiente
Baixo controle
Alto controle
Alto controle
Alto controle
Escalar
recursos
"Impossível"
Difícil
Difícil
Fácil
Redundância
"Impossível"
Difícil
Difícil
Fácil
Preço
Baixo
Baixo
Alto
Baixo
Mensal
Por hora
ou minuto
Contrato
Mensal
Mensal
Fonte: https://xkcd.com/908/