Como criar infraestrutura de sites para receber milhões de usuários?

35
Como criar infraestrutura de sites Como criar infraestrutura de sites para receber milhões de usuários? para receber milhões de usuários? Marcelo Dieder – [email protected] FLISOL 2014 / Novo Hamburgo

description

Como criar infraestrutura de sites para receber milhões de usuários?

Transcript of Como criar infraestrutura de sites para receber milhões de usuários?

Page 1: Como criar infraestrutura de sites para receber milhões de usuários?

Como criar infraestrutura de sites Como criar infraestrutura de sites para receber milhões de usuários?para receber milhões de usuários?

Marcelo Dieder – [email protected]

FLISOL 2014 / Novo Hamburgo

Page 2: Como criar infraestrutura de sites para receber milhões de usuários?

Internet na AtualidadeInternet na Atualidade

● População Mundial: 7.1 bilhões de pessoas (2013) *

● Número de dispositivos conectado na internet: 39% da população mundial (2013) *

● Crescimento de serviços: Serviços Cloud, Redes sociais, Internet das Coisas.

* Fonte: ITU

Page 3: Como criar infraestrutura de sites para receber milhões de usuários?

Internet na AtualidadeInternet na Atualidade

● Tudo na internet está sendo centralizado no protocolo HTTP!

* Fonte: ITU

Page 4: Como criar infraestrutura de sites para receber milhões de usuários?

Protocolo HTTPProtocolo HTTP● HTTP - Hypertext Transfer Protocol● Versão atual: HTTP/1.1 (RFC 2616)● Futuro prevê melhorias com o HTTP 2.0● Situada na camada de aplicação● Utiliza protocolo TCP como apoio● Utiliza session/cookies como complemento● Mensagem HTTP (Request x Response)

● Requisição● Cabeçalho da mensagem (header)● Corpo da mensagem

Page 5: Como criar infraestrutura de sites para receber milhões de usuários?

Protocolo HTTPProtocolo HTTP(Request x Response)(Request x Response)

Fonte: http://www3.ntu.edu.sg/

Page 6: Como criar infraestrutura de sites para receber milhões de usuários?

Protocolo HTTPProtocolo HTTP(Request x Response)(Request x Response)

Request

Response

Fonte: http://www3.ntu.edu.sg/

Page 7: Como criar infraestrutura de sites para receber milhões de usuários?

Server SideServer Side● Operações ocorridas no lado do servidor

● Exemplos:● Banco de dados● Manipulação de imagens● Busca de arquivos● Linguagens de programação (PHP, JAVA, PERL, RUBY, PYTHON, etc)

Page 8: Como criar infraestrutura de sites para receber milhões de usuários?

Client SideClient Side● Operações ocorridas no lado do cliente (navegador)

● Exemplos: ● Javascript● CSS● HTML● XML● Cookies

Page 9: Como criar infraestrutura de sites para receber milhões de usuários?

Renderização da PáginaRenderização da Página

● Processo de renderização monta o HTML/CSS no server-side (servidor) para ser interpretado pelo client-side (navegador).

● Como agilizar a montagem e entrega de uma página?● Reduzir o tamanho e o número de objetos da página● Evitar busca de conteúdos externos (web) no

server-side e também no client-side● Disponibilizar conteúdo estático sempre que possível● Utilizar cache no server-side, client-side, banco de

dados● Utilizar compressão no protocolo http (gzip)

Page 10: Como criar infraestrutura de sites para receber milhões de usuários?

E a infraestrutura?E a infraestrutura?

● Como criar um ambiente para receber requisições (server-side) de clientes, sem a existência de pontos únicos de falhas?

● É necessário garantir alta disponibilidade dos serviços de:

● Internet (BGP)● Resolução DNS (autoritativo)● Servidor HTTP● Servidor Banco de Dados

Page 11: Como criar infraestrutura de sites para receber milhões de usuários?

Processo de conexão HTTPProcesso de conexão HTTP

Fonte: http://blog.catchpoint.com/

Page 12: Como criar infraestrutura de sites para receber milhões de usuários?

E agora?E agora?

Então, quais os problemas existentes para podermos garantir a alta disponibilidade da infraestrutura e também garantir a entrega de sites rápidos para milhões de usuários?

Page 13: Como criar infraestrutura de sites para receber milhões de usuários?

Problema 1: Alta Disponibilidade do Problema 1: Alta Disponibilidade do registro A do DNSregistro A do DNS

● Todo domínio que possua um site, possui um registro A apontando para um IP. Ex: linux.com aponta 140.211.167.50.

● Mas como garantir a alta disponibilidade do IP?

● Existe a opção de utilizar registros SRV para definir pesos para servidores. Assim como ocorre no registro MX para serviços de e-mail. Infelizmente a RFC do HTTP não suporta SRV, talvez no HTTP 2.0?

● É possível balancear as requisições com a criação de vários registros A, mas isto resolve o problema?

Page 14: Como criar infraestrutura de sites para receber milhões de usuários?

Problema 2: Banco de dadosProblema 2: Banco de dados

● Consultas lentas● Falta de índices● Uso incorreto do vínculo de tabelas● Grande quantidade de registros● Tipo de tabela no MySQL/MariaDB: Myisam x InnoDB

● Myisam: Leitura muito rápida● Myisam: Problemas com locks● InnoDB: Indicado para leitura e escrita● InnoDB: select pode ser mais lento mas ideal para concorrência de inserts, updates e selects

Page 15: Como criar infraestrutura de sites para receber milhões de usuários?

Problema 3: Manipulação de Problema 3: Manipulação de imagensimagens

● A manipulação de imagens (crop, redimensionamento, tratamento) deve ser feito apenas 1 vez e não a cada acesso!

● Se possível separar servidor do tratamento de imagens do servidor de distribuição de conteúdo.

Page 16: Como criar infraestrutura de sites para receber milhões de usuários?

Problema 4: Tamanho de objetosProblema 4: Tamanho de objetos

● Atenção para o tamanho de objetos (imagens, scripts, include de códigos, etc)

● Imagine que o usuário possui plataformas de acesso e velocidade de internet diferentes do que a sua. (celulares, tablets, banda larga, 3G).

● Se o conteúdo é enviado através de um editor, certifique-se que são aplicados filtros para verificar o tamanho do upload de objetos. (ex: imagens)

Page 17: Como criar infraestrutura de sites para receber milhões de usuários?

Problema 5: Consulta a conteúdos Problema 5: Consulta a conteúdos externosexternos

● Objetos externos devem ser utilizados apenas em casos isolados. (ex.: tempo, facebook, twitter, banners, imagens, etc).

● JAMAIS colocar a busca de objetos no processo de renderização de uma página.

● O conteúdo pode ser buscado pelo servidor em processos de apoio (ex.: crontab) ou ainda diretamente no cliente-side (ex.: utilizando javascript).

Page 18: Como criar infraestrutura de sites para receber milhões de usuários?

Problema 6: HTTP x HTTPS - Problema 6: HTTP x HTTPS - Quando utilizar?Quando utilizar?

● HTTP é simples, texto puro, e não há criptografia

● HTTPS realiza criptografia e utiliza mais recursos do servidor e do cliente (cpu, memória, link de internet).

● Utilizar HTTPS em sites envolvendo troca de senhas ou operações de valor.

● Porque utilizar HTTPS em sites de publicação de conteúdo? (ex.: portais, blogs)

● Controlar o uso de HTTP x HTTPS por sessão/cookie.

Page 19: Como criar infraestrutura de sites para receber milhões de usuários?

Cache, cache, cache!Cache, cache, cache!

● Sempre que possível utilize cache● Cache de DNS (ttl dns)● Cache no http server-side● Cache no http client-side● Cache no banco de dados

Page 20: Como criar infraestrutura de sites para receber milhões de usuários?

Como criar infraestrutura de sites Como criar infraestrutura de sites para receber milhões de usuários?para receber milhões de usuários?

● Requisitos ● High Avaiability (HA)● Load Balance (LB)● Crescimento Horizontal● Arquitetura Aberta● Sem pontos de falhas

Page 21: Como criar infraestrutura de sites para receber milhões de usuários?

Camada de virtualizaçãoCamada de virtualização● Garante o HA e LB da máquina virtual● Não garante o HA e o LB da camada de aplicação

● Permite melhor aproveitamento dos recursos do hardware

● Qualquer virtualizador pode ser utilizado (KVM, Xen, Vmware, outros)

● No cenário foi utilizado Vmware como virtualizador.

Page 22: Como criar infraestrutura de sites para receber milhões de usuários?

Replicação do Banco de Dados Replicação do Banco de Dados MySQL (Master-Master)MySQL (Master-Master)

● Permite a replicação do banco de dados em outras instâncias.

● Garante o crescimento horizontal● Existem diversas soluções para replicação do MySQL.

● Sistema nativo do Mysql● Sistema nativo Mysql Cluster● Galera Cluster (Codership)

● Principais problemas das soluções nativas do Mysql:● Split brain● Perda de sincronismo● Complexidade

Page 23: Como criar infraestrutura de sites para receber milhões de usuários?

Galera Cluster (MySQL)Galera Cluster (MySQL)

● Multi-master replication● Replicação sincrona● Transparente para as aplicações● Não é necessário dividir os nós de escrita e leitura● Replicação em nível de arquivo● Utiliza sistema de votação - Quorum-based system (mínimo

3 nós para evitar split brain)● 2 nós → Split Brain!● Suporta SSL● Utiliza necessariamente engine Innodb● Suportado também com MariaDB

Page 24: Como criar infraestrutura de sites para receber milhões de usuários?

Galera Cluster (MySQL)Galera Cluster (MySQL)

Page 25: Como criar infraestrutura de sites para receber milhões de usuários?

HA e LB do banco de dados com HA e LB do banco de dados com proxyproxy

● Para LB e HA do banco de dados necessita de driver ou sistema de proxy.

● Proxy: Pen, HAProxy, Pound● Driver: mysqlnd (PHP), jdbc connector (JAVA)● Utilizando driver pode necessitar de mudanças de código e

não tem tanta eficiência.● Utilizando proxy tem melhor resultados● Utilizado o HAProxy

Page 26: Como criar infraestrutura de sites para receber milhões de usuários?

HAproxyHAproxy

● Open source HTTP/TCP load balancer● Pode fazer proxy de vários protocolos● Utilizado para realizar o balanceamento e alta

disponibilidade do uso do banco de dados.● Instalado em cada servidor de aplicação● Aplicação utilizava um banco “local” (localhost)

Page 27: Como criar infraestrutura de sites para receber milhões de usuários?

Sistema de arquivos distribuído Sistema de arquivos distribuído ● Todos os nós de aplicação precisam acessar o mesmo

volume de arquivos.● Para isto é necessário um sistema de arquivos

distribuido ou compartilhado.● Opções: GFS2 (RedHat), OFCS2 (Oracle)

● Também é necessário a replicação do bloco de dados ou o compartilhamento de um mesmo bloco. Ex: Ceph, Volume iSCSI, DRDB.

● No cenário foi utilizado OCFS2 (melhor documentação e estabilidade) e RAW Device Mapping no Vmware.

Page 28: Como criar infraestrutura de sites para receber milhões de usuários?

HTTP para a aplicaçãoHTTP para a aplicação

● Aplicação para receber requisições HTTP● Opções: Nginx, Apache, Lighttpd, Tomcat, outros.

● Utilizado o serviço Apache.

Page 29: Como criar infraestrutura de sites para receber milhões de usuários?

Replicação de sessãoReplicação de sessão

● Replicação de sessão para garantir sessão de usuários autenticados entre os nós de aplicação.

● Alteração da regra: session.save_path no php.ini apontando para uma pasta replicado entre o cluster de aplicação.

Page 30: Como criar infraestrutura de sites para receber milhões de usuários?

Cache da aplicação HTTPCache da aplicação HTTP● Melhora a experiência de navegação do usuário● Reduz significativamente a carga dos servidores de

aplicação.● Efetua LB e HA entre os servidores de aplicação.● Sistema de cache utilizado garante a entrega de páginas

estáticas.● O cache, tempo (ttl), pode ser configurado em nível de

objeto (fotos, html, imagens, css, etc.)● Alternativas disponíveis: Varnish, Apache Proxy, Squid.● Utilizado: Varnish● Varnish: Permite regras baseados em cookies, pastas,

domínios, objetos.

Page 31: Como criar infraestrutura de sites para receber milhões de usuários?

Alta disponibilidade do IP Alta disponibilidade do IP ● Utilizado dois servidores FreeBSD com o protocolo CARP.● Alternativa ao protocolo VRRP● Protocolo CARP é exclusivo da família *BSD● CARP pode garantir HA de um IP, resolvendo o problema

da publicação do DNS registro A.● Também suporta o LB, apesar de não ter sido utilizado no

cenário.● Consiste em disponibilizar um IP virtual que é

compartilhado entre n+1 hosts.

Page 32: Como criar infraestrutura de sites para receber milhões de usuários?

Alta disponibilidade do IP - CarpAlta disponibilidade do IP - Carp

Fonte:http://nomoa.com/

Page 33: Como criar infraestrutura de sites para receber milhões de usuários?

Alta disponibilidade do serviço de Alta disponibilidade do serviço de internetinternet

● É necessário ser uma operadora de Internet Autonomous System (AS) com mais de duas operadores.

● Possui um bloco de ips independente da operadora utilizada.

Page 34: Como criar infraestrutura de sites para receber milhões de usuários?

Topologia final do modeloTopologia final do modelo

Page 35: Como criar infraestrutura de sites para receber milhões de usuários?

Dúvidas?Dúvidas?

OBRIGADO!

Marcelo Dieder [email protected]