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 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 es
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 HTTP Request Headers, método, recurso solicitado, conteúdo GET POST HEAD 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> + Cliente GET index.html index.html smile.png = GET smile.png Hello World! smile.png
Tecnologias web (1) Cliente Rede HTML CSS JavaScript jquery AngularJS Bootstrap Internet HTTP Routing CDN Proxy VPN Rails SQL Caching Web server App server Deployment
Tecnologias web (2) Cliente Rede HTML CSS JavaScript Internet Rails NEXT CLASS! HTTP SQL Routing Caching jquery AngularJS Bootstrap CDN Proxy VPN Web server App server 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) Rails MySQL Redis HD Tudo pode ser instalado em único servidor.
Arquitetura escalável e redundante (2) Rails MySQL Redis HD Como você escala para 2x a capacidade atual?
Arquitetura escalável e redundante (3) 1 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) MySQL Redis HD Camadas de dados não são escaladas apenas "clonando" o servidor. E agora?
Arquitetura escalável e redundante (6) 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 Rails Redis MySQL HD
Arquitetura escalável e redundante (8)? Problema: o banco de dados está lento. O que fazer?
Arquitetura escalável e redundante (9) Rails Redis 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) Rails Redis 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) Rails Redis (+ memória) 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) Rails Redis (+ memória) Requisição Load balancer MySQL (master) MySQL (slave) Resposta 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) Requisição Redis (+ memória) Resposta Load balancer Rails MySQL (master) 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 Contrato Mensal Mensal Mensal Por hora ou minuto
Fonte: https://xkcd.com/908/