SlideShare a Scribd company logo
1 of 51
Download to read offline
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)
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
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
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 
Nginx 
PHP 
App 1 
App 2 
DB 
LAMP 
HaProxy 
HTTP 
HTTP 
HTTP 
HaProxy 
TCP 
TCP 
HaProxy (spare)
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 
usuário 
usuário 
usuário 
usuário 
HTTP 
usuário 
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 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 
TCP 
TCP
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
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 
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
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
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
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 
....
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 
....
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
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)
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)
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)
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)
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);
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)
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.
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)
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
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)
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)
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)
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

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Escalando Apps PHP

  • 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. 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
  • 5. não somos o facebook
  • 6. mas ficar fora do ar pode custar caro $$ (e pega mal pra caramba)
  • 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. o que tem de errado com LAMP?
  • 9. stack sugerido: LHNMPRR Linux, HAProxy, nginx, MySQL, PHP-FPM, Redis e Resque
  • 10. WTF?!
  • 12. HTTP Nginx PHP MySQL usuário
  • 13. HTTP Nginx PHP MySQL usuário usuário usuário usuário HTTP HTTP
  • 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
  • 16. O que podemos fazer nesse ponto?
  • 18. ...escalar verticalmente quer dizer MAIS RECURSOS em um único servidor...
  • 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
  • 21.
  • 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?
  • 25. … escalar horizontalmente quer dizer MAIS SERVIDORES que formam um cluster...
  • 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
  • 29.
  • 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