meetup pm2 @delicious-insights

47
Node.js to Space Node.js en production, best practices

Upload: alexandre-strzelewicz

Post on 15-Apr-2017

106 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Meetup PM2 @delicious-insights

Node.js to Space

Node.js en production, best practices

Page 2: Meetup PM2 @delicious-insights

Les problèmes de Node.js en production

❖ En cas d'erreur, Javascript throw une erreur et l’application crash

❖ Les mises à jours provoquent du downtime qui impactent l’UX

❖ Javascript est un langage mono threadé, seulement un CPU core est utilisé par défaut

❖ De la surveillance pro-active est obligatoire sinon votre application peut planter en prod

Error: your helium tank is not stored correctly

Page 3: Meetup PM2 @delicious-insights

Les questions récurrentes

❖ Comment maximiser les performances ?

❖ Pourquoi il y a sous utilisation des ressources serveur disponibles ?

❖ Pourquoi je n'ai pas eu de nouveaux clients aujourd'hui ?

❖ Où sont stockés les logs applicatifs ?

❖ Pourquoi mon application redémarre sans raison ?

Page 4: Meetup PM2 @delicious-insights

et

Node.js production ready avec

Page 5: Meetup PM2 @delicious-insights

❖ Process manager pour app Node.js en production❖ Maintient les applications en ligne❖ Améliore les performances (multi-cores)❖ Load balancer intelligent intégré❖ Centralisation des logs des applications

15,900+ stars sur Github

1200+ tests

17 millions+ downloads

14ème module Node le plus populaire

Page 6: Meetup PM2 @delicious-insights
Page 7: Meetup PM2 @delicious-insights

❖ Application SaaS de monitoring proactif❖ Tableau de bord en temps réel❖ Profiling mem/cpu en production❖ Transaction Tracing!

4,000+ utilisateurs mensuel

500+ clients premium

15,000+ serveurs surveillés

Page 8: Meetup PM2 @delicious-insights

From developmentTo PRODUCTION

Page 9: Meetup PM2 @delicious-insights

$ npm install pm2 -g

Installer PM2

Documentation :http://pm2.keymetrics.io/

Code source :https://github.com/Unitech/PM2

(0 configuration)

Page 10: Meetup PM2 @delicious-insights

App Launching

Page 11: Meetup PM2 @delicious-insights

$ pm2 start app.js

Démarrer une application en production

Démarrer une app + mise en tâche de fond :

$ pm2 listLister les applications :

Page 12: Meetup PM2 @delicious-insights

Informations additionnelles

$ pm2 show <app_name>

Page 13: Meetup PM2 @delicious-insights

Gestion d'applications

$ pm2 restart <app_name>

Redémarrer:

$ pm2 stop <app_name>

Arrêter:

$ pm2 delete <app_name>

Effacer:

Page 14: Meetup PM2 @delicious-insights

Supervision de l’utilisation mem/CPU

$ pm2 monit

Page 15: Meetup PM2 @delicious-insights

Consultation des logs

$ pm2 logs [app-name] [--json] [--lines 100]

Page 16: Meetup PM2 @delicious-insights

Cluster Mode

Page 17: Meetup PM2 @delicious-insights

La vie sans cluster

Page 18: Meetup PM2 @delicious-insights

Qu’est ce que le mode cluster?

+

- Permet de lancer plusieurs process (donc repartis sur plusieurs cores)

- Un process (master) se charge de répartir les requêtes sur d’autres (workers)

Page 19: Meetup PM2 @delicious-insights

Cluster : De meilleures performances

$ pm2 start server.js -i max

$ pm2 scale app 4

Page 20: Meetup PM2 @delicious-insights

Cluster : Redémarrage intelligent

$ pm2 reload app

pas de downtime lors du redémarrage des process

Page 21: Meetup PM2 @delicious-insights

Cluster : Gestion de l’état

app.listen()

Point d'entrée :

process.send('ready');

OU

process.on('SIGINT', () => { db.close() })

Point de sortie :

Page 22: Meetup PM2 @delicious-insights
Page 23: Meetup PM2 @delicious-insights

Consultation des logs

Page 24: Meetup PM2 @delicious-insights

UGLY!

Page 25: Meetup PM2 @delicious-insights

$ pm2 start ecosystem.json

Page 26: Meetup PM2 @delicious-insights
Page 27: Meetup PM2 @delicious-insights

PM2 deploy

Page 28: Meetup PM2 @delicious-insights

pm2 deploy production setup

pm2 deploy production

pm2 deploy production revert [n]

Page 29: Meetup PM2 @delicious-insights

● Redirection des signaux systèmes (PID1)● Contrôle du changement d'état● Clustering automatique● Redémarrage instantané

Et Docker dans tout ca?

$ pm2-docker process.json --only API

Page 30: Meetup PM2 @delicious-insights
Page 31: Meetup PM2 @delicious-insights
Page 32: Meetup PM2 @delicious-insights

PM2 & Keymetrics

API 2

API 1

API 2

API 1

TCPAES256

SERVER #1

Supervision

SERVER #2

Gestion de process

Page 33: Meetup PM2 @delicious-insights
Page 34: Meetup PM2 @delicious-insights

Intégration PM2 <> Keymetrics

$ pm2 link [secret_key] [public_key] [name]

1. Créer un compte sur app.keymetrics.io2. Créer un bucket3. Copier / Coller la commande affichée

Intégration en 20 secondes!

Page 35: Meetup PM2 @delicious-insights

Fonctionnalités

Page 36: Meetup PM2 @delicious-insights
Page 37: Meetup PM2 @delicious-insights
Page 38: Meetup PM2 @delicious-insights
Page 39: Meetup PM2 @delicious-insights
Page 40: Meetup PM2 @delicious-insights
Page 41: Meetup PM2 @delicious-insights

Modules!

Page 42: Meetup PM2 @delicious-insights

WORKSHOP TIME!

https://github.com/keymetrics/fullstack-workshop

Page 43: Meetup PM2 @delicious-insights

Coupon Discount

DELICIOUSPM2

30% de réduction pendant 6 mois sur un plan premium

Expire dans 2 semaines

Page 45: Meetup PM2 @delicious-insights

D’autres fonctionnalités clés de pm2 :

● Watch & Restart lors de modification de fichiers● Déploiement simple● Source Map intégrées● Rotation des fichiers de logs● Support de transpilers● Démarrage automatique par l’OS● API

Page 46: Meetup PM2 @delicious-insights
Page 47: Meetup PM2 @delicious-insights

Configuration de l’application

● Un seul fichier de configuration ○ Plusieurs applications○ Plusieurs environnements○ Déploiement○ Fichiers journaux

● Commande de démarrage● YAML, JSON, Javascript

$ pm2 start process.config.js