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

Post on 27-Jun-2015

499 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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 – marcelodieder@gmail.com

FLISOL 2014 / Novo Hamburgo

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

Internet na AtualidadeInternet na Atualidade

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

* Fonte: ITU

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

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

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

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

Request

Response

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

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)

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

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

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)

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

Processo de conexão HTTPProcesso de conexão HTTP

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

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?

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?

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

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.

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)

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).

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.

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

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

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.

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

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

Galera Cluster (MySQL)Galera Cluster (MySQL)

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

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)

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.

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.

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.

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.

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.

Alta disponibilidade do IP - CarpAlta disponibilidade do IP - Carp

Fonte:http://nomoa.com/

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.

Topologia final do modeloTopologia final do modelo

Dúvidas?Dúvidas?

OBRIGADO!

Marcelo Dieder marcelodieder@gmail.com

top related