TCP 
TCP HTTP 
HTTP 
Escalando Apps PHP 
HTTP 
Nginx 
PHP 
usuário 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
Ngi...
quem sou eu? 
TCP 
TCP HTTP 
HTTP 
➔ Desenvolvedor web há +4 anos; 
➔ Formado em Análise de Sistemas pelo 
HTTP 
Nginx 
PH...
TCP 
TCP HTTP 
HTTP 
➔ Load Balancing 
com HAProxy; 
➔ Distribuição de 
HTTP 
Nginx 
PHP 
usuário 
usuário 
usuário 
usuár...
não 
trabalho 
diretamente 
com infra
não somos o 
facebook
mas ficar fora do ar 
pode custar caro $$ 
(e pega mal pra caramba)
não vamos abordar 
TCP 
TCP HTTP 
HTTP 
HTTP 
Nginx 
PHP 
usuário 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
Ngin...
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 
Nginx 
PHP 
MySQL 
usuário
HTTP 
Nginx 
PHP 
MySQL 
usuário 
usuário 
usuário 
usuário 
HTTP 
HTTP
HTTP 
Nginx 
PHP 
MySQL 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
HTTP 
HTTP 
usuário 
usuário usuário 
HTTP
HTTP 
Apache 
PHP 
MySQL 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
HTTP 
HTTP 
usuário 
usuário usuário 
HTTP
O que podemos fazer 
nesse ponto?
VERTICAL SCALING!
...escalar verticalmente quer dizer 
MAIS RECURSOS 
em um único servidor...
HTTP 
Nginx 
PHP 
MySQL 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
HTTP 
HTTP 
usuário 
usuário usuário 
HTTP
HTTP 
Nginx 
PHP 
MySQL 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
HTTP 
HTTP 
usuário 
usuário usuário 
HTTP
HTTP 
HTTP 
Nginx 
PHP 
MySQL 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
HTTP 
usuário 
usuário usuário 
HTTP 
us...
E se eu disser 
que você não 
precisa de 
máquinas 
muito tunadas?
HORIZONTAL SCALING!
… escalar horizontalmente quer dizer 
MAIS SERVIDORES 
que formam um cluster...
HTTP 
HTTP 
usuário 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
DB 
Nginx 
PHP 
App 1
HTTP 
HTTP 
Nginx 
PHP 
usuário 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
Nginx 
PHP 
App 1 
App 2 
DB
Load Balancing
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 ...
Cuidados quando 
usar LoadBalacing: 
HTTP 
❖ Utilização de sessão; 
❖ IP do usuário; 
❖ Upload de arquivos; 
HTTP 
Nginx 
...
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 
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 
Apache 
PHP 
usuário 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
Apache 
PHP 
App 1 
App 2 
DB 
HaProx...
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 ...
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 ...
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 ...
TCP 
TCP HTTP 
HTTP 
SPARE HaProxy 
(com keepalived) 
HTTP 
Nginx 
PHP 
usuário 
usuário 
usuário 
usuário 
usuário 
usuár...
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 ...
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 ...
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 ...
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 ...
var http = require('http'); 
function serve(ip, port) 
{ 
TCP 
TCP HTTP 
HTTP 
http.createServer(function (req, res) { 
re...
TCP 
TCP HTTP 
HTTP 
$ sudo add-apt-repository -y ppa:vbernat/haproxy-1.5 
$ sudo apt-get update 
$ sudo apt-get install -...
alguns conceitos do HaProxy 
frontend: onde configuramos o HaProxy 
para ouvir conexões; 
TCP 
TCP HTTP 
HTTP 
backend: pa...
TCP 
TCP HTTP 
HTTP 
frontend localnodes 
HTTP 
Nginx 
PHP 
usuário 
usuário 
usuário 
usuário 
usuário 
usuário 
HTTP 
Ng...
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 ...
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 ...
mais sobre o assunto: 
TCP 
TCP HTTP 
➔ Deploy HTTP 
em cluster; 
➔ Replicação de banco de dados; 
➔ Cache com Redis; 
➔ B...
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 ...
Referências 
TCP 
TCP HTTP 
HTTP 
➔ https://serversforhackers. 
com/editions/2014/07/15/haproxy/ 
➔ https://www.digitaloce...
Escalando Apps PHP
Escalando Apps PHP
Próximos SlideShares
Carregando em…5
×

Escalando Apps PHP

503 visualizações

Publicada em

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/

Publicada em: Software
  • Seja o primeiro a comentar

Escalando Apps PHP

  1. 1. 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. 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. 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
  4. 4. não trabalho diretamente com infra
  5. 5. não somos o facebook
  6. 6. mas ficar fora do ar pode custar caro $$ (e pega mal pra caramba)
  7. 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)
  8. 8. o que tem de errado com LAMP?
  9. 9. stack sugerido: LHNMPRR Linux, HAProxy, nginx, MySQL, PHP-FPM, Redis e Resque
  10. 10. WTF?!
  11. 11. calma, vamos por partes
  12. 12. HTTP Nginx PHP MySQL usuário
  13. 13. HTTP Nginx PHP MySQL usuário usuário usuário usuário HTTP HTTP
  14. 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. 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
  16. 16. O que podemos fazer nesse ponto?
  17. 17. VERTICAL SCALING!
  18. 18. ...escalar verticalmente quer dizer MAIS RECURSOS em um único servidor...
  19. 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. 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
  21. 21. 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
  22. 22. E se eu disser que você não precisa de máquinas muito tunadas?
  23. 23. HORIZONTAL SCALING!
  24. 24. … escalar horizontalmente quer dizer MAIS SERVIDORES que formam um cluster...
  25. 25. HTTP HTTP usuário usuário usuário usuário usuário usuário HTTP DB Nginx PHP App 1
  26. 26. HTTP HTTP Nginx PHP usuário usuário usuário usuário usuário usuário HTTP Nginx PHP App 1 App 2 DB
  27. 27. Load Balancing
  28. 28. 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
  29. 29. 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
  30. 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. 31. 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
  32. 32. 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
  33. 33. 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
  34. 34. 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 ....
  35. 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 $ 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 ....
  36. 36. 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
  37. 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 HaProxy (spare)
  38. 38. 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)
  39. 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. 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 <hands-on> HTTP HTTP HaProxy TCP TCP HaProxy (spare)
  41. 41. 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);
  42. 42. 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)
  43. 43. 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.
  44. 44. 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)
  45. 45. 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
  46. 46. 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)
  47. 47. 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)
  48. 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 Obrigado! HTTP HTTP HaProxy TCP TCP HaProxy (spare)
  49. 49. 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

×