SlideShare una empresa de Scribd logo
1 de 36
JESTEM TOMEK
… i lubię dzielić się wiedzą :)
“premature optimization
is the root of all evil”
~Donald Knuth .
TWÓJ
FRAMEWORK
JEST SZYBKI
WIĘKSZOŚĆ PROBLEMÓW TO
BAZA DANYCH / OPERACJE IO
CO TAK
NAPRAWDĘ JEST
CELEM
SKALOWANIA
Tylko liczba potencjalnych req/s?
● Obsługa większej ilości użytkowników
● Relacja kosztów do skali
● Odporność na awarie sprzętowe
● Odporność na awarie sieciowe
● Odporność na ataki hakerskie
● Aktualizacje aplikacji bez downtime
● Zachowanie łatwego utrzymania
aplikacji
SKALOWANIE
INFRASTRUKTUR
Y
Wertykalnie, horyzontalnie,
dekompozycja
SKALOWANIE WERTYKALNE
SKALOWANIE WERTYKALNE
● Downtime
● SPOF
● Skalowanie z limitem
● Koszty wydajniejszych maszyn
.... a chmura?
● … też downtime :)
● Koszty
● Bez architektury też skalowanie z limitem
SKALOWANIE HORYZONTALNE
HAPROXY
SKALOWANIE HORYZONTALNE
PLUSY
MINUSY
● Likwidacja SPOF
● Aktualizacja bez downtime
● Relatywnie proste i szybkie do
wykonania
● Na początku nie wymaga zmiany kodu
● Stateful apps
● Sesje
● Pliki lokalne
● Utrzymanie aplikacji
DEKOMPOZYCJA
app0 db0
DEKOMPOZYCJA
HAPROXY
KONKLUZJA
BEZ ARCHITEKTURY
APLIKACJI NIE MA
DOBREGO SKALOWANIA
SKALOWANIE
APLIKACJI
NODE.JS
Zobaczmy jak to zrobić :)
SKALOWANIE W
NODE.JS
● Asynchroniczność Twoim
przyjacielem!
● Promise’y dobrze się skalują
● Architektura oparta na
zdarzeniach
● Jednowątkowość
● Low MEM/CPU footprint
● Redis Pub/Sub, RabbitMQ, ...
CLUSTER
.JS
// cluster.js
const cluster = require('cluster');
const os = require('os');
if (cluster.isMaster) {
const cpus = os.cpus().length;
console.log(`Forking for ${cpus} CPUs`);
for (let i = 0; i<cpus; i++) {
cluster.fork();
}
} else {
require('./server');
}
CLUSTER.JS NODE MODULE
Object.values(cluster.workers).forEach(worker => {
worker.send(`Hello, worker ${worker.id}`);
});
CLUSTER.JS NODE MODULE
process.on('message', msg => {
console.log(`Message from master: ${msg}`);
});
cluster.on('exit', (worker, code, signal) => {
if (code !== 0 && !worker.exitedAfterDisconnect) {
console.log(`Worker ${worker.id} crashed. ` +
'Starting a new worker...');
cluster.fork();
}
});
const http = require('http');
const pid = process.pid;
http.createServer((req, res) => {
for (let i=0; i<1e7; i++); // fake job done
res.end(`Request handled by process ${pid}`);
}).listen(8080, () => {
console.log(`Started process ${pid}`);
});
CLUSTER.JS
node server.js node cluster.js
55 req/s 216 req/s
Test na Intel Core i5: ab -c200 -t10 http://localhost:8080/
CLUSTER.JS
● Prosty… na początku :)
● Brak zarządzania workerami
● Słaba wydajność
● APP WORKER
● Natywne wsparcie
● Aktualizacje workerów
● Skalowanie w obrębie maszyny
PM2
PM2
pm2 start server.js -i max
pm2 reload all
pm2 monit/ls
PM2
https://keymetrics.io
const http = require('http');
const pid = process.pid;
http.createServer((req, res) => {
for (let i=0; i<1e7; i++); // fake job done
res.end(`Request handled by process ${pid}`);
}).listen(8080, () => {
console.log(`Started process ${pid}`);
});
PM2
node server.js pm2 start server.js -i MAX
54 req/s 244 req/s
Test na Intel Core i5: ab -c200 -t10 http://localhost:8080/
PM2
● Sprawdzony przez społeczność
● Zarządza workerami
● Wydajność
● Aktualizacje workerów
● Integracja z narzędziami do
monitoringu
● Skalowanie na wiele maszyn
JEŚLI NIE
WORKERY TO
MIKROUSŁUGI
COTE.J
S“An auto-discovery mesh network framework for building fault-
tolerant and scalable applications”
const cote = require('cote');
const timeService = new cote.Responder({name: 'Time Service'});
timeService.on('time', (request, callback) => {
callback(new Date());
});
COTE.JS
const cote = require('cote');
const client = new cote.Requester({name: 'Client'});
client.send({type: 'time'}, (time) => {
console.log(time);
});
time-service.js
client.js
COTE.JS
● Zeroconf + dużo magii
● Działa na wielu maszynach
● COTE + PM2 = 💜
● Monitoring
● Wymaga obsługi IP
broadcast/multicast
● Chaos przy developerce
● Docker-friendly
… I CO DALEJ? :)
JAK ZAPEWNIĆ SOBIE
SPOKOJNY SEN
… I CO DALEJ? :)
● Każdy element infrastruktury może
zawieść (i zawiedzie :) )
● Skalowanie powinno być liniowe
● Znaj swój limit!
CO Z
INFRASTRUKTURĄ?
PYTANIA? ;-)
Możecie mnie znaleźć tutaj:
http://banasiak.pro
FRONTEND
BACKEND
FRONTEND MESSAGE BUS
REACT REACT REACT JS OLD JS/HTML
WebSocket connection
BACKEND GATEWAY
SERVICE 1 SERVICE 2 SERVICE 3
MESSAGE BROKER
AUTHORIZATIO
N
ROLE&ACCESSE
S
USERS
SERVICE 4 SERVICE 5
Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyli o skalowaniu aplikacji w Node.js - RST CodeMeeting

Más contenido relacionado

Similar a Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyli o skalowaniu aplikacji w Node.js - RST CodeMeeting

NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comNGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comLeszek Mi?
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaLeszek Mi?
 
tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?Brainhub
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL versionMaciej Lasyk
 
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...PROIDEA
 
PLNOG 13: Robert Ślaski: NFV, Virtualise networks or die – the voice of the r...
PLNOG 13: Robert Ślaski: NFV, Virtualise networks or die – the voice of the r...PLNOG 13: Robert Ślaski: NFV, Virtualise networks or die – the voice of the r...
PLNOG 13: Robert Ślaski: NFV, Virtualise networks or die – the voice of the r...PROIDEA
 
Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Semihalf
 
Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1Piotr Pawlak
 
Programowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsProgramowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsWojciech Grześkowiak
 
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...PROIDEA
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PROIDEA
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreSages
 
Info meet pomiary wydajności
Info meet pomiary wydajnościInfo meet pomiary wydajności
Info meet pomiary wydajnościmagda3695
 
100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego. 100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego. Redge Technologies
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Bartlomiej Zass
 
Xen desktop na platformie nutanix
Xen desktop na platformie nutanixXen desktop na platformie nutanix
Xen desktop na platformie nutanixPawel Serwan
 

Similar a Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyli o skalowaniu aplikacji w Node.js - RST CodeMeeting (20)

NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comNGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
 
tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
 
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
CONFidence 2018: "Small money, a lot of bugs" - Large scale bughunting dla ty...
 
PLNOG 13: Robert Ślaski: NFV, Virtualise networks or die – the voice of the r...
PLNOG 13: Robert Ślaski: NFV, Virtualise networks or die – the voice of the r...PLNOG 13: Robert Ślaski: NFV, Virtualise networks or die – the voice of the r...
PLNOG 13: Robert Ślaski: NFV, Virtualise networks or die – the voice of the r...
 
Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.
 
Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1
 
Programowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel ExtensionsProgramowanie Równolegle - Parallel Extensions
Programowanie Równolegle - Parallel Extensions
 
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
 
Mikrousługi w allegro
Mikrousługi w allegroMikrousługi w allegro
Mikrousługi w allegro
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
 
Info meet pomiary wydajności
Info meet pomiary wydajnościInfo meet pomiary wydajności
Info meet pomiary wydajności
 
100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego. 100 M pakietów na sekundę dla każdego.
100 M pakietów na sekundę dla każdego.
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)
 
Xen desktop na platformie nutanix
Xen desktop na platformie nutanixXen desktop na platformie nutanix
Xen desktop na platformie nutanix
 
Prezentacja o X11
Prezentacja o X11Prezentacja o X11
Prezentacja o X11
 
Wirtualizacja
WirtualizacjaWirtualizacja
Wirtualizacja
 

Más de RST Software Masters

"Jak wykorzystać Value Proposition" - Iga Rogała
"Jak wykorzystać Value Proposition" - Iga Rogała"Jak wykorzystać Value Proposition" - Iga Rogała
"Jak wykorzystać Value Proposition" - Iga RogałaRST Software Masters
 
Samoorganizacja w RST. Fakty i mity - Krzysztof Habowski
Samoorganizacja w RST. Fakty i mity - Krzysztof HabowskiSamoorganizacja w RST. Fakty i mity - Krzysztof Habowski
Samoorganizacja w RST. Fakty i mity - Krzysztof HabowskiRST Software Masters
 
Michał Kopacz: Ports and adapters architecture for business processes
Michał Kopacz: Ports and adapters architecture for business processesMichał Kopacz: Ports and adapters architecture for business processes
Michał Kopacz: Ports and adapters architecture for business processesRST Software Masters
 
Sebastian Rosik: Architektura aplikacji przeglądarkowych w oparciu o lokalną ...
Sebastian Rosik: Architektura aplikacji przeglądarkowych w oparciu o lokalną ...Sebastian Rosik: Architektura aplikacji przeglądarkowych w oparciu o lokalną ...
Sebastian Rosik: Architektura aplikacji przeglądarkowych w oparciu o lokalną ...RST Software Masters
 
Krzysztof Kędzierski: 3 braki architektury - RST CodeMeeting
Krzysztof Kędzierski: 3 braki architektury - RST CodeMeetingKrzysztof Kędzierski: 3 braki architektury - RST CodeMeeting
Krzysztof Kędzierski: 3 braki architektury - RST CodeMeetingRST Software Masters
 
RST CodeMeeting: SI praktycznie - czyli od pomysłu do realizacji sieci neuron...
RST CodeMeeting: SI praktycznie - czyli od pomysłu do realizacji sieci neuron...RST CodeMeeting: SI praktycznie - czyli od pomysłu do realizacji sieci neuron...
RST CodeMeeting: SI praktycznie - czyli od pomysłu do realizacji sieci neuron...RST Software Masters
 
RST CodeMeeting: Machine Learning dla developera - Krzysztof Kędzierski
RST CodeMeeting: Machine Learning dla developera - Krzysztof KędzierskiRST CodeMeeting: Machine Learning dla developera - Krzysztof Kędzierski
RST CodeMeeting: Machine Learning dla developera - Krzysztof KędzierskiRST Software Masters
 
(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?RST Software Masters
 

Más de RST Software Masters (8)

"Jak wykorzystać Value Proposition" - Iga Rogała
"Jak wykorzystać Value Proposition" - Iga Rogała"Jak wykorzystać Value Proposition" - Iga Rogała
"Jak wykorzystać Value Proposition" - Iga Rogała
 
Samoorganizacja w RST. Fakty i mity - Krzysztof Habowski
Samoorganizacja w RST. Fakty i mity - Krzysztof HabowskiSamoorganizacja w RST. Fakty i mity - Krzysztof Habowski
Samoorganizacja w RST. Fakty i mity - Krzysztof Habowski
 
Michał Kopacz: Ports and adapters architecture for business processes
Michał Kopacz: Ports and adapters architecture for business processesMichał Kopacz: Ports and adapters architecture for business processes
Michał Kopacz: Ports and adapters architecture for business processes
 
Sebastian Rosik: Architektura aplikacji przeglądarkowych w oparciu o lokalną ...
Sebastian Rosik: Architektura aplikacji przeglądarkowych w oparciu o lokalną ...Sebastian Rosik: Architektura aplikacji przeglądarkowych w oparciu o lokalną ...
Sebastian Rosik: Architektura aplikacji przeglądarkowych w oparciu o lokalną ...
 
Krzysztof Kędzierski: 3 braki architektury - RST CodeMeeting
Krzysztof Kędzierski: 3 braki architektury - RST CodeMeetingKrzysztof Kędzierski: 3 braki architektury - RST CodeMeeting
Krzysztof Kędzierski: 3 braki architektury - RST CodeMeeting
 
RST CodeMeeting: SI praktycznie - czyli od pomysłu do realizacji sieci neuron...
RST CodeMeeting: SI praktycznie - czyli od pomysłu do realizacji sieci neuron...RST CodeMeeting: SI praktycznie - czyli od pomysłu do realizacji sieci neuron...
RST CodeMeeting: SI praktycznie - czyli od pomysłu do realizacji sieci neuron...
 
RST CodeMeeting: Machine Learning dla developera - Krzysztof Kędzierski
RST CodeMeeting: Machine Learning dla developera - Krzysztof KędzierskiRST CodeMeeting: Machine Learning dla developera - Krzysztof Kędzierski
RST CodeMeeting: Machine Learning dla developera - Krzysztof Kędzierski
 
(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?
 

Tomek Banasiak: Jak bez stresu obserwować rosnący ruch w Twojej usłudze? Czyli o skalowaniu aplikacji w Node.js - RST CodeMeeting

Notas del editor

  1. Powtarza ten cytat mnóstwo ludzi, bez kontekstu. Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. YouArentGonnaNeedIt(YAGNI)
  2. CMSy, frameworki,Własny pomysł na moduły, które przecież są niezależne, ale splątane ze sobą niczym supeł i nie ma mowy o wyciągnięciu ich poza folder z kodem Generalnie nie ma w tym podejściu nic złego - wszak to ważny element nauki Efekt Krugera-Dunninga
  3. COTE_ENV= Problem w AWS/chmurach, ale można rozwiązać za pomocą network layer w dockerze