ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
A world of Rest APIs¡­
from Restify to a faster Fastify
ALESSANDRO POLIDORI
Senior Software Engineer
ale_polidori
Node.js Global Summit 2020
2009
2020
Debug in PRODUCTION ?
Photo by Matteo °ä²¹±è±è¨¨
Debug in PRODUCTION ?
Presentation @ Node.js Global Summit 2020 - Online
NethCTI Backend REST API
M I G R A T I O N
Internet (PSTN)
server
REST / WS
REST / WS
REST / WS
REST / WS
PBX
1
2
3
Internet (PSTN)
server
REST / WS
REST / WS
REST / WS
REST / WS
PBX
1
2
Event: BridgeEnter
Privilege: call,all
BridgeUniqueid: c2c967b6-9044
BridgeType: basic
BridgeTechnology: simple_bridge
BridgeCreator: <unknown>
BridgeName: <unknown>
BridgeNumChannels: 1
BridgeVideoSourceMode: none
Channel: PJSIP/Nethesis-00000123
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: 3401234567
CallerIDName: 3401234567
ConnectedLineNum: 072112345
ConnectedLineName: <unknown>
Language: it
AccountCode: 223
Context: from-pstn
Exten:
Priority: 1
Uniqueid: 1590499030.97474
Linkedid: 1590499029.97472
{
"connected": true,
"counterpartName": "3401234567",
"counterpartNum": "3401234567",
"direction": "out",
"duration": 19,
"id": "PJSIP/91223-00000",
"inConference": false,
"linkedId": "1590499772.97717",
"owner": "91223",
"recording": "false",
"startTime": 1590499772000,
"throughQueue": false
}
3
Internet (PSTN)
REST / WS
REST / WS
REST / WS
REST / WS
PBX
1 3
Asterisk-Proxy
Database
Con?g
Phonebook
CustomerCard
Exec-Script
User
Call History
REST Phonebook
REST CustCard
REST History
RESTAstProxy
WebSocket
Internet (PSTN)
REST / WS
REST / WS
REST / WS
REST / WS
PBX
1 3
Internet (PSTN)
REST / WS
REST / WS
REST / WS
REST / WS
PBX
1 3
Unresponsive Client
100% CPU
Debug in PRODUCTION ?
How To Reproduce
Internet (PSTN)
S
I
P
e s s i o n
n i t i a t i o n
r o t o c o l
Presentation @ Node.js Global Summit 2020 - Online
#sipp -sf register_invite_client.xml
-inf register_invite_client.csv
192.168.5.80 -m 100 -d 10000 -r 10
FlameGraph
FlameGraph
1. capture the stacks

2. fold the stack

3. create svg image
Presentation @ Node.js Global Summit 2020 - Online
Presentation @ Node.js Global Summit 2020 - Online
0x
1. installation: npm install -g 0x 

2. exec: 0x my-server.js

3. image creation: SIGINT
npm i autocannon -g
HTTP Pipelining
https://en.wikipedia.org/wiki/HTTP_pipelining
Presentation @ Node.js Global Summit 2020 - Online
Presentation @ Node.js Global Summit 2020 - Online
REST Phonebook
REST CustCard
REST History
RESTAstProxy
WebSocket
Node http-proxy{ REST-API }
M I G R A T I O N
var?restify?=?require('restify');
var?plugins?=?require('jsplugs')().require('./plugins/com_astproxy_rest/plugins_rest');
for?(p?in?plugins)?{
get?=?plugins[p].api.get;
root?=?plugins[p].api.root;
?post?=?plugins[p].api.post;
? del?=?plugins[p].api.del;
??//?add?routing?functions
??for?(k?in?get)?{
????server.get('/'?+?root?+?'/'?+?get[k],?execute);
??}
??// post...
}
server.listen(port,?address,?function()?{
??logger.log.info(IDLOG,?server.name?+?'?listening?at?'?+?server.url);
});
T h e O l d C o d e
var?restify?=?require('restify');
var?plugins?=?require('jsplugs')().require('./plugins/com_astproxy_rest/plugins_rest');
for?(p?in?plugins)?{
get?=?plugins[p].api.get;
root?=?plugins[p].api.root;
?post?=?plugins[p].api.post;
? del?=?plugins[p].api.del;
??//?add?routing?functions
??for?(k?in?get)?{
????server.get('/'?+?root?+?'/'?+?get[k],?execute);
??}
??// post
}
server.listen(port,?address,?function()?{
??logger.log.info(IDLOG,?server.name?+?'?listening?at?'?+?server.url);
});
T h e O l d C o d e
var?fastify?=?require('fastify')({?logger:?false?});
var?plugins?=?require(¡®jsplugs')().require('./plugins/com_astproxy_rest/plugins_rest');
for?(p?in?plugins)?{
get?=?plugins[p].api.get;
??//?add?routing?functions
??for?(k?in?get)?{
????fastify.get('/'?+?root?+?'/'?+?get[k],?plugins[p][get[k]?+?'_schema'],?execute);
??}
}
fastify.listen(port,?address,?function?(err,?address)?{
??if?(err)?{
????fastify.log.error(err)
????process.exit(1)
??}
??fastify.log.info(`fastify?server?listening?on?${address}`)
});
T h e N e w C o d e
var?fastify?=?require('fastify')({?logger:?false?});
var?plugins?=?require(¡®jsplugs')().require('./plugins/com_astproxy_rest/plugins_rest');
for?(p?in?plugins)?{
get?=?plugins[p].api.get;
??//?add?routing?functions
??for?(k?in?get)?{
????fastify.get('/'?+?root?+?'/'?+?get[k],?plugins[p][get[k]?+?'_schema'],?execute);
??}
}
fastify.listen(port,?address,?function?(err,?address)?{
??if?(err)?{
????fastify.log.error(err)
????process.exit(1)
??}
??fastify.log.info(`fastify?server?listening?on?${address}`)
});
T h e N e w C o d e
var?fastify?=?require('fastify')({?logger:?false?});
var?plugins?=?require(¡®jsplugs')().require('./plugins/com_astproxy_rest/plugins_rest');
for?(p?in?plugins)?{
get?=?plugins[p].api.get;
??//?add?routing?functions
??for?(k?in?get)?{
????fastify.get('/'?+?root?+?'/'?+?get[k],?plugins[p][get[k]?+?'_schema'],?execute);
??}
}
fastify.listen(port,?address,?function?(err,?address)?{
??if?(err)?{
????fastify.log.error(err)
????process.exit(1)
??}
??fastify.log.info(`fastify?server?listening?on?${address}`)
});
T h e N e w C o d e
M I G R A T I O N
HTTP GET astproxy/extensions
Test Scenario 1
Virtual Machine on MBP 2,7 GHz Intel Core i5
? 1 CPU

? 1 GB RAM

? 10 Phone Extensions
$ autocannon
-c 100
-d 10
-l
https://$IP/astproxy/extensions
#?concurrent connections
10 secs: test duration
print latency
Running 10s test @ https://192.168.11.22/webrest/astproxy/extensions
100 connections
©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´
©¦ Stat ©¦ 2.5% ©¦ 50% ©¦ 97.5% ©¦ 99% ©¦ Avg ©¦ Stdev ©¦ Max ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©È
©¦ Latency ©¦ 158 ms ©¦ 226 ms ©¦ 1490 ms ©¦ 1671 ms ©¦ 270.33 ms ©¦ 233.65 ms ©¦ 1748.84 ms ©¦
©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼
©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©´
©¦ Stat ©¦ 1% ©¦ 2.5% ©¦ 50% ©¦ 97.5% ©¦ Avg ©¦ Stdev ©¦ Min ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©È
©¦ Req/Sec ©¦ 0 ©¦ 0 ©¦ 414 ©¦ 511 ©¦ 366.5 ©¦ 145.5 ©¦ 204 ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©È
Restify performance
Running 10s test @ https://192.168.11.22/webrest/astproxy/extensions
100 connections
©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´
©¦ Stat ©¦ 2.5% ©¦ 50% ©¦ 97.5% ©¦ 99% ©¦ Avg ©¦ Stdev ©¦ Max ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©È
©¦ Latency ©¦ 128 ms ©¦ 169 ms ©¦ 540 ms ©¦ 1544 ms ©¦ 212.24 ms ©¦ 197.89 ms ©¦ 1778.33 ms ©¦
©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼
©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©´
©¦ Stat ©¦ 1% ©¦ 2.5% ©¦ 50% ©¦ 97.5% ©¦ Avg ©¦ Stdev ©¦ Min ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©È
©¦ Req/Sec ©¦ 0 ©¦ 0 ©¦ 524 ©¦ 658 ©¦ 468.4 ©¦ 204.98 ©¦ 153 ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©È
Fastify performance
I m p r o v e A G A I N ?
Is it possible ?
fastify-http-proxy
github.com/fastify/fastify-http-proxy
REST Phonebook
REST CustCard
REST History
RESTAstProxy
WebSocket
{ REST-API } Node http-proxy
Running 10s test @ https://192.168.11.22/webrest/astproxy/extensions
100 connections
©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´
©¦ Stat ©¦ 2.5% ©¦ 50% ©¦ 97.5% ©¦ 99% ©¦ Avg ©¦ Stdev ©¦ Max ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©È
©¦ Latency ©¦ 82 ms ©¦ 121 ms ©¦ 218 ms ©¦ 1363 ms ©¦ 143.46 ms ©¦ 153.47 ms ©¦ 1530.87 ms ©¦
©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼
©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©¤©´
©¦ Stat ©¦ 1% ©¦ 2.5% ©¦ 50% ©¦ 97.5% ©¦ Avg ©¦ Stdev ©¦ Min ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©È
©¦ Req/Sec ©¦ 0 ©¦ 0 ©¦ 776 ©¦ 906 ©¦ 692.2 ©¦ 259.05 ©¦ 468 ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©¤©È
Fastify with HTTP-PROXY
const?Fastify?=?require('fastify');
const?serverF?=?Fastify({?logger:?false?});
const?proxyF?=?require(¡®fastify-http-proxy');
serverF.register(proxyF,?{
upstream:?http://myserver,
??prefix:?¡®/astproxy¡¯,
??preHandler:?function?(req,?res,?done)?{
??if?(!req.headers.authorization)?{
// do ahutentication
}
}
}
serverF.listen(port,?address,?(err,?address)?=>?{ ... });
f a s t i f y - h t t p - p r o x y
0
175
350
525
700
Restify Fastify Rest Fastify Proxy + Rest
+48%
+22%
Req/sec
Autocannon results
I want a
R E A L S C E N A R I O ! ! !
Test Scenario 2
Test Scenario 2
©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©´
©¦ Stat ©¦ 1% ©¦ 2.5% ©¦ 50% ©¦ 97.5% ©¦ Avg ©¦ Stdev ©¦ Min ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©È
©¦ Req/Sec ©¦ 51 ©¦ 51 ©¦ 180 ©¦ 239 ©¦ 164.65 ©¦ 57.3 ©¦ 51 ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©È
©¦ Bytes/Sec ©¦ 165 kB ©¦ 165 kB ©¦ 582 kB ©¦ 773 kB ©¦ 532 kB ©¦ 185 kB ©¦ 165 kB ©¦
©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¼
©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©Ð©¤©¤©¤©¤©¤©¤©¤©¤©´
©¦ Stat ©¦ 1% ©¦ 2.5% ©¦ 50% ©¦ 97.5% ©¦ Avg ©¦ Stdev ©¦ Min ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©È
©¦ Req/Sec ©¦ 0 ©¦ 0 ©¦ 236 ©¦ 285 ©¦ 213.6 ©¦ 70.19 ©¦ 45 ©¦
©À©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©à©¤©¤©¤©¤©¤©¤©¤©¤©È
©¦ Bytes/Sec ©¦ 0 B ©¦ 0 B ©¦ 772 kB ©¦ 932 kB ©¦ 698 kB ©¦ 229 kB ©¦ 147 kB ©¦
©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©Ø©¤©¤©¤©¤©¤©¤©¤©¤©¼
+33%
restify
Fastify
Something about
Fastify
Fastify story
Fastify story
Rest API
Plugin
Features Plugins
? https://github.com/fastify/help

? https://gitter.im/fastify

? Stack Over?ow
Help
www.fastify.io
ALESSANDRO POLIDORI
Senior Software Engineer
ale_polidori
alessandropolidori
alepolidori

More Related Content

Presentation @ Node.js Global Summit 2020 - Online