SlideShare a Scribd company logo
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
London Node.js User Group - Cloud-native Node.js
London Node.js User Group - Cloud-native Node.js
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();-
London Node.js User Group - Cloud-native Node.js
Tutorial: https://github.com/CloudNativeJS/Tutorial
node-js.slack.com
#cloudnative
github.com/
CloudNativeJS
CloudNativeJS.io @cloudnativejs

More Related Content

PDF
Node Summit 2018: Cloud Native Node.js
PDF
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
PDF
FullStack London - Cloud Native Node.js
PDF
今すぐ始めるCloud Foundry #hackt #hackt_k
PDF
Cloud Foundry Summit 2015: 10 common errors when pushing apps to cloud foundry
PDF
BOSH / CF Deployment in modern ways #cf_tokyo
PDF
Play on Docker
PDF
Hosting Your Own OTA Update Service
Node Summit 2018: Cloud Native Node.js
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
FullStack London - Cloud Native Node.js
今すぐ始めるCloud Foundry #hackt #hackt_k
Cloud Foundry Summit 2015: 10 common errors when pushing apps to cloud foundry
BOSH / CF Deployment in modern ways #cf_tokyo
Play on Docker
Hosting Your Own OTA Update Service

What's hot (20)

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

Similar to London Node.js User Group - Cloud-native Node.js (20)

PDF
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
PDF
MeaNstack on Docker
PDF
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
PPTX
Pluralsight Webinar: Simplify Your Project Builds with Docker
PDF
Deploying Symfony | symfony.cat
PDF
OSDC.no 2015 introduction to node.js workshop
PDF
DCSF19 Dockerfile Best Practices
PDF
DevOps Workflow: A Tutorial on Linux Containers
PPTX
Openshift Presentation ppt compare with VM
PPTX
#dddsw - Modernizing .NET Apps with Docker
PDF
How to create your own hack environment
PPTX
#SDD2017 - Modernizing .NET Apps with Docker
PDF
DCEU 18: Dockerfile Best Practices
PDF
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
PDF
Automação do físico ao NetSecDevOps
PDF
Modernizing .NET Apps
PPTX
PDF
Minimum Viable Docker: our journey towards orchestration
PDF
Remote Config REST API and Versioning
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
MeaNstack on Docker
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Pluralsight Webinar: Simplify Your Project Builds with Docker
Deploying Symfony | symfony.cat
OSDC.no 2015 introduction to node.js workshop
DCSF19 Dockerfile Best Practices
DevOps Workflow: A Tutorial on Linux Containers
Openshift Presentation ppt compare with VM
#dddsw - Modernizing .NET Apps with Docker
How to create your own hack environment
#SDD2017 - Modernizing .NET Apps with Docker
DCEU 18: Dockerfile Best Practices
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
Automação do físico ao NetSecDevOps
Modernizing .NET Apps
Minimum Viable Docker: our journey towards orchestration
Remote Config REST API and Versioning
Ad

Recently uploaded (20)

DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
KodekX | Application Modernization Development
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Machine learning based COVID-19 study performance prediction
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
A Presentation on Artificial Intelligence
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Encapsulation theory and applications.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
The AUB Centre for AI in Media Proposal.docx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
KodekX | Application Modernization Development
Dropbox Q2 2025 Financial Results & Investor Presentation
Unlocking AI with Model Context Protocol (MCP)
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
MYSQL Presentation for SQL database connectivity
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
NewMind AI Weekly Chronicles - August'25 Week I
Machine learning based COVID-19 study performance prediction
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
A Presentation on Artificial Intelligence
The Rise and Fall of 3GPP – Time for a Sabbatical?
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Network Security Unit 5.pdf for BCA BBA.
Reach Out and Touch Someone: Haptics and Empathic Computing
Encapsulation theory and applications.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf

London Node.js User Group - Cloud-native Node.js

  • 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
  • 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();-

Editor's Notes

  • #2: 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
  • #3: 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?
  • #7: - 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