Escalando Apps PHP
-
Upload
luiz-messias -
Category
Software
-
view
100 -
download
0
description
Transcript of 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
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
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
não trabalho
diretamente com infra
não somos o facebook
mas ficar fora do ar pode custar caro $$
(e pega mal pra caramba)
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
o que tem de errado com LAMP?
stack sugerido: LHNMPRR
Linux, HAProxy, nginx, MySQL, PHP-FPM, Redis e Resque
WTF?!
calma, vamos por partes
HTTP
NginxPHPMySQL
usuário
HTTP
NginxPHPMySQL
usuário
usuário
usuário
usuário
HTTP
HTTP
HTTP
NginxPHPMySQL
usuário
usuário
usuário
usuário
HTTP
HTTP
usuário usuário
usuário
usuário
HTTP
HTTP
HTTP
ApachePHPMySQL
usuário
usuário
usuário
usuário
HTTP
HTTP
usuário usuário
usuário
usuário
HTTP
HTTP
O que podemos fazer nesse ponto?
VERTICAL SCALING!
...escalar verticalmente quer dizer
MAIS RECURSOSem um único servidor...
HTTP
NginxPHPMySQL
usuário
usuário
usuário
usuário
HTTP
HTTP
usuário usuário
usuário
usuário
HTTP
HTTP
HTTP
NginxPHPMySQL
usuário
usuário
usuário
usuário
HTTP
HTTP
usuário usuário
usuário
usuário
HTTP
HTTP
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
E se eu disser que você não precisa de máquinas muito tunadas?
HORIZONTAL SCALING!
… escalar horizontalmente quer dizer
MAIS SERVIDORESque formam um cluster...
HTTP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
HTTP
DB
NginxPHP
App 1
HTTP
NginxPHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
HTTP
NginxPHP
App 1
App 2
DB
Load Balancing
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
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;
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
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
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
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
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....
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....
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)
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)
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)
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)
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>
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);
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
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.
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
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
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>
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);
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!
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)
➔ https://serversforhackers.
com/editions/2014/07/15/haproxy/
➔ https://www.digitalocean.
com/community/tutorials/an-introduction-to-
haproxy-and-load-balancing-concepts
➔ https://leanpub.com/scalingphp
Referências