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/