escalando apps php

51
HTTP Nginx PHP usuário usuário usuário usuário usuário usuário HTTP HTTP Nginx PHP App 1 App 2 DB HaProxy TCP TCP HTTP HTTP HTTP HTTP HaProxy TCP TCP HaProxy (spare) Escalando Apps PHP Maceió Dev Meetup #1

Upload: luiz-messias

Post on 09-Jul-2015

102 views

Category:

Software


0 download

DESCRIPTION

Palestra no primeiro Maceió DEV Meetup sobre escalabilidade. Embora o tema da palestra tenha sido Escalando Apps PHP, os conceitos apresentados (LoadBalancing e DNS) se aplicam a qualquer linguagem/stack. Link do evento: http://www.meetup.com/maceio-dev-meetup/events/218622546/

TRANSCRIPT

Page 1: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

Escalando Apps PHPMaceió Dev Meetup #1

Page 2: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

quem sou eu?

➔ Desenvolvedor web há +4 anos;

➔ Formado em Análise de Sistemas pelo

CESMAC;

➔ Engenheiro de Software no

Page 3: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

➔ Load Balancing

com HAProxy;

➔ Distribuição de

DNS;

(Disponível no leanpub.com)

TL;DW

Page 4: Escalando Apps PHP

não trabalho

diretamente com infra

Page 5: Escalando Apps PHP

não somos o facebook

Page 6: Escalando Apps PHP

mas ficar fora do ar pode custar caro $$

(e pega mal pra caramba)

Page 7: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

não vamos abordar LAMP

Page 8: Escalando Apps PHP

o que tem de errado com LAMP?

Page 9: Escalando Apps PHP

stack sugerido: LHNMPRR

Linux, HAProxy, nginx, MySQL, PHP-FPM, Redis e Resque

Page 10: Escalando Apps PHP

WTF?!

Page 11: Escalando Apps PHP

calma, vamos por partes

Page 12: Escalando Apps PHP

HTTP

NginxPHPMySQL

usuário

Page 13: Escalando Apps PHP

HTTP

NginxPHPMySQL

usuário

usuário

usuário

usuário

HTTP

HTTP

Page 14: Escalando Apps PHP

HTTP

NginxPHPMySQL

usuário

usuário

usuário

usuário

HTTP

HTTP

usuário usuário

usuário

usuário

HTTP

HTTP

Page 15: Escalando Apps PHP

HTTP

ApachePHPMySQL

usuário

usuário

usuário

usuário

HTTP

HTTP

usuário usuário

usuário

usuário

HTTP

HTTP

Page 16: Escalando Apps PHP

O que podemos fazer nesse ponto?

Page 17: Escalando Apps PHP

VERTICAL SCALING!

Page 18: Escalando Apps PHP

...escalar verticalmente quer dizer

MAIS RECURSOSem um único servidor...

Page 19: Escalando Apps PHP

HTTP

NginxPHPMySQL

usuário

usuário

usuário

usuário

HTTP

HTTP

usuário usuário

usuário

usuário

HTTP

HTTP

Page 20: Escalando Apps PHP

HTTP

NginxPHPMySQL

usuário

usuário

usuário

usuário

HTTP

HTTP

usuário usuário

usuário

usuário

HTTP

HTTP

Page 21: Escalando Apps PHP
Page 22: Escalando Apps PHP

HTTP

NginxPHPMySQL

usuário

usuário

usuário

usuário

HTTP

HTTP

usuário usuário

usuário

usuário

HTTP

HTTP

usuário

usuário

usuário

usuário

usuárioHT

TP HTTP

HTTP

usuário

Page 23: Escalando Apps PHP

E se eu disser que você não precisa de máquinas muito tunadas?

Page 24: Escalando Apps PHP

HORIZONTAL SCALING!

Page 25: Escalando Apps PHP

… escalar horizontalmente quer dizer

MAIS SERVIDORESque formam um cluster...

Page 26: Escalando Apps PHP

HTTP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

DB

NginxPHP

App 1

Page 27: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

Page 28: Escalando Apps PHP

Load Balancing

Page 29: Escalando Apps PHP
Page 30: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCP

Page 31: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCP

Cuidados quando usar LoadBalacing:

❖ Utilização de sessão;

❖ IP do usuário;

❖ Upload de arquivos;

Page 32: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCP

Page 33: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCP

HTTP

HTTP

HTTP

HTTP

Page 34: Escalando Apps PHP

HTTP

ApachePHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

ApachePHP

App 1

App 2

DB

HaProxy

TCP

TCP

HTTP

HTTP

HTTP

HTTP

Page 35: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP HaProxy

TCP

TCP

Page 36: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP HaProxy

TCP

TCP

$ dig A example.com

; <<>> DiG 9.9.5-3-Ubuntu <<>> A example.com;; global options: +cmd

;; QUESTION SECTION:;example.com. IN A

;; ANSWER SECTION:example.com. 16 IN A 199.16.158.40example.com. 16 IN A 199.16.158.104....

Page 37: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP HaProxy

TCP

TCP

$ dig A example.com

; <<>> DiG 9.9.5-3-Ubuntu <<>> A example.com;; global options: +cmd

;; QUESTION SECTION:;example.com. IN A

;; ANSWER SECTION:example.com. 19 IN A 199.16.158.104example.com. 19 IN A 199.16.158.40....

Page 38: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP HaProxy

TCP

TCP

SPARE HaProxy(com keepalived)

Page 39: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

Page 40: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

Page 41: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

Page 42: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

<hands-on>

Page 43: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

var http = require('http');

function serve(ip, port)

{

http.createServer(function (req, res) {

res.writeHead(200, {'Content-Type': 'text/plain'});

res.write(JSON.stringify(req.headers));

res.end("\nThere's no place like "+ip+":"+port+"\n");

}).listen(port, ip);

console.log('Server running at http://'+ip+':'+port+'/');

}

// simulando um cluster de servidores

// em um mesmo server

serve('0.0.0.0', 9000);

serve('0.0.0.0', 9001);

serve('0.0.0.0', 9002);

Page 44: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

$ sudo add-apt-repository -y ppa:vbernat/haproxy-1.5

$ sudo apt-get update

$ sudo apt-get install -y haproxy

Page 45: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

alguns conceitos do HaProxy

frontend: onde configuramos o HaProxy para ouvir conexões;

backend: para onde o HaProxy vai enviar as conexões recebidas pelo frontend;

stats: opcional, uma interface web para monitorar o load balancer.

Page 46: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

frontend localnodes

bind *:80

mode http

default_backend nodes

Page 47: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

backend nodes

mode http

balance roundrobin

option forwardfor

http-request set-header X-Forwarded-Port %[dst_port]

http-request add-header X-Forwarded-Proto https if { ssl_fc }

option httpchk HEAD / HTTP/1.1\r\nHost:localhost

server web01 127.0.0.1:9000 check

server web02 127.0.0.1:9001 check

server web03 127.0.0.1:9002 check

Page 48: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

</hands-on>

Page 49: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

mais sobre o assunto:➔ Deploy em cluster;

➔ Replicação de banco de dados;

➔ Cache com Redis;

➔ Background jobs (queues);

➔ Centralização de LOGS (ELK);

Page 50: Escalando Apps PHP

HTTP

NginxPHP

usuário

usuário

usuário

usuário

usuário

usuário

HTTP

HTTP

NginxPHP

App 1

App 2

DB

HaProxy

TCP

TCPHTTP

HTTP

HTTP

HTTP

HaProxy

TCP

TCP

HaProxy (spare)

Obrigado!