SlideShare une entreprise Scribd logo
1  sur  51
Télécharger pour lire hors ligne
1
Paris Node.JS & Voodoo
Chapter 7 / Conference 03
Novembre 2019
2019
2
Qui est Node.JS ?
3
Programme
❏ Présentation Voodoo 5”
❏ Sacha CLERC-RENAUD : Monolith vers Micro services, en 2 ans qu'avons nous appris. 20"
❏ Vincent Vallet : Déclencher des actions en temps réel sur la production. 20"
❏ 10” Break
❏ Yohan Lasorsa : Oups, j'ai mis du TypeScript dans mon appli Node.js ! 20”
❏ COCKTAIL DINATOIRE!
4
Qui sommes nous ?
2.6 milliard
de téléchargements
300 millions
d’utilisateurs actifs mensuels
plus d’1 milliard
d’événements par heure
15 To et des milliards de
requêtes par jour
Leader dans le secteur des jeux
mobiles hyper casual
International :
Berlin, Barcelone, Amsterdam, UK
à venir Montréal …
*200 salariés*
3 BU Opérationnels :
- Growth & Engineering
- Apps
- Gaming
● Website : www.voodoo.io
● Pour postuler : jobs@voodoo.io /
via le site
● Contact : stephanie@voodoo.io
● Voodoo Talks Tech
Next event : DotJS Paris @ Voodoo,
le 4 décembre 2019
Monolithe vers
micro services
Retour d’expérience
Introduction
Sacha Clerc-Renaud
Développeur Backend Node.js depuis 2012
Contexte
Au départ plutôt food que tech
Contexte
Stratégie
● Découpage par domaine métier
● Nouvelle fonctionnalité = refacto en micro service
Contraintes
Continuer à délivrer de la valeur.
Contraintes
Downtime autorisée pendant les heures creuses.
Go micro services !!
Situation initiale
Maîtriser les dépendances NPM
● Sécurité accrue
● Peu de migrations à gérer
● Stack cohérente entre service
● Plus rapide à installer
Orchestration
● Déploiements faciles
● Rollback rapide
● Rolling update
● Mise à l’échelle
Orchestration
Un commit pour deploy
Un commit pour rollback
Monitoring
● Logger les requêtes
● Localiser l’erreur
● Avoir des alertes
Mettre en place une gateway
Mettre en place une gateway
● Abstraire les services
● Rollback du pauvre
Une gateway par plateforme
Ajouter des micro services
Partager la DB entre les micro services
Pour :
● Gains de temps
● Requêtes facile
Contre :
● Single point of failure
● Couplage entre service
Partager la DB entre les micro services
Mise en place d’un template
Pour :
● Facilite la creation de MS
● Code plus homogène
Contre :
● Difficile d’avoir un template générique qui couvre tous les use cases
● Nécessite d’avoir un peu stabilisé les techno choisies.
Ce qu’on ferait différemment aujourd’hui
● Séparer certaines DB plus tôt
● Regrouper certains services
● Avoir un correlation ID dans nos logs
● Des dashboards & metrics par MS
● Avoir une map des dépendances entre MS (calls & events)
Est-ce que ça a marché ?
En résumé
En 2 ans : Environs 100 microservices
En résumé
● Partager les DB est une bonne idée
● Un commit pour deploy/rollback
● Exploitez la flexibilité des gateways
Mail: sachacr@gmail.com
Twitter: @Sasqwach
30
Vincent Vallet : Déclencher des actions en temps réel sur la
production.
Description :
Comment communiquer avec les instances (même en production) pour
déclencher des diagnostiques, des profiling CPU ou même des actions
fonctionnelles ? On verra comment construire une architecture à base de
WebSocket pour répondre à ce besoin et récupérer des données sur l'état
de santé de vos applications.
Real time actions on
production
Hello!
Vincent Vallet
NodeJs & performance evangelist
@Vince_Vallet
32
What / Why
… technical actions vs functional actions!
1
What?
Instance
Instance
Monitoring
system
Real time
action
system
Why?
- Be proactive
- Get immediate information about runtime
- Make your system independent of monitoring solutions
- Cost saving?
Architecture
WebSocket, Node.js and message queue
2
Instance
Instance
.
.
.
Productio
n
WS
ServerWS
Server
Message
queue API
NodeHealth
UI
NoSql
Message
queue
WS
1. connect
2. save
3. read
4. Send action5. Send to all
queues
6. Read queue
7. Send message
Ready for production?
Performance, security, scalability ...
3
Scalability
Do not scale on CPU or memory!
Scaling based on number of open Web Socket!
Security
Use authentication system based on Json Web Token !
Instance
Instance
.
.
.
Productio
n
WS
ServerWS
Server
Message
queue API
NodeHealth
UI
NoSql
Message
queue
WS
1. Connect
+
JWT
const WebSocket = require('ws')
const ws = new WebSocket
'ws://localhost:8000',{
headers : {
token: "myTokenHere"
}
}
const WebSocketServer = require('ws').Server
const ws = new WebSocketServer({
verifyClient: (info, cb) => {
const token = info.req.headers.token
if (!token)
cb(false, 401, 'Unauthorized')
else {
jwt.verify(token, 'secret-key', (err, decoded) => {
if (err) {
cb(false, 401, 'Unauthorized')
} else {
info.req.user = decoded
cb(true)
}
})
}
}
})
Broken connections
Auto close broken connections: on client and server side!
const WebSocket = require('ws')
const ws = new WebSocket('ws://localhost:8000')
function heartbeat = {
clearTimeout(this.pingTimeout)
this.pingTimeout = setTimeout(function () {
ws.terminate()
}, 30000 + 1000)
}
ws.on(‘open’, heartbeat)
ws.on(‘ping’, heartbeat)
ws.on(‘close’, function () {
clearTimeout(this.pingTimeout)
})
const WebSocket = require('ws')
const wss = new WebSocketServer()
const heartbeat = () => {this.isAlive = true}
wss.on(‘connection’, (ws) => {
ws.isAlive = true
ws.on(‘pong’, heartbeat)
})
const interval = setInterval(() => {
wss.clients.forEach((ws) => {
if (ws.isAlive === false) return ws.terminate()
ws.isAlive = false
})
}, 30000)
Automatic connection
Case 1: your instance has restarted => simple WS connection
Case 2: your WSS has restarted / crashed, then enable automatic
reconnection from client!
Instance
Instance
.
.
.
Productio
n
WS
ServerWS
Server
Message
queue API
NodeHealth
UI
NoSql
Message
queue
WS
1. connect
Automatic
reconnection on
client side
const WebSocket = require('ws')
const connectToWSS = () => {
const ws = new WebSocket('ws://localhost:8000')
ws.on(‘close’, function () {
ws.terminate()
clearTimeout(this.pingTimeout)
connectToWSS()
})
ws.on(‘error’, function () {
ws.terminate()
})
}
connectToWSS()
Performance
WS are not CPU consuming, it’s idle most of the time.
Be careful of action you trigger on your system!
Thanks!
Any questions?
You can find me at:
◇ @Vince_Vallet
◇ wallet77@gmail.com
49
Credits
◇ https://nodejs.org/api/inspector.html
◇ https://chromedevtools.github.io/devtools-protocol/v8
◇ https://www.youtube.com/watch?v=IdR6N9B-S1E
◇ https://github.com/websockets/ws/blob/HEAD/doc/ws.md
◇ http://iostreamer.me/ws/node.js/jwt/2016/05/08/websockets_
authentication.html
50
51
Yohan Lasorsa : Oups, j'ai mis du TypeScript dans mon appli Node.js !
Description :
Et si on faisait une petite appli Node.js, from scratch... en TypeScript?
A travers un live coding de 20min, nous allons voir ensemble que rajouter du
TypeScript à une application Node.js se fait finalement avec très peu de
contraintes, avec pour bénéfices tout ce qui découle de TypeScript.
Du workflow de dev jusqu'au packaging de librairie (en incluant les types bien
sûr ;-)), tout y passe! Après cela, plus d'excuse pour ne pas s'y mettre...

Contenu connexe

Similaire à Voodoo.io NodeJS Meetup - November 13

Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Bruno Bonnin
 
Client riche et nouvelles technologies
Client riche et nouvelles technologiesClient riche et nouvelles technologies
Client riche et nouvelles technologies
Sébastien Letélié
 
Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011
jimmybourassa
 

Similaire à Voodoo.io NodeJS Meetup - November 13 (20)

SPA avec SignalR et Angular Js
SPA avec SignalR et Angular JsSPA avec SignalR et Angular Js
SPA avec SignalR et Angular Js
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
 
Client riche et nouvelles technologies
Client riche et nouvelles technologiesClient riche et nouvelles technologies
Client riche et nouvelles technologies
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
 
TechDays 2010 (CLO202) : Introduction à Windows Azure
TechDays 2010 (CLO202) : Introduction à Windows AzureTechDays 2010 (CLO202) : Introduction à Windows Azure
TechDays 2010 (CLO202) : Introduction à Windows Azure
 
_JCVFr
_JCVFr_JCVFr
_JCVFr
 
T
TT
T
 
2.0 TEchnologies
2.0 TEchnologies2.0 TEchnologies
2.0 TEchnologies
 
Rapport application chat
Rapport application chatRapport application chat
Rapport application chat
 
VISEO Shake the Microsoft business - comment rapidement batir une solution IoT
VISEO Shake the Microsoft business - comment rapidement batir une solution IoTVISEO Shake the Microsoft business - comment rapidement batir une solution IoT
VISEO Shake the Microsoft business - comment rapidement batir une solution IoT
 
JUG - Soirée Blockchain
JUG - Soirée BlockchainJUG - Soirée Blockchain
JUG - Soirée Blockchain
 
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
 
L'histoire d'HTML5 pour les développeurs Windows Phone 8
L'histoire d'HTML5 pour les développeurs Windows Phone 8L'histoire d'HTML5 pour les développeurs Windows Phone 8
L'histoire d'HTML5 pour les développeurs Windows Phone 8
 
System Center Operations Manager et Orchestrator : Main dans la main
System Center Operations Manager et Orchestrator : Main dans la mainSystem Center Operations Manager et Orchestrator : Main dans la main
System Center Operations Manager et Orchestrator : Main dans la main
 
Sarah : l’Internet des Objets au service de la maison connectée
Sarah : l’Internet des Objets au service de la maison connectée Sarah : l’Internet des Objets au service de la maison connectée
Sarah : l’Internet des Objets au service de la maison connectée
 
Rationalisation d'infrastructures SQL Server
Rationalisation d'infrastructures SQL Server Rationalisation d'infrastructures SQL Server
Rationalisation d'infrastructures SQL Server
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?
 
Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011
 
IoT (M2M) - Big Data - Analyses : Simulation et Démonstration
IoT (M2M) - Big Data - Analyses : Simulation et DémonstrationIoT (M2M) - Big Data - Analyses : Simulation et Démonstration
IoT (M2M) - Big Data - Analyses : Simulation et Démonstration
 

Dernier (6)

Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoire
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
 
le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptx
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 

Voodoo.io NodeJS Meetup - November 13