Slide 1

Slide 1 text

Placar UOL

Slide 2

Slide 2 text

• JavaScript desde 1999 • Node.js desde v0.2.4 (2010) • 15 anos no UOL Home Page, Rádio UOL Publicador (CMS), Bate-papo Busca, Placar UOL

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

TSE “tempo-real” publica assina edita assiste envia

Slide 8

Slide 8 text

Alta audiência em intervalo de tempo extrema- mente curto

Slide 9

Slide 9 text

HTTP REQ/RES

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

CONN/THREAD 1m UPDATE NFS + mod_cache META REFRESH

Slide 12

Slide 12 text

30.000 18 30/06/2006

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

DEVOPS++ 4s UPDATE RESTARTS JSONP SCRIPT

Slide 15

Slide 15 text

72.000 18 Rio 2011

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

1s UPDATE PROXY JSON/XHR SOCKETS * 2 MOD--

Slide 18

Slide 18 text

500.000 18 Rio 2013

Slide 19

Slide 19 text

BIDIRECIONAL TCP HANDSHAKE

Slide 20

Slide 20 text

$ npm install ws https://github.com/websockets/ws The fastest RFC-6455 WebSocket implementation for Node.js BINARY HIXIE

Slide 21

Slide 21 text

User DNS Router Master Data centers Servers Processes Worker Internet Browser Arquitetura

Slide 22

Slide 22 text

Workers

Slide 23

Slide 23 text

theory meets messy reality most connections ended up in just two or three processes. https://strongloop.com/strongblog/whats-new-in-node-js-v0-12-cluster-round-robin-load-balancing/

Slide 24

Slide 24 text

iptables iptables -A PREROUTING -i eth1+ -p tcp -m tcp --dport 80 -m statistic --mode nth --every 23 -j REDIRECT --to-ports 8103 iptables -A PREROUTING -i eth1+ -p tcp -m tcp --dport 80 -m statistic --mode nth --every 22 -j REDIRECT --to-ports 8102 iptables -A PREROUTING -i eth1+ -p tcp -m tcp --dport 80 -m statistic --mode nth --every 21 -j REDIRECT --to-ports 8101 iptables -A PREROUTING -i eth1+ -p tcp -m tcp --dport 80 -m statistic --mode nth --every 20 -j REDIRECT --to-ports 8100 iptables -A PREROUTING -i eth1+ -p tcp -m tcp --dport 80 -m statistic --mode nth --every 19 -j REDIRECT --to-ports 8099 iptables -A PREROUTING -i eth1+ -p tcp -m tcp --dport 80 -m statistic --mode nth --every 18 -j REDIRECT --to-ports 8098 iptables -A PREROUTING -i eth1+ -p tcp -m tcp --dport 80 -m statistic --mode nth --every 17 -j REDIRECT --to-ports 8097 iptables -A PREROUTING -i eth1+ -p tcp -m tcp --dport 80 -m statistic --mode nth --every 16 -j REDIRECT --to-ports 8096 iptables -A PREROUTING -i eth1+ -p tcp -m tcp --dport 80 -m statistic --mode nth --every 15 -j REDIRECT --to-ports 8095 child_process

Slide 25

Slide 25 text

32 cores (2 GHz) 64 GB RAM 31 workers REDE 1 Gb USO PREVISÍVEL CRESCIMENTO HORIZONTAL 1.040.000 users 33.500 users / worker TOO BIG TO FAIL 16.700 users / GB 4 cores (2.2 GHz) 8 GB RAM 3 workers 100.000 users 33.300 users / worker 16.600 users / GB

Slide 26

Slide 26 text

(Des)balanceamento via DNS close code 4001 WebSocket close codes 4000-4999 “Available for use by applications” RAM NOK BROWSER DNS DATA CENTER SERVER WebSocket HTTP upgrade

Slide 27

Slide 27 text

POLLING! HUEHUEHUE 46 LINHAS 2s

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

1.200.000 26 24 milhões de page views

Slide 30

Slide 30 text

300.000 26 3,5 milhões de page views 1 x 7 never forget

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

1.100.000 26 Primeiro turno

Slide 33

Slide 33 text

1.500.000 26 Segundo turno

Slide 34

Slide 34 text

ms UPDATE POLLING IE window.WebSocket DEVOPS-- PING RESTART = 0

Slide 35

Slide 35 text

Obrigado! [email protected]