Escalando Apps PHP

471 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
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
471
No SlideShare
0
A partir de incorporações
0
Número de incorporações
13
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

×