SlideShare a Scribd company logo
1 of 81
node-js.slack.com
#cloudnative
github.com/
CloudNativeJS
CloudNativeJS.io
Neeraj Laad
Developer,
Node.js Runtimes @IBM
neeraj.laad@uk.ibm.com
@NeerajLaad
Beth Griggs
Node.js Core Collaborator,
Node.js Runtimes @IBM
Bethany.Griggs@uk.ibm.com
@BethGriggs_
Cloud Native Node.js
Create and Deploy Cloud Native Node.js Applications
@cloudnativejs
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
1,150
0
0
300
600
900
200
500
IO Speed
• Performance
• Scale
MICROSERVICES: Key Performance Characteristics
1,150
0
0
300
600
900
200
500
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
1,150
897
0
300
600
900
200
500
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
1,150
897
0
300
600
900
200
500
MICROSERVICES: Key Performance Characteristics
Startup
• Availability
• Scaling
IO Speed
• Performance
• Scale
1,150
897
0
300
600
900
200
500
1 0
MICROSERVICES: Key Performance Characteristics
Startup
• Availability
• Scaling
IO Speed
• Performance
• Scale
1,150
897
0
300
600
900
200
500
1
14
MICROSERVICES: Key Performance Characteristics
Startup
• Availability
• Scaling
IO Speed
• Performance
• Scale
1,150
897
0
300
600
900
200
500
1
14
MICROSERVICES: Key Performance Characteristics
Startup
• Availability
• Scaling
Memory
• Efficiency
• Cost
IO Speed
• Performance
• Scale
1,150
897
0
300
600
900
200
500
1
14
24 0
MICROSERVICES: Key Performance Characteristics
Startup
• Availability
• Scaling
Memory
• Efficiency
• Cost
IO Speed
• Performance
• Scale
1,150
897
0
300
600
900
200
500
1
14
24
422
Startup
• Availability
• Scaling
Memory
• Efficiency
• Cost
IO Speed
• Performance
• Scale
MICROSERVICES: Key Performance Characteristics
Cloud Hosting vs Cloud Native
Evans Cloud Development Survey
2017
Cloud Hosting vs Cloud Native
Evans Cloud Development Survey
2017
Cloud Hosting vs Cloud Native
Evans Cloud Development Survey
2017
Cloud Hosting vs Cloud Native
Node.js Foundation Survey
2018
Evans Cloud Development Survey
2017
Cloud Hosting vs Cloud Native
Node.js Foundation Survey
2018
Evans Cloud Development Survey
2017
Cloud Hosting vs Cloud Native
Node.js Foundation Survey
2018
Evans Cloud Development Survey
2017
Container
Orchestration Monitoring
Distributed TracingPackage and Deploy
Platform
MonitoringDistributed TracingHealth Checking
Module Insights Container Orchestration
MonitoringDistributed TracingHealth Checking
Module Insights Container Orchestration
Module Insights: http://modules.cloudnativejs.io/
Module LTS: https://github.com/CloudNativeJS/ModuleLTS
Module LTS: https://github.com/strongloop/loopback
MonitoringDistributed TracingHealth Checking
Module Insights Container Orchestration
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
# Change working directory
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Copy package.json and package-lock.json
COPY package*.json /app/
# Install app dependencies
RUN npm install —-production
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
CMD ["npm", "start"]
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
# Change working directory
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Copy package.json and package-lock.json
COPY package*.json /app/
# Install app dependencies
RUN npm install —-production
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
CMD ["npm", "start"]
Node.js 8 Docker Image
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
# Change working directory
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Copy package.json and package-lock.json
COPY package*.json /app/
# Install app dependencies
RUN npm install —-production
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
CMD ["npm", "start"]
Node.js 8 Docker Image
Operating System Updates
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
# Change working directory
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Copy package.json and package-lock.json
COPY package*.json /app/
# Install app dependencies
RUN npm install —-production
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
CMD ["npm", "start"]
Node.js 8 Docker Image
Operating System Updates
package.json
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
# Change working directory
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Copy package.json and package-lock.json
COPY package*.json /app/
# Install app dependencies
RUN npm install —-production
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
CMD ["npm", "start"]
Node.js 8 Docker Image
Operating System Updates
package.json
node_modules
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
# Change working directory
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Copy package.json and package-lock.json
COPY package*.json /app/
# Install app dependencies
RUN npm install —-production
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
CMD ["npm", "start"]
Node.js 8 Docker Image
Operating System Updates
package.json
node_modules
Application
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
# Change working directory
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Copy package.json and package-lock.json
COPY package*.json /app/
# Install app dependencies
RUN npm install —-production
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
CMD ["npm", "start"]
Node.js 8 Docker Image
Operating System Updates
package.json
node_modules
Application
716 MB
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY package*.json /app/
RUN npm install —-production
Node.js 8 Docker Image
Operating System Updates
package.json
node_modules
716 MB
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY package*.json /app/
RUN npm install —-production
# Copy the dependencies into a Slim Node docker image
FROM node:8-slim
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY --from=0 /app/node_modules /app/node_modules
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
EXPOSE 3000
CMD ["npm", "start"]
Node.js 8 Docker Image
Operating System Updates
package.json
node_modules
716 MB
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY package.json /app/
RUN npm install —production
# Copy the dependencies into a Slim Node docker image
FROM node:8-slim
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY --from=0 /app/node_modules /app/node_modules
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
EXPOSE 3000
CMD ["npm", "start"]
node_modules
716 MB
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY package.json /app/
RUN npm install —production
# Copy the dependencies into a Slim Node docker image
FROM node:8-slim
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY --from=0 /app/node_modules /app/node_modules
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
EXPOSE 3000
CMD ["npm", "start"]
node_modules
716 MB
Node.js 8 SLIM Docker Image
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY package.json /app/
RUN npm install —production
# Copy the dependencies into a Slim Node docker image
FROM node:8-slim
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY --from=0 /app/node_modules /app/node_modules
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
EXPOSE 3000
CMD ["npm", "start"]
node_modules
716 MB
Node.js 8 SLIM Docker Image
Operating System Updates
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY package.json /app/
RUN npm install —production
# Copy the dependencies into a Slim Node docker image
FROM node:8-slim
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY --from=0 /app/node_modules /app/node_modules
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
EXPOSE 3000
CMD ["npm", "start"]
node_modules
716 MB
Node.js 8 SLIM Docker Image
Operating System Updates
package.json
Application
229 MB
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
FROM node:8
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY package.json /app/
RUN npm install —production
# Copy the dependencies into a Slim Node docker image
FROM node:8-slim
WORKDIR "/app"
# Install OS updates
RUN apt-get update && apt-get dist-upgrade -y && apt-get clean 
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY --from=0 /app/node_modules /app/node_modules
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
EXPOSE 3000
CMD ["npm", "start"]
node_modules
Node.js 8 SLIM Docker Image
Operating System Updates
package.json
Application
$ docker build -t node-app -f Dockerfile-run .
$ docker build -t node-app -f Dockerfile-run .
$ docker run -d —p 3000:3000 -t node-app
$ docker build -t node-app -f Dockerfile-run .
$ docker run -d —p 3000:3000 -t node-app
MonitoringDistributed TracingHealth Checking
Module Insights Container Orchestration
HELM CHARTS
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
/chart/nodeserver/templates/basedeployment.yaml
/chart/nodeserver/templates/deployment.yaml
/chart/nodeserver/templates/service.yaml
/chart/nodeserver/templates/hpa.yaml
/chart/nodeserver/templates/istio.yaml
/chart/nodeserver/Chart.yaml
/chart/nodeserver/values.yaml
apiVersion: v1
description: A Helm chart for Kubernetes
name: nodeserver
version: 1.0.0
HELM CHARTS
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
/chart/nodeserver/templates/basedeployment.yaml
/chart/nodeserver/templates/deployment.yaml
/chart/nodeserver/templates/service.yaml
/chart/nodeserver/templates/hpa.yaml
/chart/nodeserver/templates/istio.yaml
/chart/nodeserver/Chart.yaml
/chart/nodeserver/values.yaml
apiVersion: v1
description: A Helm chart for Kubernetes
name: nodeserver
version: 1.0.0
HELM CHARTS
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
/chart/nodeserver/templates/basedeployment.yaml
/chart/nodeserver/templates/deployment.yaml
/chart/nodeserver/templates/service.yaml
/chart/nodeserver/templates/hpa.yaml
/chart/nodeserver/templates/istio.yaml
/chart/nodeserver/Chart.yaml
/chart/nodeserver/values.yaml
replicaCount: 1
revisionHistoryLimit: 1
image:
repository: nodeserver
tag: 1.0.0
pullPolicy: IfNotPresent
resources:
requests:
cpu: 200m
memory: 300Mi
livenessProbe:
initialDelaySeconds: 3000
periodSeconds: 1000
service:
name: Node
type: NodePort
servicePort: 3000
hpa:
enabled: false
minReplicas: 1
maxReplicas: 2
metrics:
cpu:
targetAverageUtilization: 70
memory:
targetAverageUtilization: 70
services:
base:
enabled: false
replicaCount: 1
image:
tag : v0.9.9
weight: 100
istio:
enabled: false
weight: 100
HELM CHARTS
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
/chart/nodeserver/templates/basedeployment.yaml
/chart/nodeserver/templates/deployment.yaml
/chart/nodeserver/templates/service.yaml
/chart/nodeserver/templates/hpa.yaml
/chart/nodeserver/templates/istio.yaml
/chart/nodeserver/Chart.yaml
/chart/nodeserver/values.yaml
replicaCount: 1
revisionHistoryLimit: 1
image:
repository: nodeserver
tag: 1.0.0
pullPolicy: IfNotPresent
resources:
requests:
cpu: 200m
memory: 300Mi
livenessProbe:
initialDelaySeconds: 3000
periodSeconds: 1000
service:
name: Node
type: NodePort
servicePort: 3000
hpa:
enabled: false
minReplicas: 1
maxReplicas: 2
metrics:
cpu:
targetAverageUtilization: 70
memory:
targetAverageUtilization: 70
services:
base:
enabled: false
replicaCount: 1
image:
tag : v0.9.9
weight: 100
istio:
enabled: false
weight: 100
HELM CHARTS
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
/chart/nodeserver/templates/basedeployment.yaml
/chart/nodeserver/templates/deployment.yaml
/chart/nodeserver/templates/service.yaml
/chart/nodeserver/templates/hpa.yaml
/chart/nodeserver/templates/istio.yaml
/chart/nodeserver/Chart.yaml
/chart/nodeserver/values.yaml
replicaCount: 1
revisionHistoryLimit: 1
image:
repository: nodeserver
tag: 1.0.0
pullPolicy: IfNotPresent
resources:
requests:
cpu: 200m
memory: 300Mi
livenessProbe:
initialDelaySeconds: 3000
periodSeconds: 1000
service:
name: Node
type: NodePort
servicePort: 3000
hpa:
enabled: false
minReplicas: 1
maxReplicas: 2
metrics:
cpu:
targetAverageUtilization: 70
memory:
targetAverageUtilization: 70
services:
base:
enabled: false
replicaCount: 1
image:
tag : v0.9.9
weight: 100
istio:
enabled: false
weight: 100
HELM CHARTS
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
/chart/nodeserver/templates/basedeployment.yaml
/chart/nodeserver/templates/deployment.yaml
/chart/nodeserver/templates/service.yaml
/chart/nodeserver/templates/hpa.yaml
/chart/nodeserver/templates/istio.yaml
/chart/nodeserver/Chart.yaml
/chart/nodeserver/values.yaml
replicaCount: 1
revisionHistoryLimit: 1
image:
repository: nodeserver
tag: 1.0.0
pullPolicy: IfNotPresent
resources:
requests:
cpu: 200m
memory: 300Mi
livenessProbe:
initialDelaySeconds: 3000
periodSeconds: 1000
service:
name: Node
type: NodePort
servicePort: 3000
hpa:
enabled: false
minReplicas: 1
maxReplicas: 2
metrics:
cpu:
targetAverageUtilization: 70
memory:
targetAverageUtilization: 70
services:
base:
enabled: false
replicaCount: 1
image:
tag : v0.9.9
weight: 100
istio:
enabled: false
weight: 100
$ cd ./chart/nodeserver/
$ helm install —name nodeserver .
$ cd ./chart/nodeserver/
$ helm install —name nodeserver .
$ cd ./chart/nodeserver/
$ helm install —name nodeserver .
MonitoringDistributed TracingHealth Checking
Module Insights Container Orchestration
Health Checks
HTTP Requests
Health Checks
HTTP Requests
GET: /ready
GET: /ready
Health Checks
HTTP Requests
GET: /ready 200
GET: /ready 200
Health Checks
HTTP Requests
GET: /ready 200
GET: /health 200
GET: /ready 200
GET: /health 200
Health Checks
HTTP Requests
GET: /ready 503
GET: /health 503
GET: /ready 200
GET: /health 200
Health Checks
HTTP Requests
GET: /ready 503
GET: /health 503
GET: /ready 200
GET: /health 200
SIGTERM
Health Checks
HTTP Requests
GET: /ready 503
GET: /health 503
GET: /ready 200
GET: /health 200
SIGTERM
SIGKILL
Health Checks
HTTP Requests
GET: /ready 503
GET: /health 503
GET: /ready 200
GET: /health 200
SIGTERM
SIGKILL
Health Checks
HTTP Requests
GET: /ready 503
GET: /health 503
GET: /ready 200
GET: /health 200
GET: /ready 200
GET: /health 200
GET: /ready 200
GET: /health 200
Health Checks
HTTP Requests
GET: /ready 200
GET: /health 200
GET: /ready 200
GET: /health 200
Health Checks
HTTP Requests
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
const health = require(‘@cloudnative/health-connect');
let healthcheck = new health.HealthChecker();
const readyPromise = new Promise(function (resolve, _reject) {
resolve();
});
let readyCheck = new health.ReadinessCheck("ready", readyPromise);
const livePromise = new Promise(function (resolve, _reject) {
resolve();
});
let liveCheck = new health.LivenessCheck("live", livePromise);
const shutdownPromise = new Promise(function (resolve, _reject) {
resolve();
});
let shutdownCheck = new health.ShutdownCheck(“shut”, shutdownProm);
healthcheck.registerReadinessCheck(readyCheck);
healthcheck.registerLivenessCheck(liveCheck);
healthcheck.registerShutdownCheck(shutdownCheck);
app.use('/ready', health.ReadinessEndpoint(healthcheck))
app.use('/health', health.LivenessEndpoint(healthcheck))
-
Health Checks
MonitoringDistributed TracingHealth Checking
Module Insights Container Orchestration
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR
FRONTEND
MICROSERVICES SERVICES
LOAD
BALANCER
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR
FRONTEND
MICROSERVICES SERVICES
LOAD
BALANCER
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR
FRONTEND
MICROSERVICES SERVICES
LOAD
BALANCER
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR
FRONTEND
MICROSERVICES SERVICES
LOAD
BALANCER
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR
FRONTEND
MICROSERVICES SERVICES
LOAD
BALANCER
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR
FRONTEND
MICROSERVICES SERVICES
LOAD
BALANCER
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR
FRONTEND
MICROSERVICES SERVICES
LOAD
BALANCER
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
const zipkin = require(‘appmetrics-zipkin’);-
MonitoringDistributed TracingHealth Checking
Module Insights Container Orchestration
GET: /ready 200
GET: /health 200
GET: /metrics
GET: /ready 200
GET: /health 200
GET: /metrics
HTTP Requests
func add(_ a: Int, to b: Int)
-> Void {
print(a + b)
}
let a = ”5”
let b = 3
add(a, to: b)
const prometheus = require(‘appmetrics-prometheus’).attach();-
Tutorial: https://github.com/CloudNativeJS/Tutorial
node-js.slack.com
#cloudnative
github.com/
CloudNativeJS
CloudNativeJS.io @cloudnativejs

More Related Content

What's hot

Spring Boot 1.3 News #渋谷Java
Spring Boot 1.3 News #渋谷JavaSpring Boot 1.3 News #渋谷Java
Spring Boot 1.3 News #渋谷JavaToshiaki Maki
 
Vagrant introduction for Developers
Vagrant introduction for DevelopersVagrant introduction for Developers
Vagrant introduction for DevelopersAntons Kranga
 
DockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best PracticesDockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best PracticesTibor Vass
 
Concourse CI Meetup Demo
Concourse CI Meetup DemoConcourse CI Meetup Demo
Concourse CI Meetup DemoToshiaki Maki
 
Python virtualenv & pip in 90 minutes
Python virtualenv & pip in 90 minutesPython virtualenv & pip in 90 minutes
Python virtualenv & pip in 90 minutesLarry Cai
 
Web deploy command line
Web deploy command lineWeb deploy command line
Web deploy command lineLarry Nung
 
Introduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷JavaIntroduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷JavaToshiaki Maki
 
Dockerize node.js application
Dockerize node.js applicationDockerize node.js application
Dockerize node.js applicationSeokjun Kim
 
Manage appium dependencies with -appium-home in appium 2.0
Manage appium dependencies with  -appium-home in appium 2.0Manage appium dependencies with  -appium-home in appium 2.0
Manage appium dependencies with -appium-home in appium 2.0Kazuaki Matsuo
 
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year laterChristian Ortner
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment TacticsIan Barber
 
Optimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for DockerOptimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for DockerGraham Charters
 
Add new commands in appium 2.0
Add new commands in appium 2.0Add new commands in appium 2.0
Add new commands in appium 2.0Kazuaki Matsuo
 
Zero to Continuous Delivery on Google Cloud
Zero to Continuous Delivery on Google CloudZero to Continuous Delivery on Google Cloud
Zero to Continuous Delivery on Google CloudJames Heggs
 
Deploying an application with Chef and Docker
Deploying an application with Chef and DockerDeploying an application with Chef and Docker
Deploying an application with Chef and DockerDaniel Ku
 
Ruby on Rails Kickstart 101 & 102
Ruby on Rails Kickstart 101 & 102Ruby on Rails Kickstart 101 & 102
Ruby on Rails Kickstart 101 & 102Heng-Yi Wu
 
Fastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsFastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsSarath C
 
DevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: VagrantDevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: VagrantAntons Kranga
 
DNUG Webcast: IBM Notes V10 Performance Boost
DNUG Webcast: IBM Notes V10 Performance BoostDNUG Webcast: IBM Notes V10 Performance Boost
DNUG Webcast: IBM Notes V10 Performance BoostChristoph Adler
 

What's hot (20)

Spring Boot 1.3 News #渋谷Java
Spring Boot 1.3 News #渋谷JavaSpring Boot 1.3 News #渋谷Java
Spring Boot 1.3 News #渋谷Java
 
Vagrant introduction for Developers
Vagrant introduction for DevelopersVagrant introduction for Developers
Vagrant introduction for Developers
 
Pyramid deployment
Pyramid deploymentPyramid deployment
Pyramid deployment
 
DockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best PracticesDockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best Practices
 
Concourse CI Meetup Demo
Concourse CI Meetup DemoConcourse CI Meetup Demo
Concourse CI Meetup Demo
 
Python virtualenv & pip in 90 minutes
Python virtualenv & pip in 90 minutesPython virtualenv & pip in 90 minutes
Python virtualenv & pip in 90 minutes
 
Web deploy command line
Web deploy command lineWeb deploy command line
Web deploy command line
 
Introduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷JavaIntroduction to Concourse CI #渋谷Java
Introduction to Concourse CI #渋谷Java
 
Dockerize node.js application
Dockerize node.js applicationDockerize node.js application
Dockerize node.js application
 
Manage appium dependencies with -appium-home in appium 2.0
Manage appium dependencies with  -appium-home in appium 2.0Manage appium dependencies with  -appium-home in appium 2.0
Manage appium dependencies with -appium-home in appium 2.0
 
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year later
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
 
Optimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for DockerOptimizing Spring Boot apps for Docker
Optimizing Spring Boot apps for Docker
 
Add new commands in appium 2.0
Add new commands in appium 2.0Add new commands in appium 2.0
Add new commands in appium 2.0
 
Zero to Continuous Delivery on Google Cloud
Zero to Continuous Delivery on Google CloudZero to Continuous Delivery on Google Cloud
Zero to Continuous Delivery on Google Cloud
 
Deploying an application with Chef and Docker
Deploying an application with Chef and DockerDeploying an application with Chef and Docker
Deploying an application with Chef and Docker
 
Ruby on Rails Kickstart 101 & 102
Ruby on Rails Kickstart 101 & 102Ruby on Rails Kickstart 101 & 102
Ruby on Rails Kickstart 101 & 102
 
Fastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsFastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS Apps
 
DevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: VagrantDevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: Vagrant
 
DNUG Webcast: IBM Notes V10 Performance Boost
DNUG Webcast: IBM Notes V10 Performance BoostDNUG Webcast: IBM Notes V10 Performance Boost
DNUG Webcast: IBM Notes V10 Performance Boost
 

Similar to Cloud Native Node.js Docker Image Optimization

IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesChris Bailey
 
MeaNstack on Docker
MeaNstack on DockerMeaNstack on Docker
MeaNstack on DockerDaniel Ku
 
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesNode Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesChris Bailey
 
Pluralsight Webinar: Simplify Your Project Builds with Docker
Pluralsight Webinar: Simplify Your Project Builds with DockerPluralsight Webinar: Simplify Your Project Builds with Docker
Pluralsight Webinar: Simplify Your Project Builds with DockerElton Stoneman
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.catPablo Godel
 
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopOSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopleffen
 
DCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDocker, Inc.
 
DevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux ContainersDevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux Containersinside-BigData.com
 
#dddsw - Modernizing .NET Apps with Docker
#dddsw - Modernizing .NET Apps with Docker#dddsw - Modernizing .NET Apps with Docker
#dddsw - Modernizing .NET Apps with DockerElton Stoneman
 
How to create your own hack environment
How to create your own hack environmentHow to create your own hack environment
How to create your own hack environmentSumedt Jitpukdebodin
 
#SDD2017 - Modernizing .NET Apps with Docker
#SDD2017 - Modernizing .NET Apps with Docker#SDD2017 - Modernizing .NET Apps with Docker
#SDD2017 - Modernizing .NET Apps with DockerElton Stoneman
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDocker, Inc.
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandTroublemaker Khunpech
 
Automação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOpsAutomação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOpsRaul Leite
 
Modernizing .NET Apps
Modernizing .NET AppsModernizing .NET Apps
Modernizing .NET AppsDocker, Inc.
 
Minimum Viable Docker: our journey towards orchestration
Minimum Viable Docker: our journey towards orchestrationMinimum Viable Docker: our journey towards orchestration
Minimum Viable Docker: our journey towards orchestrationOutlyer
 
Remote Config REST API and Versioning
Remote Config REST API and VersioningRemote Config REST API and Versioning
Remote Config REST API and VersioningJumpei Matsuda
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction Robert Reiz
 

Similar to Cloud Native Node.js Docker Image Optimization (20)

IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
 
MeaNstack on Docker
MeaNstack on DockerMeaNstack on Docker
MeaNstack on Docker
 
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesNode Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
 
Pluralsight Webinar: Simplify Your Project Builds with Docker
Pluralsight Webinar: Simplify Your Project Builds with DockerPluralsight Webinar: Simplify Your Project Builds with Docker
Pluralsight Webinar: Simplify Your Project Builds with Docker
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopOSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
 
DCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best Practices
 
DevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux ContainersDevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux Containers
 
#dddsw - Modernizing .NET Apps with Docker
#dddsw - Modernizing .NET Apps with Docker#dddsw - Modernizing .NET Apps with Docker
#dddsw - Modernizing .NET Apps with Docker
 
Docker
DockerDocker
Docker
 
How to create your own hack environment
How to create your own hack environmentHow to create your own hack environment
How to create your own hack environment
 
#SDD2017 - Modernizing .NET Apps with Docker
#SDD2017 - Modernizing .NET Apps with Docker#SDD2017 - Modernizing .NET Apps with Docker
#SDD2017 - Modernizing .NET Apps with Docker
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best Practices
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
 
Automação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOpsAutomação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOps
 
Modernizing .NET Apps
Modernizing .NET AppsModernizing .NET Apps
Modernizing .NET Apps
 
Docker
DockerDocker
Docker
 
Minimum Viable Docker: our journey towards orchestration
Minimum Viable Docker: our journey towards orchestrationMinimum Viable Docker: our journey towards orchestration
Minimum Viable Docker: our journey towards orchestration
 
Remote Config REST API and Versioning
Remote Config REST API and VersioningRemote Config REST API and Versioning
Remote Config REST API and Versioning
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
 

Recently uploaded

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 

Recently uploaded (20)

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 

Cloud Native Node.js Docker Image Optimization

  • 1. node-js.slack.com #cloudnative github.com/ CloudNativeJS CloudNativeJS.io Neeraj Laad Developer, Node.js Runtimes @IBM neeraj.laad@uk.ibm.com @NeerajLaad Beth Griggs Node.js Core Collaborator, Node.js Runtimes @IBM Bethany.Griggs@uk.ibm.com @BethGriggs_ Cloud Native Node.js Create and Deploy Cloud Native Node.js Applications @cloudnativejs
  • 2. MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 3. 1,150 0 0 300 600 900 200 500 IO Speed • Performance • Scale MICROSERVICES: Key Performance Characteristics
  • 4. 1,150 0 0 300 600 900 200 500 MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 5. 1,150 897 0 300 600 900 200 500 MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 6. 1,150 897 0 300 600 900 200 500 MICROSERVICES: Key Performance Characteristics Startup • Availability • Scaling IO Speed • Performance • Scale
  • 7. 1,150 897 0 300 600 900 200 500 1 0 MICROSERVICES: Key Performance Characteristics Startup • Availability • Scaling IO Speed • Performance • Scale
  • 8. 1,150 897 0 300 600 900 200 500 1 14 MICROSERVICES: Key Performance Characteristics Startup • Availability • Scaling IO Speed • Performance • Scale
  • 9. 1,150 897 0 300 600 900 200 500 1 14 MICROSERVICES: Key Performance Characteristics Startup • Availability • Scaling Memory • Efficiency • Cost IO Speed • Performance • Scale
  • 10. 1,150 897 0 300 600 900 200 500 1 14 24 0 MICROSERVICES: Key Performance Characteristics Startup • Availability • Scaling Memory • Efficiency • Cost IO Speed • Performance • Scale
  • 11. 1,150 897 0 300 600 900 200 500 1 14 24 422 Startup • Availability • Scaling Memory • Efficiency • Cost IO Speed • Performance • Scale MICROSERVICES: Key Performance Characteristics
  • 12. Cloud Hosting vs Cloud Native Evans Cloud Development Survey 2017
  • 13. Cloud Hosting vs Cloud Native Evans Cloud Development Survey 2017
  • 14. Cloud Hosting vs Cloud Native Evans Cloud Development Survey 2017
  • 15. Cloud Hosting vs Cloud Native Node.js Foundation Survey 2018 Evans Cloud Development Survey 2017
  • 16. Cloud Hosting vs Cloud Native Node.js Foundation Survey 2018 Evans Cloud Development Survey 2017
  • 17. Cloud Hosting vs Cloud Native Node.js Foundation Survey 2018 Evans Cloud Development Survey 2017
  • 19.
  • 20.
  • 21. MonitoringDistributed TracingHealth Checking Module Insights Container Orchestration
  • 22. MonitoringDistributed TracingHealth Checking Module Insights Container Orchestration
  • 26. MonitoringDistributed TracingHealth Checking Module Insights Container Orchestration
  • 27. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 # Change working directory WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Copy package.json and package-lock.json COPY package*.json /app/ # Install app dependencies RUN npm install —-production COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node CMD ["npm", "start"]
  • 28. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 # Change working directory WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Copy package.json and package-lock.json COPY package*.json /app/ # Install app dependencies RUN npm install —-production COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node CMD ["npm", "start"] Node.js 8 Docker Image
  • 29. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 # Change working directory WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Copy package.json and package-lock.json COPY package*.json /app/ # Install app dependencies RUN npm install —-production COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node CMD ["npm", "start"] Node.js 8 Docker Image Operating System Updates
  • 30. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 # Change working directory WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Copy package.json and package-lock.json COPY package*.json /app/ # Install app dependencies RUN npm install —-production COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node CMD ["npm", "start"] Node.js 8 Docker Image Operating System Updates package.json
  • 31. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 # Change working directory WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Copy package.json and package-lock.json COPY package*.json /app/ # Install app dependencies RUN npm install —-production COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node CMD ["npm", "start"] Node.js 8 Docker Image Operating System Updates package.json node_modules
  • 32. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 # Change working directory WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Copy package.json and package-lock.json COPY package*.json /app/ # Install app dependencies RUN npm install —-production COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node CMD ["npm", "start"] Node.js 8 Docker Image Operating System Updates package.json node_modules Application
  • 33. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 # Change working directory WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Copy package.json and package-lock.json COPY package*.json /app/ # Install app dependencies RUN npm install —-production COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node CMD ["npm", "start"] Node.js 8 Docker Image Operating System Updates package.json node_modules Application 716 MB
  • 34. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY package*.json /app/ RUN npm install —-production Node.js 8 Docker Image Operating System Updates package.json node_modules 716 MB
  • 35. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY package*.json /app/ RUN npm install —-production # Copy the dependencies into a Slim Node docker image FROM node:8-slim WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY --from=0 /app/node_modules /app/node_modules COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node EXPOSE 3000 CMD ["npm", "start"] Node.js 8 Docker Image Operating System Updates package.json node_modules 716 MB
  • 36. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY package.json /app/ RUN npm install —production # Copy the dependencies into a Slim Node docker image FROM node:8-slim WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY --from=0 /app/node_modules /app/node_modules COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node EXPOSE 3000 CMD ["npm", "start"] node_modules 716 MB
  • 37. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY package.json /app/ RUN npm install —production # Copy the dependencies into a Slim Node docker image FROM node:8-slim WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY --from=0 /app/node_modules /app/node_modules COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node EXPOSE 3000 CMD ["npm", "start"] node_modules 716 MB Node.js 8 SLIM Docker Image
  • 38. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY package.json /app/ RUN npm install —production # Copy the dependencies into a Slim Node docker image FROM node:8-slim WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY --from=0 /app/node_modules /app/node_modules COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node EXPOSE 3000 CMD ["npm", "start"] node_modules 716 MB Node.js 8 SLIM Docker Image Operating System Updates
  • 39. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY package.json /app/ RUN npm install —production # Copy the dependencies into a Slim Node docker image FROM node:8-slim WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY --from=0 /app/node_modules /app/node_modules COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node EXPOSE 3000 CMD ["npm", "start"] node_modules 716 MB Node.js 8 SLIM Docker Image Operating System Updates package.json Application
  • 40. 229 MB func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) FROM node:8 WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY package.json /app/ RUN npm install —production # Copy the dependencies into a Slim Node docker image FROM node:8-slim WORKDIR "/app" # Install OS updates RUN apt-get update && apt-get dist-upgrade -y && apt-get clean && echo 'Finished installing dependencies' # Install app dependencies COPY --from=0 /app/node_modules /app/node_modules COPY . /app ENV NODE_ENV production ENV PORT 3000 USER node EXPOSE 3000 CMD ["npm", "start"] node_modules Node.js 8 SLIM Docker Image Operating System Updates package.json Application
  • 41. $ docker build -t node-app -f Dockerfile-run .
  • 42. $ docker build -t node-app -f Dockerfile-run . $ docker run -d —p 3000:3000 -t node-app
  • 43. $ docker build -t node-app -f Dockerfile-run . $ docker run -d —p 3000:3000 -t node-app
  • 44. MonitoringDistributed TracingHealth Checking Module Insights Container Orchestration
  • 45. HELM CHARTS func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) /chart/nodeserver/templates/basedeployment.yaml /chart/nodeserver/templates/deployment.yaml /chart/nodeserver/templates/service.yaml /chart/nodeserver/templates/hpa.yaml /chart/nodeserver/templates/istio.yaml /chart/nodeserver/Chart.yaml /chart/nodeserver/values.yaml apiVersion: v1 description: A Helm chart for Kubernetes name: nodeserver version: 1.0.0
  • 46. HELM CHARTS func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) /chart/nodeserver/templates/basedeployment.yaml /chart/nodeserver/templates/deployment.yaml /chart/nodeserver/templates/service.yaml /chart/nodeserver/templates/hpa.yaml /chart/nodeserver/templates/istio.yaml /chart/nodeserver/Chart.yaml /chart/nodeserver/values.yaml apiVersion: v1 description: A Helm chart for Kubernetes name: nodeserver version: 1.0.0
  • 47. HELM CHARTS func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) /chart/nodeserver/templates/basedeployment.yaml /chart/nodeserver/templates/deployment.yaml /chart/nodeserver/templates/service.yaml /chart/nodeserver/templates/hpa.yaml /chart/nodeserver/templates/istio.yaml /chart/nodeserver/Chart.yaml /chart/nodeserver/values.yaml replicaCount: 1 revisionHistoryLimit: 1 image: repository: nodeserver tag: 1.0.0 pullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 300Mi livenessProbe: initialDelaySeconds: 3000 periodSeconds: 1000 service: name: Node type: NodePort servicePort: 3000 hpa: enabled: false minReplicas: 1 maxReplicas: 2 metrics: cpu: targetAverageUtilization: 70 memory: targetAverageUtilization: 70 services: base: enabled: false replicaCount: 1 image: tag : v0.9.9 weight: 100 istio: enabled: false weight: 100
  • 48. HELM CHARTS func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) /chart/nodeserver/templates/basedeployment.yaml /chart/nodeserver/templates/deployment.yaml /chart/nodeserver/templates/service.yaml /chart/nodeserver/templates/hpa.yaml /chart/nodeserver/templates/istio.yaml /chart/nodeserver/Chart.yaml /chart/nodeserver/values.yaml replicaCount: 1 revisionHistoryLimit: 1 image: repository: nodeserver tag: 1.0.0 pullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 300Mi livenessProbe: initialDelaySeconds: 3000 periodSeconds: 1000 service: name: Node type: NodePort servicePort: 3000 hpa: enabled: false minReplicas: 1 maxReplicas: 2 metrics: cpu: targetAverageUtilization: 70 memory: targetAverageUtilization: 70 services: base: enabled: false replicaCount: 1 image: tag : v0.9.9 weight: 100 istio: enabled: false weight: 100
  • 49. HELM CHARTS func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) /chart/nodeserver/templates/basedeployment.yaml /chart/nodeserver/templates/deployment.yaml /chart/nodeserver/templates/service.yaml /chart/nodeserver/templates/hpa.yaml /chart/nodeserver/templates/istio.yaml /chart/nodeserver/Chart.yaml /chart/nodeserver/values.yaml replicaCount: 1 revisionHistoryLimit: 1 image: repository: nodeserver tag: 1.0.0 pullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 300Mi livenessProbe: initialDelaySeconds: 3000 periodSeconds: 1000 service: name: Node type: NodePort servicePort: 3000 hpa: enabled: false minReplicas: 1 maxReplicas: 2 metrics: cpu: targetAverageUtilization: 70 memory: targetAverageUtilization: 70 services: base: enabled: false replicaCount: 1 image: tag : v0.9.9 weight: 100 istio: enabled: false weight: 100
  • 50. HELM CHARTS func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) /chart/nodeserver/templates/basedeployment.yaml /chart/nodeserver/templates/deployment.yaml /chart/nodeserver/templates/service.yaml /chart/nodeserver/templates/hpa.yaml /chart/nodeserver/templates/istio.yaml /chart/nodeserver/Chart.yaml /chart/nodeserver/values.yaml replicaCount: 1 revisionHistoryLimit: 1 image: repository: nodeserver tag: 1.0.0 pullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 300Mi livenessProbe: initialDelaySeconds: 3000 periodSeconds: 1000 service: name: Node type: NodePort servicePort: 3000 hpa: enabled: false minReplicas: 1 maxReplicas: 2 metrics: cpu: targetAverageUtilization: 70 memory: targetAverageUtilization: 70 services: base: enabled: false replicaCount: 1 image: tag : v0.9.9 weight: 100 istio: enabled: false weight: 100
  • 51. $ cd ./chart/nodeserver/ $ helm install —name nodeserver .
  • 52. $ cd ./chart/nodeserver/ $ helm install —name nodeserver .
  • 53. $ cd ./chart/nodeserver/ $ helm install —name nodeserver .
  • 54. MonitoringDistributed TracingHealth Checking Module Insights Container Orchestration
  • 56. Health Checks HTTP Requests GET: /ready GET: /ready
  • 57. Health Checks HTTP Requests GET: /ready 200 GET: /ready 200
  • 58. Health Checks HTTP Requests GET: /ready 200 GET: /health 200 GET: /ready 200 GET: /health 200
  • 59. Health Checks HTTP Requests GET: /ready 503 GET: /health 503 GET: /ready 200 GET: /health 200
  • 60. Health Checks HTTP Requests GET: /ready 503 GET: /health 503 GET: /ready 200 GET: /health 200 SIGTERM
  • 61. Health Checks HTTP Requests GET: /ready 503 GET: /health 503 GET: /ready 200 GET: /health 200 SIGTERM SIGKILL
  • 62. Health Checks HTTP Requests GET: /ready 503 GET: /health 503 GET: /ready 200 GET: /health 200 SIGTERM SIGKILL
  • 63. Health Checks HTTP Requests GET: /ready 503 GET: /health 503 GET: /ready 200 GET: /health 200
  • 64. GET: /ready 200 GET: /health 200 GET: /ready 200 GET: /health 200 Health Checks HTTP Requests
  • 65. GET: /ready 200 GET: /health 200 GET: /ready 200 GET: /health 200 Health Checks HTTP Requests
  • 66. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) const health = require(‘@cloudnative/health-connect'); let healthcheck = new health.HealthChecker(); const readyPromise = new Promise(function (resolve, _reject) { resolve(); }); let readyCheck = new health.ReadinessCheck("ready", readyPromise); const livePromise = new Promise(function (resolve, _reject) { resolve(); }); let liveCheck = new health.LivenessCheck("live", livePromise); const shutdownPromise = new Promise(function (resolve, _reject) { resolve(); }); let shutdownCheck = new health.ShutdownCheck(“shut”, shutdownProm); healthcheck.registerReadinessCheck(readyCheck); healthcheck.registerLivenessCheck(liveCheck); healthcheck.registerShutdownCheck(shutdownCheck); app.use('/ready', health.ReadinessEndpoint(healthcheck)) app.use('/health', health.LivenessEndpoint(healthcheck)) - Health Checks
  • 67. MonitoringDistributed TracingHealth Checking Module Insights Container Orchestration
  • 75. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) const zipkin = require(‘appmetrics-zipkin’);-
  • 76. MonitoringDistributed TracingHealth Checking Module Insights Container Orchestration
  • 77. GET: /ready 200 GET: /health 200 GET: /metrics GET: /ready 200 GET: /health 200 GET: /metrics HTTP Requests
  • 78. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 add(a, to: b) const prometheus = require(‘appmetrics-prometheus’).attach();-
  • 79.

Editor's Notes

  1. Introduction - We’re going to be talking about Cloud Native Node.js, and how that relates to the CloudNativeJS project. - Cloud-native applications are applications that are specifically designed to leverage cloud technologies. - Background, why Node.js is so popular for building Microservices and Cloud Native applications
  2. Few performance characteristics that are important when building microservices or applications for the cloud - First is IO speed Often building Microservices that are REST API parsing responses Higher the number, the more it can process 1150 what per second?
  3. - Startup Speed This is important for initial deploy, but also for scaling, if you want to spin up new or multiple instances based on the workload Node.js with Express has a subsecond startup before it can handle requests Whereas Spring boot is 14 seconds before it can handle requests These