Escalando Apps PHP1. TCP
TCP HTTP
HTTP
Escalando Apps PHP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
Maceió Dev Meetup #1
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
2. quem sou eu?
TCP
TCP HTTP
HTTP
➔ Desenvolvedor web há +4 anos;
➔ Formado em Análise de Sistemas pelo
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
CESMAC;
➔ Engenheiro de Software no
3. TCP
TCP HTTP
HTTP
➔ Load Balancing
com HAProxy;
➔ Distribuição de
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
DNS;
(Disponível no leanpub.com)
TL;DW
7. não vamos abordar
TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
LAMP
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
14. HTTP
Nginx
PHP
MySQL
usuário
usuário
usuário
usuário
usuário
HTTP
HTTP
HTTP
usuário
usuário usuário
HTTP
15. HTTP
Apache
PHP
MySQL
usuário
usuário
usuário
usuário
usuário
HTTP
HTTP
HTTP
usuário
usuário usuário
HTTP
19. HTTP
Nginx
PHP
MySQL
usuário
usuário
usuário
usuário
usuário
HTTP
HTTP
HTTP
usuário
usuário usuário
HTTP
20. HTTP
Nginx
PHP
MySQL
usuário
usuário
usuário
usuário
usuário
HTTP
HTTP
HTTP
usuário
usuário usuário
HTTP
22. HTTP
HTTP
Nginx
PHP
MySQL
usuário
usuário
usuário
usuário
usuário
HTTP
HTTP
usuário
usuário usuário
HTTP
usuário
usuário
usuário
usuário
HTTP
usuário
HTTP
HTTP
usuário
23. E se eu disser
que você não
precisa de
máquinas
muito tunadas?
26. HTTP
HTTP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
DB
Nginx
PHP
App 1
27. HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
30. HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
TCP
TCP
31. Cuidados quando
usar LoadBalacing:
HTTP
❖ Utilização de sessão;
❖ IP do usuário;
❖ Upload de arquivos;
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
TCP
TCP
32. HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
TCP
TCP
33. HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
TCP
TCP
HTTP
HTTP
HTTP
HTTP
34. HTTP
HTTP
Apache
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Apache
PHP
App 1
App 2
DB
HaProxy
TCP
TCP
HTTP
HTTP
HTTP
HTTP
35. TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
36. TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
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.40
example.com. 16 IN A 199.16.158.104
....
37. TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
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.104
example.com. 19 IN A 199.16.158.40
....
38. TCP
TCP HTTP
HTTP
SPARE HaProxy
(com keepalived)
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
39. TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
40. TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
41. TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
42. TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
<hands-on>
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
43. var http = require('http');
function serve(ip, port)
{
TCP
TCP HTTP
HTTP
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+'/');
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
}
// 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);
44. TCP
TCP HTTP
HTTP
$ sudo add-apt-repository -y ppa:vbernat/haproxy-1.5
$ sudo apt-get update
$ sudo apt-get install -y haproxy
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
45. alguns conceitos do HaProxy
frontend: onde configuramos o HaProxy
para ouvir conexões;
TCP
TCP HTTP
HTTP
backend: para onde o HaProxy vai
enviar as conexões recebidas pelo
frontend;
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
stats: opcional, uma interface web para
monitorar o load balancer.
46. TCP
TCP HTTP
HTTP
frontend localnodes
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
bind *:80
mode http
default_backend nodes
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
47. TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
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.1rnHost: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
48. TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
</hands-on>
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
49. mais sobre o assunto:
TCP
TCP HTTP
➔ Deploy HTTP
em cluster;
➔ Replicação de banco de dados;
➔ Cache com Redis;
➔ Background jobs (queues);
➔ Centralização de LOGS (ELK);
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
50. TCP
TCP HTTP
HTTP
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
Obrigado!
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
51. Referências
TCP
TCP HTTP
HTTP
➔ https://serversforhackers.
com/editions/2014/07/15/haproxy/
➔ https://www.digitalocean.
com/community/tutorials/an-introduction-to-haproxy-
HTTP
Nginx
PHP
usuário
usuário
usuário
usuário
usuário
usuário
HTTP
Nginx
PHP
App 1
App 2
DB
HaProxy
HTTP
and-load-balancing-concepts
HTTP
HTTP
HaProxy
TCP
TCP
HaProxy (spare)
➔ https://leanpub.com/scalingphp