node.js dans les nuages
Post on 12-Jul-2015
445 Views
Preview:
TRANSCRIPT
On fait tout à la main ?
● EC2 / Load balancer / Route 53 ● git clone / npm install / node server.js● upstart ? forever ?● ...
● Hosting d’application web● Surcouche de plusieurs services AWS● Interface web simple● Création automatisée de l’infra● Machines optimisées pour Node.js
Load balancer
Backend 1
S3v1.zipv2.zip
conf.zip
Console / API
USER
Backend 2
Backend 3
EC2
Elastic Beanstalk
DEV /OPS
Infra v0
Route 53DNS
Script de déploiement en Node.js awsUtil.uploadArchiveToS3(params.filename, params.remoteFilename).then(function() {
return awsUtil. createApplicationVersion(params.versionLabel, params.description, params.remoteFilename);
}).then(function(versionDetails) {
return awsUtil. updateEnvironmentVersion(params.environment, versionDetails.versionLabel);
}).then(function() {
return awsUtil. waitEnvironmentToBeReady(params.environment);
}).then(function() {
defered.resolve('Deployment is finished.')
}).catch(function(err) {
defered.reject(err);
});
Load balancer
Backend 1
S3v1.zipv2.zip
conf.zip
Console / API
USER
Backend 2
Backend 3
EC2
Elastic Beanstalk
DEV /OPS
Infra avec usine logicielle
Route 53DNS
EC2
class MySimulation extends Simulation {
val httpProtocol = http.baseURL("http://localhost:3000");
val scn = scenario("My scenario").exec(http("GET /myPage").get("/myPage"));
setUp(scn.inject(constantUsersPerSec(10) during (1 minutes))).protocols(httpProtocol)
}
Optimisations
● Redis / Elasticache● Clustering● Descripteurs de fichiers● Templates swig en cache● Refactoring divers
Dimensionnement de l’infra
● Objectifs :○ déterminer le meilleur rapport performances / coûts○ quel type d’instance EC2 ?○ quel type de cache ?
● Tests Gatling sur l’infra AWS à partir d’une instance EC2
Scalabilité linéaire
● 2x t2.medium : 600 pages / seconde● 4x t2.medium : 1200 pages / seconde● 8x t2.medium : 2400 pages / seconde
● 600 pages par seconde = en théorie 1,5 milliards de pages par mois
Load balancer EC2 t2.medium
x2
Backend 1S3
v1.zipv2.zip
conf.zip
Console / API
USER
Elasticache
Redis
EC2
Backend 2
Backend 3
EC2 t2.medium
x2
Elastic Beanstalk
DEV /OPS
Infra avec 2xt2.medium, cache et tests Gatling
Route 53DNS
Script de promotion en Node.jsawsUtil.getEnvironmentInfo(params.source).then(function(environment) {
return awsUtil. updateEnvironmentVersion(params.target, environment.version);
}).then(function() {
return awsUtil. waitEnvironmentToBeReady(params.target);
}).then(function() {
logger.info(‘%s has been updated from %s’, params.target, params.source);
}).catch(function(err) {
logger.error(err);
});
E.Beanstalk : Auto Scaling Group
● if (load > x) addInstance();
● Configurable sur :○ usage CPU○ usage réseau○ usage disque○ latence○ ...
● Exemple de configuration :
■ Entre 2 et 4 instances EC2○
■ if (latency > 2) addInstance();○
■ if (latency < 1) removeInstance();
E.Beanstalk : Auto Scaling Group
Auto scaling group
Load balancer EC2 t2.medium
x2
Backend 1S3
v1.zipv2.zip
conf.zip
Console / API
USER
Elasticache
Redis
EC2
Backend 2
Backend 3
EC2 t2.medium
x2
Elastic Beanstalk
DEV /OPS
Infra avec Auto Scaling Group
Route 53DNS
Sécurité
● AWS : tokens & security groups● npm retire● npm outdated● Helmet : middlewares pour Express● HTTPS● https://www.owasp.org/
Optimiser les pages Web● Diminuer le nombre de requêtes● Des requêtes moins lourdes● Cacher les requêtes
● => Concaténation, minification, cache-control, inliner les images, nettoyage du code mort, above the fold...
Content Delivery Network
● AWS Cloudfront ● En point d’entrée de la webapp● Rapproche l’utilisateur des serveurs● Exemple pour la France :
○ Data centers proches : Dublin et Francfort○ CDN proches : Paris et Marseille
Auto scaling group
Load balancer EC2 t2.medium
x2
Backend 1S3
v1.zipv2.zip
conf.zip
Console / API
USER
Elasticache
RedisCloudfrontCDN
EC2
Backend 2
Backend 3
EC2 t2.medium
x2
Elastic Beanstalk
DEV /OPS
Infra avec CDN
Route 53DNS
Auto scaling group
Load balancer EC2 t2.medium
x2
Backend 1S3
v1.zipv2.zip
conf.zip
Console / API
USER
Elasticache
RedisCloudfrontCDN
EC2
Backend 2
Backend 3
EC2 t2.medium
x2
Elastic Beanstalk
DEV /OPS
Infra avec monitoring
Route 53DNS
CloudwatchMonitoring
Bénéfices du cloud
● Pas de maintenance de data-center● En quelques clics :
○ Augmentation / réduction des ressources○ Mise en place de nouvelles infras○ Déploiement à l’international
=> On se concentre sur le métier
Coûts mensuelsCoûts
Usine logicielle & Dev 2 instances small : 2 * 20$ / mois
Preprod 2 instances medium : 2 * 41$ / mois
Production 2 instances medium : 2 * 41$ / mois
Cache 2 noeuds medium : 2 * 70$ / mois
CDN 10 millions de pages vues à 500KB : ~700$ / mois
Papertrail (Logs) 16GB cherchables sur 2 semaines : 150$ / mois
Newrelic (APM) 2 hosts : 180$ / mois
Total ~1400$ / mois
top related