SlideShare a Scribd company logo
Chris Bailey
STSM, Runtime Technologies
Enterprise Node.js:
Build, Deploy and Scale
: Key Technologies
: Key Technologies
Container
: Key Technologies
Container Orchestration
: Key Technologies
Container Orchestration
Package and Deploy
: Key Technologies
Container Orchestration
MonitoringPackage and Deploy
: Key Technologies
Container Orchestration
Monitoring Distributed TracingPackage and Deploy
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
0
300
600
900
200
0
1,150
IO Speed
• Performance
• Scale
MICROSERVICES: Key Performance Characteristics
0
300
600
900
200
0
1,150
IO Speed
• Performance
• Scale
MICROSERVICES: Key Performance Characteristics
0
300
600
900
200
897
1,150
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
0
300
600
900
200
897
1,150
Startup
• Availability
• Scaling
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
0
300
600
900
200
897
1,150
00.9
Startup
• Availability
• Scaling
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
0
300
600
900
200
897
1,150 13.7
0.9
Startup
• Availability
• Scaling
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
0
300
600
900
200
897
1,150 13.7
0.9
Startup
• Availability
• Scaling
Memory
• Efficiency
• Cost
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
0
300
600
900
200
897
1,150 13.7
0.9 023.6
Startup
• Availability
• Scaling
Memory
• Efficiency
• Cost
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
0
300
600
900
200
897
1,150 13.7
0.9
422
23.6
Startup
• Availability
• Scaling
Memory
• Efficiency
• Cost
MICROSERVICES: Key Performance Characteristics
IO Speed
• Performance
• Scale
Startup
• Availability
• Scaling
Memory
• Efficiency
• Cost
IO Speed
• Performance
• Scale
Release to Release Performance Gains
Startup
• Availability
• Scaling
Memory
• Efficiency
• Cost
3,049
2,914
2,076
1,866
4.x master6.x 8.x
Release to Release Performance Gains
IO Speed
• Performance
• Scale
Startup
• Availability
• Scaling
Memory
• Efficiency
• Cost
50,42052,640
42,500
71,000
3,049
2,914
2,076
1,866
4.x master6.x 8.x 4.x master6.x 8.x
IO Speed
• Performance
• Scale
Release to Release Performance Gains
Startup
• Availability
• Scaling
Memory
• Efficiency
• Cost
50,42052,640
42,500
71,000
89,024
92,84091,47688,9603,049
2,914
2,076
1,866
4.x master6.x 8.x 4.x master6.x 8.x 4.x master6.x 8.x
IO Speed
• Performance
• Scale
Release to Release Performance Gains
Building Scalable
Microservices
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
LoopBack/
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
const appName = require('./../package').name;
const express = require('express');
const log4js = require(‘log4js');
const logger = log4js.getLogger(appName);
const app = express();
app.get('/', function (req, res) {
res.send('Hello World!')
})
const port = process.env.PORT || 3000;
app.listen(port, function(){
logger.info(`Express listening on: ` + port);
});
LoopBack/
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Dockerfile
Dockerfile-tools
.dockerignore
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Dockerfile
Dockerfile-tools
.dockerignore
FROM ibmcom/ibmnode
ENV NODE_ENV production
ENV PORT 3000
WORKDIR "/app"
# Install app dependencies
COPY package.json /app/
RUN cd /app; npm install
# Bundle app source
COPY . /app
EXPOSE 3000
CMD ["npm", "start"]
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Dockerfile
Dockerfile-tools
.dockerignore
node_modules/
npm-debug.log
$ docker build -t <your username>/node-app .

$ docker build -t <your username>/node-app .

$ docker run -p 49160:3000 -d <your username>/node-app
$ docker build -t <your username>/node-app .

$ docker run -p 49160:3000 -d <your username>/node-app
$ docker build -t <your username>/node-app .

$ docker run -p 49160:3000 -d <your username>/node-app
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Dockerfile
Dockerfile-tools
.dockerignore
chart/node-app/Chart.yaml
chart/node-app/templates/deployment.yaml
chart/node-app/templates/hpa.yaml
chart/node-app/templates/service.yaml
chart/node-app/values.yaml
HELM CHARTS
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Dockerfile
Dockerfile-tools
.dockerignore
chart/node-app/Chart.yaml
chart/node-app/templates/deployment.yaml
chart/node-app/templates/hpa.yaml
chart/node-app/templates/service.yaml
chart/node-app/values.yaml
HELM CHARTS
apiVersion: v1
description: A Helm chart for Kubernetes
name: node-app
version: 1.0.0
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Dockerfile
Dockerfile-tools
.dockerignore
chart/node-app/Chart.yaml
chart/node-app/templates/deployment.yaml
chart/node-app/templates/hpa.yaml
chart/node-app/templates/service.yaml
chart/node-app/values.yaml
HELM CHARTS
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: “node-app-deployment"
labels:
chart: “node-app-1.0.0”
spec:
replicas: “5”
revisionHistoryLimit: “1”
template:
metadata:
labels:
app: “node-app-selector"
version: “1.0.0”
spec:
containers:
- name: “node-app”
image: “repository:1.0.0”
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 3000
periodSeconds: 1000
resources:
requests:
cpu: "200m"
memory: "300Mi"
env:
- name: PORT
value : “3000”
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Dockerfile
Dockerfile-tools
.dockerignore
chart/node-app/Chart.yaml
chart/node-app/templates/deployment.yaml
chart/node-app/templates/hpa.yaml
chart/node-app/templates/service.yaml
chart/node-app/values.yaml
HELM CHARTS
apiVersion: autoscaling/v2alpha1
kind: HorizontalPodAutoscaler
metadata:
name: “node-app-hpa-policy"
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1beta1
kind: Deployment
name: “node-app-deployment"
minReplicas: 5
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 70
- type: Resource
resource:
name: memory
targetAverageUtilization: 70
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Dockerfile
Dockerfile-tools
.dockerignore
chart/node-app/Chart.yaml
chart/node-app/templates/deployment.yaml
chart/node-app/templates/hpa.yaml
chart/node-app/templates/service.yaml
chart/node-app/values.yaml
HELM CHARTS
apiVersion: v1
kind: Service
metadata:
name: “node-app“
labels:
chart: “node-app-1.0.0”
spec:
type: NodePort
ports:
- port: 3000
selector:
app: “node-app-selector"
$ helm package ./chart/node-app
$ helm package ./chart/node-app
$ helm install ./node-app-1.0.0.tgz
$ helm package ./chart/node-app
$ helm install ./node-app-1.0.0.tgz
$ helm package ./chart/node-app
$ helm install ./node-app-1.0.0.tgz
Deploying Scalable
Microservices
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Jenkinsfile
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Jenkinsfile
#!groovy
@Library('MicroserviceBuilder') _
microserviceBuilderPipeline {
image = 'node-frontend'
}
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Jenkinsfile
.bluemix/deploy.json
.bluemix/pipeline.yml
.bluemix/toolchain.yml
DevOps
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Jenkinsfile
.bluemix/deploy.json
.bluemix/pipeline.yml
.bluemix/toolchain.yml
stages:
- name: Build Stage
inputs:
- type: git
branch: master
service: ${REPO}
jobs:
- name: Build
type: builder
artifact_dir : ''
- name: Deploy Stage
inputs:
- type: job
stage: Build Stage
job: Build
triggers:
- type: stage
jobs:
- name: Deploy
type: deployer
target:
region_id: ${REGION_ID}
organization: ${ORGANIZATION}
space: ${SPACE}
application: ${APP}
script: |-
#!/bin/bash
DevOps
func add(_ a: Int,
to b: Int) -> Void
{
print(a + b)
}
let a = ”5”
let b = 3
public/*
test/*
server/server.js
package.json
README.md
.gitignore
Jenkinsfile
.bluemix/deploy.json
.bluemix/pipeline.yml
.bluemix/toolchain.yml
version: 0.2
required:
- deploy
- repo
toolchain:
name: node-app
# Github repos
repo:
service_id: hostedgit
parameters:
repo_url: "{{zip_url}}"
repo_name: "{{toolchain.name}}"
type: clone
has_issues: true
enable_traceability: true
# Pipelines
build:
service_id: pipeline
parameters:
name: "{{name}}"
ui-pipeline: true
configuration:
content: $file(pipeline.yml)
env:
DevOps
Understanding
Microservices Performance
PUBLIC NETWORK CLOUD NETWORK
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR

FRONTEND
MICROSERVICES SERVICES
LOAD

BALANCER
PUBLIC NETWORK CLOUD NETWORK
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR

FRONTEND
MICROSERVICES SERVICES
LOAD

BALANCER
PUBLIC NETWORK CLOUD NETWORK
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR

FRONTEND
MICROSERVICES SERVICES
LOAD

BALANCER
PUBLIC NETWORK CLOUD NETWORK
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR

FRONTEND
MICROSERVICES SERVICES
LOAD

BALANCER
PUBLIC NETWORK CLOUD NETWORK
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR

FRONTEND
MICROSERVICES SERVICES
LOAD

BALANCER
PUBLIC NETWORK CLOUD NETWORK
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR

FRONTEND
MICROSERVICES SERVICES
LOAD

BALANCER
PUBLIC NETWORK CLOUD NETWORK
CATALOG
ORDER
INVENTORY
USER
MySQL
MongoDB
SPARK
ELASTICSEARCH
BACKEND FOR

FRONTEND
MICROSERVICES SERVICES
LOAD

BALANCER
BROWSER
TIME
BROWSER
LOAD BALANCER
TIME
BROWSER
LOAD BALANCER
WEB BFF
TIME
BROWSER
LOAD BALANCER
WEB BFF
ORDER SERVICE
TIME
BROWSER
LOAD BALANCER
WEB BFF
ORDER SERVICE
MongoDB
TIME
BROWSER
LOAD BALANCER
WEB BFF
ORDER SERVICE
MongoDB
INVENTORY SERVICE
TIME
MySQL
BROWSER
LOAD BALANCER
WEB BFF
ORDER SERVICE
MongoDB
INVENTORY SERVICE
TIME
MySQL
BROWSER
LOAD BALANCER
WEB BFF
ORDER SERVICE
MongoDB
INVENTORY SERVICE
MongoDB
TIME
• Collects data from each enabled service

• Propagates correlation ID using HTTP headers

• Provides sampling, tracing, and debug capabilities
• Collects microsecond timestamps

• Correlates data in Zipkin server
• Presents data in Zipkin dashboard
Request Tracking: OpenTracing and Zipkin
const zipkin = require(‘appmetrics-zipkin’);
const rest = require(‘rest');
const express = require('express');
const app = express();
app.get('/', (req, res) => {
rest('http://localhost:9000/api')
.then(response => res.send(response.entity))
.catch(err => console.error('Error', err.stack));
});
const port = process.env.PORT || 3000;
app.listen(port, function(){
logger.info(`Express listening on: ` + port);
});
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
• Collects data from each enabled service

• Requires /metrics endpoint providing data

• Provides storage and correlation capabilities
• Provide customisable dashboard

• Integrates with Graphana, Graphite, etc
Microservice Metrics: Prometheus
const zipkin = require(‘appmetrics-zipkin’);
const prometheus = require(‘appmetrics-prometheus’).attach();
const rest = require(‘rest');
const express = require('express');
const app = express();
app.get('/', (req, res) => {
rest('http://localhost:9000/api')
.then(response => res.send(response.entity))
.catch(err => console.error('Error', err.stack));
});
const port = process.env.PORT || 3000;
app.listen(port, function(){
logger.info(`Express listening on: ` + port);
});
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
• ‘appmetrics-dash’ provides self-hosted monitoring

• Inbound and Outbound request performance
• Resource and event loop monitoring
• Request a node-report

• Enable profiling and flame graphs
Deep Analysis: ‘appmetrics-dash’ and Flame Graphs
const zipkin = require(‘appmetrics-zipkin’);
const prometheus = require(‘appmetrics-prometheus’).attach();
const dash = require(‘appmetrics-dash’).attach();
const rest = require(‘rest');
const express = require('express');
const app = express();
app.get('/', (req, res) => {
rest('http://localhost:9000/api')
.then(response => res.send(response.entity))
.catch(err => console.error('Error', err.stack));
});
const port = process.env.PORT || 3000;
app.listen(port, function(){
logger.info(`Express listening on: ` + port);
});
‘appmetrics-dash’
‘appmetrics-dash’
‘appmetrics-dash’
$ yo nodeserver$ yo nodeserver
DEMO
Common
Microservices Approach
Config Fault Tolerance Health Check Health Metrics JWT Propagation
externalize configuration
to improve portability
build robust behavior to
cope with unexpected
failures
common format to
determine service
availability
common REST
endpoints for monitoring
service health
interoperable
authentication and role-
based access control
Config Fault Tolerance Health Check Health Metrics JWT Propagation
externalize configuration
to improve portability
build robust behavior to
cope with unexpected
failures
common format to
determine service
availability
common REST
endpoints for monitoring
service health
interoperable
authentication and role-
based access control
ibm-cloud-env hystrix-js /health appmetrics-prometheus jsonwebtoken
Microservice Builder for Java: From development to production
Development Deployment Runtime
Liberty App Accelerator
MicroProfile Programming Model
Developer CLI
Jenkins Pipeline
Zipkin Distributed Trace Server
Certificate key and trust store
key.jks
trust.jks
IBM Cloud private
Entitled with WAS ND or IBM Cloud PrivateFree
Development Deployment Runtime
Liberty App Accelerator
Developer CLI
Jenkins Pipeline
Zipkin Distributed Trace Server
Certificate key and trust store
key.jks
trust.jks
IBM Cloud private
Entitled with WAS ND or IBM Cloud PrivateFree
Express or Loopback Frameworks
LoopBack
Microservice Builder for Node.js: From development to production
Development Deployment Runtime
Liberty App Accelerator
Jenkins Pipeline
Zipkin Distributed Trace Server
Certificate key and trust store
key.jks
trust.jks
IBM Cloud private
Entitled with WAS ND or IBM Cloud PrivateFree
Express or Loopback Frameworks
LoopBack
Developer CLI (yo nodeserver or IDT)
Microservice Builder for Node.js: From development to production
Development Deployment Runtime
Jenkins Pipeline
Zipkin Distributed Trace Server
Certificate key and trust store
key.jks
trust.jks
IBM Cloud private
Entitled with WAS ND or IBM Cloud PrivateFree
Express or Loopback Frameworks
LoopBack
Developer CLI (yo nodeserver or IDT)
Cloud App Service
Microservice Builder for Node.js: From development to production
Development Deployment Runtime
Cloud App Service
Express or Loopback Frameworks
Developer CLI (yo nodeserver or IDT)
Jenkins Pipeline
Zipkin Distributed Trace Server
Certificate key and trust store
key.jks
trust.jks
IBM Cloud private
Entitled with IBM Advanced Support for Runtimes or IBM Cloud PrivateFree
LoopBack
Microservice Builder for Node.js: From development to production
Enterprise Support
85
IBM Foundation
Support for Runtimes
generator-nodeserver
appmetrics monitoring
generator-swiftserver
swiftmetrics monitoringjavametrics monitoring
IBM Support for Runtimes
Enterprise Support: Node.js Runtime
86
LoopBack
IBM Foundation
Support for Runtimes
generator-nodeserver
appmetrics monitoring
generator-swiftserver
swiftmetrics monitoringjavametrics monitoring
IBM Support for Runtimes
IBM Advanced
Support for Runtime
Frameworks
Enterprise Support: Frameworks
87
LoopBack
IBM Foundation
Support for Runtimes
IBM Advanced
Support for Runtime
Frameworks
generator-nodeserver
appmetrics monitoring
generator-swiftserver
swiftmetrics monitoringjavametrics monitoring
IBM Support for Runtimes
Enterprise Support: Module Ecosystem
developer.ibm.com/node
Ad

Recommended

Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Chris Bailey
 
W-JAX 2011: OSGi with Apache Karaf
W-JAX 2011: OSGi with Apache Karaf
Jerry Preissler
 
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
mfrancis
 
A Hands-on Introduction on Terraform Best Concepts and Best Practices
A Hands-on Introduction on Terraform Best Concepts and Best Practices
Nebulaworks
 
Swift Cloud Workshop - Swift Microservices
Swift Cloud Workshop - Swift Microservices
Chris Bailey
 
An intro to Docker, Terraform, and Amazon ECS
An intro to Docker, Terraform, and Amazon ECS
Yevgeniy Brikman
 
Terraform at Scale - All Day DevOps 2017
Terraform at Scale - All Day DevOps 2017
Jonathon Brouse
 
Kubernetes walkthrough
Kubernetes walkthrough
Sangwon Lee
 
今すぐ始めるCloud Foundry #hackt #hackt_k
今すぐ始めるCloud Foundry #hackt #hackt_k
Toshiaki Maki
 
How to Add Original Library to Android NDK
How to Add Original Library to Android NDK
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
Learn flask in 90mins
Learn flask in 90mins
Larry Cai
 
Automate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon Vienna
Pantheon
 
Antons Kranga Building Agile Infrastructures
Antons Kranga Building Agile Infrastructures
Antons Kranga
 
Terraform modules restructured
Terraform modules restructured
Ami Mahloof
 
kubernetes practice
kubernetes practice
wonyong hwang
 
Meetup - Principles of the kube api and how to extend it
Meetup - Principles of the kube api and how to extend it
Stefan Schimanski
 
Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署
Bo-Yi Wu
 
Terraform Introduction
Terraform Introduction
soniasnowfrog
 
Using Terraform.io (Human Talks Montpellier, Epitech, 2014/09/09)
Using Terraform.io (Human Talks Montpellier, Epitech, 2014/09/09)
Stephane Jourdan
 
Final terraform
Final terraform
Gourav Varma
 
Docker for (Java) Developers
Docker for (Java) Developers
Rafael Benevides
 
How to Make Android Native Application
How to Make Android Native Application
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
Transforming Infrastructure into Code - Importing existing cloud resources u...
Transforming Infrastructure into Code - Importing existing cloud resources u...
Shih Oon Liong
 
Challenges of container configuration
Challenges of container configuration
lutter
 
Composable and streamable Play apps
Composable and streamable Play apps
Yevgeniy Brikman
 
Debasihish da final.ppt
Debasihish da final.ppt
Kalkey
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
biicode
 
Spring Boot Actuator
Spring Boot Actuator
Rowell Belen
 
Node Summit 2018: Cloud Native Node.js
Node Summit 2018: Cloud Native Node.js
Chris Bailey
 
London Node.js User Group - Cloud-native Node.js
London Node.js User Group - Cloud-native Node.js
Bethany Nicolle Griggs
 

More Related Content

What's hot (20)

今すぐ始めるCloud Foundry #hackt #hackt_k
今すぐ始めるCloud Foundry #hackt #hackt_k
Toshiaki Maki
 
How to Add Original Library to Android NDK
How to Add Original Library to Android NDK
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
Learn flask in 90mins
Learn flask in 90mins
Larry Cai
 
Automate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon Vienna
Pantheon
 
Antons Kranga Building Agile Infrastructures
Antons Kranga Building Agile Infrastructures
Antons Kranga
 
Terraform modules restructured
Terraform modules restructured
Ami Mahloof
 
kubernetes practice
kubernetes practice
wonyong hwang
 
Meetup - Principles of the kube api and how to extend it
Meetup - Principles of the kube api and how to extend it
Stefan Schimanski
 
Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署
Bo-Yi Wu
 
Terraform Introduction
Terraform Introduction
soniasnowfrog
 
Using Terraform.io (Human Talks Montpellier, Epitech, 2014/09/09)
Using Terraform.io (Human Talks Montpellier, Epitech, 2014/09/09)
Stephane Jourdan
 
Final terraform
Final terraform
Gourav Varma
 
Docker for (Java) Developers
Docker for (Java) Developers
Rafael Benevides
 
How to Make Android Native Application
How to Make Android Native Application
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
Transforming Infrastructure into Code - Importing existing cloud resources u...
Transforming Infrastructure into Code - Importing existing cloud resources u...
Shih Oon Liong
 
Challenges of container configuration
Challenges of container configuration
lutter
 
Composable and streamable Play apps
Composable and streamable Play apps
Yevgeniy Brikman
 
Debasihish da final.ppt
Debasihish da final.ppt
Kalkey
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
biicode
 
Spring Boot Actuator
Spring Boot Actuator
Rowell Belen
 
今すぐ始めるCloud Foundry #hackt #hackt_k
今すぐ始めるCloud Foundry #hackt #hackt_k
Toshiaki Maki
 
Learn flask in 90mins
Learn flask in 90mins
Larry Cai
 
Automate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon Vienna
Pantheon
 
Antons Kranga Building Agile Infrastructures
Antons Kranga Building Agile Infrastructures
Antons Kranga
 
Terraform modules restructured
Terraform modules restructured
Ami Mahloof
 
Meetup - Principles of the kube api and how to extend it
Meetup - Principles of the kube api and how to extend it
Stefan Schimanski
 
Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署
Bo-Yi Wu
 
Terraform Introduction
Terraform Introduction
soniasnowfrog
 
Using Terraform.io (Human Talks Montpellier, Epitech, 2014/09/09)
Using Terraform.io (Human Talks Montpellier, Epitech, 2014/09/09)
Stephane Jourdan
 
Docker for (Java) Developers
Docker for (Java) Developers
Rafael Benevides
 
Transforming Infrastructure into Code - Importing existing cloud resources u...
Transforming Infrastructure into Code - Importing existing cloud resources u...
Shih Oon Liong
 
Challenges of container configuration
Challenges of container configuration
lutter
 
Composable and streamable Play apps
Composable and streamable Play apps
Yevgeniy Brikman
 
Debasihish da final.ppt
Debasihish da final.ppt
Kalkey
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
biicode
 
Spring Boot Actuator
Spring Boot Actuator
Rowell Belen
 

Similar to IBM Cloud University: Build, Deploy and Scale Node.js Microservices (20)

Node Summit 2018: Cloud Native Node.js
Node Summit 2018: Cloud Native Node.js
Chris Bailey
 
London Node.js User Group - Cloud-native Node.js
London Node.js User Group - Cloud-native Node.js
Bethany Nicolle Griggs
 
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
Chris Bailey
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
Lindsay Holmwood
 
Amazon Web Services and Docker: from developing to production
Amazon Web Services and Docker: from developing to production
Paolo latella
 
Let's play with adf 3.0
Let's play with adf 3.0
Eugenio Romano
 
Weave Your Microservices with Istio
Weave Your Microservices with Istio
All Things Open
 
All Things Open 2019 weave-services-istio
All Things Open 2019 weave-services-istio
Lin Sun
 
Ato2019 weave-services-istio
Ato2019 weave-services-istio
Lin Sun
 
Maxim Salnikov - Service Worker: taking the best from the past experience for...
Maxim Salnikov - Service Worker: taking the best from the past experience for...
Codemotion
 
Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부
Hyun-Mook Choi
 
Cloud-native applications with Java and Kubernetes - Yehor Volkov
Cloud-native applications with Java and Kubernetes - Yehor Volkov
Kuberton
 
StrongLoop Overview
StrongLoop Overview
Shubhra Kar
 
InterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.js
Chris Bailey
 
Real World Lessons on the Pain Points of Node.JS Application
Real World Lessons on the Pain Points of Node.JS Application
Ben Hall
 
Iac d.damyanov 4.pptx
Iac d.damyanov 4.pptx
Dimitar Damyanov
 
Canadian CNCF: "Emissary-ingress 101: An introduction to the CNCF incubation-...
Canadian CNCF: "Emissary-ingress 101: An introduction to the CNCF incubation-...
Daniel Bryant
 
CI/CD and TDD in deploying kamailio
CI/CD and TDD in deploying kamailio
Aleksandar Sosic
 
FullStack London - Cloud Native Node.js
FullStack London - Cloud Native Node.js
Bethany Nicolle Griggs
 
Open shift enterprise 3.1 paas on kubernetes
Open shift enterprise 3.1 paas on kubernetes
Samuel Terburg
 
Node Summit 2018: Cloud Native Node.js
Node Summit 2018: Cloud Native Node.js
Chris Bailey
 
London Node.js User Group - Cloud-native Node.js
London Node.js User Group - Cloud-native Node.js
Bethany Nicolle Griggs
 
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
Chris Bailey
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
Lindsay Holmwood
 
Amazon Web Services and Docker: from developing to production
Amazon Web Services and Docker: from developing to production
Paolo latella
 
Let's play with adf 3.0
Let's play with adf 3.0
Eugenio Romano
 
Weave Your Microservices with Istio
Weave Your Microservices with Istio
All Things Open
 
All Things Open 2019 weave-services-istio
All Things Open 2019 weave-services-istio
Lin Sun
 
Ato2019 weave-services-istio
Ato2019 weave-services-istio
Lin Sun
 
Maxim Salnikov - Service Worker: taking the best from the past experience for...
Maxim Salnikov - Service Worker: taking the best from the past experience for...
Codemotion
 
Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부
Hyun-Mook Choi
 
Cloud-native applications with Java and Kubernetes - Yehor Volkov
Cloud-native applications with Java and Kubernetes - Yehor Volkov
Kuberton
 
StrongLoop Overview
StrongLoop Overview
Shubhra Kar
 
InterConnect2016: WebApp Architectures with Java and Node.js
InterConnect2016: WebApp Architectures with Java and Node.js
Chris Bailey
 
Real World Lessons on the Pain Points of Node.JS Application
Real World Lessons on the Pain Points of Node.JS Application
Ben Hall
 
Canadian CNCF: "Emissary-ingress 101: An introduction to the CNCF incubation-...
Canadian CNCF: "Emissary-ingress 101: An introduction to the CNCF incubation-...
Daniel Bryant
 
CI/CD and TDD in deploying kamailio
CI/CD and TDD in deploying kamailio
Aleksandar Sosic
 
FullStack London - Cloud Native Node.js
FullStack London - Cloud Native Node.js
Bethany Nicolle Griggs
 
Open shift enterprise 3.1 paas on kubernetes
Open shift enterprise 3.1 paas on kubernetes
Samuel Terburg
 
Ad

More from Chris Bailey (20)

NodeJS Interactive 2019: FaaS meets Frameworks
NodeJS Interactive 2019: FaaS meets Frameworks
Chris Bailey
 
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
Chris Bailey
 
FaaS Meets Java EE: Developing Cloud Native Applications at Speed
FaaS Meets Java EE: Developing Cloud Native Applications at Speed
Chris Bailey
 
AltConf 2019: Server-Side Swift State of the Union
AltConf 2019: Server-Side Swift State of the Union
Chris Bailey
 
Server-side Swift with Swagger
Server-side Swift with Swagger
Chris Bailey
 
Index - BFFs vs GraphQL
Index - BFFs vs GraphQL
Chris Bailey
 
Swift Cloud Workshop - Codable, the key to Fullstack Swift
Swift Cloud Workshop - Codable, the key to Fullstack Swift
Chris Bailey
 
Try!Swift India 2017: All you need is Swift
Try!Swift India 2017: All you need is Swift
Chris Bailey
 
Swift Summit 2017: Server Swift State of the Union
Swift Summit 2017: Server Swift State of the Union
Chris Bailey
 
IBM Cloud University: Java, Node.js and Swift
IBM Cloud University: Java, Node.js and Swift
Chris Bailey
 
FrenchKit 2017: Server(less) Swift
FrenchKit 2017: Server(less) Swift
Chris Bailey
 
AltConf 2017: Full Stack Swift in 30 Minutes
AltConf 2017: Full Stack Swift in 30 Minutes
Chris Bailey
 
InterConnect: Server Side Swift for Java Developers
InterConnect: Server Side Swift for Java Developers
Chris Bailey
 
InterConnect: Java, Node.js and Swift - Which, Why and When
InterConnect: Java, Node.js and Swift - Which, Why and When
Chris Bailey
 
Playgrounds: Mobile + Swift = BFF
Playgrounds: Mobile + Swift = BFF
Chris Bailey
 
Swift Summit: Pushing the boundaries of Swift to the Server
Swift Summit: Pushing the boundaries of Swift to the Server
Chris Bailey
 
O'Reilly Software Architecture Conf: Cloud Economics
O'Reilly Software Architecture Conf: Cloud Economics
Chris Bailey
 
FrenchKit: End to End Application Development with Swift
FrenchKit: End to End Application Development with Swift
Chris Bailey
 
Node Summit 2016: Web App Architectures
Node Summit 2016: Web App Architectures
Chris Bailey
 
Cloud Economics
Cloud Economics
Chris Bailey
 
NodeJS Interactive 2019: FaaS meets Frameworks
NodeJS Interactive 2019: FaaS meets Frameworks
Chris Bailey
 
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
Chris Bailey
 
FaaS Meets Java EE: Developing Cloud Native Applications at Speed
FaaS Meets Java EE: Developing Cloud Native Applications at Speed
Chris Bailey
 
AltConf 2019: Server-Side Swift State of the Union
AltConf 2019: Server-Side Swift State of the Union
Chris Bailey
 
Server-side Swift with Swagger
Server-side Swift with Swagger
Chris Bailey
 
Index - BFFs vs GraphQL
Index - BFFs vs GraphQL
Chris Bailey
 
Swift Cloud Workshop - Codable, the key to Fullstack Swift
Swift Cloud Workshop - Codable, the key to Fullstack Swift
Chris Bailey
 
Try!Swift India 2017: All you need is Swift
Try!Swift India 2017: All you need is Swift
Chris Bailey
 
Swift Summit 2017: Server Swift State of the Union
Swift Summit 2017: Server Swift State of the Union
Chris Bailey
 
IBM Cloud University: Java, Node.js and Swift
IBM Cloud University: Java, Node.js and Swift
Chris Bailey
 
FrenchKit 2017: Server(less) Swift
FrenchKit 2017: Server(less) Swift
Chris Bailey
 
AltConf 2017: Full Stack Swift in 30 Minutes
AltConf 2017: Full Stack Swift in 30 Minutes
Chris Bailey
 
InterConnect: Server Side Swift for Java Developers
InterConnect: Server Side Swift for Java Developers
Chris Bailey
 
InterConnect: Java, Node.js and Swift - Which, Why and When
InterConnect: Java, Node.js and Swift - Which, Why and When
Chris Bailey
 
Playgrounds: Mobile + Swift = BFF
Playgrounds: Mobile + Swift = BFF
Chris Bailey
 
Swift Summit: Pushing the boundaries of Swift to the Server
Swift Summit: Pushing the boundaries of Swift to the Server
Chris Bailey
 
O'Reilly Software Architecture Conf: Cloud Economics
O'Reilly Software Architecture Conf: Cloud Economics
Chris Bailey
 
FrenchKit: End to End Application Development with Swift
FrenchKit: End to End Application Development with Swift
Chris Bailey
 
Node Summit 2016: Web App Architectures
Node Summit 2016: Web App Architectures
Chris Bailey
 
Ad

Recently uploaded (20)

arctitecture application system design os dsa
arctitecture application system design os dsa
za241967
 
Building Geospatial Data Warehouse for GIS by GIS with FME
Building Geospatial Data Warehouse for GIS by GIS with FME
Safe Software
 
Humans vs AI Call Agents - Qcall.ai's Special Report
Humans vs AI Call Agents - Qcall.ai's Special Report
Udit Goenka
 
declaration of Variables and constants.pptx
declaration of Variables and constants.pptx
meemee7378
 
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
Key Challenges in Troubleshooting Customer On-Premise Applications
Key Challenges in Troubleshooting Customer On-Premise Applications
Tier1 app
 
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
ERP Systems in the UAE: Driving Business Transformation with Smart Solutions
ERP Systems in the UAE: Driving Business Transformation with Smart Solutions
dheeodoo
 
Sysinfo OST to PST Converter Infographic
Sysinfo OST to PST Converter Infographic
SysInfo Tools
 
Why Every Growing Business Needs a Staff Augmentation Company IN USA.pdf
Why Every Growing Business Needs a Staff Augmentation Company IN USA.pdf
mary rojas
 
A Guide to Telemedicine Software Development.pdf
A Guide to Telemedicine Software Development.pdf
Olivero Bozzelli
 
Sap basis role in public cloud in s/4hana.pptx
Sap basis role in public cloud in s/4hana.pptx
htmlprogrammer987
 
Simplify Insurance Regulations with Compliance Management Software
Simplify Insurance Regulations with Compliance Management Software
Insurance Tech Services
 
How Automation in Claims Handling Streamlined Operations
How Automation in Claims Handling Streamlined Operations
Insurance Tech Services
 
Canva Pro Crack Free Download 2025-FREE LATEST
Canva Pro Crack Free Download 2025-FREE LATEST
grete1122g
 
Complete WordPress Programming Guidance Book
Complete WordPress Programming Guidance Book
Shabista Imam
 
University Campus Navigation for All - Peak of Data & AI
University Campus Navigation for All - Peak of Data & AI
Safe Software
 
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
IFI Techsolutions
 
Simplify Task, Team, and Project Management with Orangescrum Work
Simplify Task, Team, and Project Management with Orangescrum Work
Orangescrum
 
AI for PV: Development and Governance for a Regulated Industry
AI for PV: Development and Governance for a Regulated Industry
Biologit
 
arctitecture application system design os dsa
arctitecture application system design os dsa
za241967
 
Building Geospatial Data Warehouse for GIS by GIS with FME
Building Geospatial Data Warehouse for GIS by GIS with FME
Safe Software
 
Humans vs AI Call Agents - Qcall.ai's Special Report
Humans vs AI Call Agents - Qcall.ai's Special Report
Udit Goenka
 
declaration of Variables and constants.pptx
declaration of Variables and constants.pptx
meemee7378
 
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
Key Challenges in Troubleshooting Customer On-Premise Applications
Key Challenges in Troubleshooting Customer On-Premise Applications
Tier1 app
 
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
ERP Systems in the UAE: Driving Business Transformation with Smart Solutions
ERP Systems in the UAE: Driving Business Transformation with Smart Solutions
dheeodoo
 
Sysinfo OST to PST Converter Infographic
Sysinfo OST to PST Converter Infographic
SysInfo Tools
 
Why Every Growing Business Needs a Staff Augmentation Company IN USA.pdf
Why Every Growing Business Needs a Staff Augmentation Company IN USA.pdf
mary rojas
 
A Guide to Telemedicine Software Development.pdf
A Guide to Telemedicine Software Development.pdf
Olivero Bozzelli
 
Sap basis role in public cloud in s/4hana.pptx
Sap basis role in public cloud in s/4hana.pptx
htmlprogrammer987
 
Simplify Insurance Regulations with Compliance Management Software
Simplify Insurance Regulations with Compliance Management Software
Insurance Tech Services
 
How Automation in Claims Handling Streamlined Operations
How Automation in Claims Handling Streamlined Operations
Insurance Tech Services
 
Canva Pro Crack Free Download 2025-FREE LATEST
Canva Pro Crack Free Download 2025-FREE LATEST
grete1122g
 
Complete WordPress Programming Guidance Book
Complete WordPress Programming Guidance Book
Shabista Imam
 
University Campus Navigation for All - Peak of Data & AI
University Campus Navigation for All - Peak of Data & AI
Safe Software
 
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
IFI Techsolutions
 
Simplify Task, Team, and Project Management with Orangescrum Work
Simplify Task, Team, and Project Management with Orangescrum Work
Orangescrum
 
AI for PV: Development and Governance for a Regulated Industry
AI for PV: Development and Governance for a Regulated Industry
Biologit
 

IBM Cloud University: Build, Deploy and Scale Node.js Microservices

  • 1. Chris Bailey STSM, Runtime Technologies Enterprise Node.js: Build, Deploy and Scale
  • 5. : Key Technologies Container Orchestration Package and Deploy
  • 6. : Key Technologies Container Orchestration MonitoringPackage and Deploy
  • 7. : Key Technologies Container Orchestration Monitoring Distributed TracingPackage and Deploy
  • 8. MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 9. 0 300 600 900 200 0 1,150 IO Speed • Performance • Scale MICROSERVICES: Key Performance Characteristics
  • 10. 0 300 600 900 200 0 1,150 IO Speed • Performance • Scale MICROSERVICES: Key Performance Characteristics
  • 11. 0 300 600 900 200 897 1,150 MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 12. 0 300 600 900 200 897 1,150 Startup • Availability • Scaling MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 13. 0 300 600 900 200 897 1,150 00.9 Startup • Availability • Scaling MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 14. 0 300 600 900 200 897 1,150 13.7 0.9 Startup • Availability • Scaling MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 15. 0 300 600 900 200 897 1,150 13.7 0.9 Startup • Availability • Scaling Memory • Efficiency • Cost MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 16. 0 300 600 900 200 897 1,150 13.7 0.9 023.6 Startup • Availability • Scaling Memory • Efficiency • Cost MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 17. 0 300 600 900 200 897 1,150 13.7 0.9 422 23.6 Startup • Availability • Scaling Memory • Efficiency • Cost MICROSERVICES: Key Performance Characteristics IO Speed • Performance • Scale
  • 18. Startup • Availability • Scaling Memory • Efficiency • Cost IO Speed • Performance • Scale Release to Release Performance Gains
  • 19. Startup • Availability • Scaling Memory • Efficiency • Cost 3,049 2,914 2,076 1,866 4.x master6.x 8.x Release to Release Performance Gains IO Speed • Performance • Scale
  • 20. Startup • Availability • Scaling Memory • Efficiency • Cost 50,42052,640 42,500 71,000 3,049 2,914 2,076 1,866 4.x master6.x 8.x 4.x master6.x 8.x IO Speed • Performance • Scale Release to Release Performance Gains
  • 21. Startup • Availability • Scaling Memory • Efficiency • Cost 50,42052,640 42,500 71,000 89,024 92,84091,47688,9603,049 2,914 2,076 1,866 4.x master6.x 8.x 4.x master6.x 8.x 4.x master6.x 8.x IO Speed • Performance • Scale Release to Release Performance Gains
  • 23. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore LoopBack/
  • 24. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore const appName = require('./../package').name; const express = require('express'); const log4js = require(‘log4js'); const logger = log4js.getLogger(appName); const app = express(); app.get('/', function (req, res) { res.send('Hello World!') }) const port = process.env.PORT || 3000; app.listen(port, function(){ logger.info(`Express listening on: ` + port); }); LoopBack/
  • 25. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Dockerfile Dockerfile-tools .dockerignore
  • 26. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Dockerfile Dockerfile-tools .dockerignore FROM ibmcom/ibmnode ENV NODE_ENV production ENV PORT 3000 WORKDIR "/app" # Install app dependencies COPY package.json /app/ RUN cd /app; npm install # Bundle app source COPY . /app EXPOSE 3000 CMD ["npm", "start"]
  • 27. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Dockerfile Dockerfile-tools .dockerignore node_modules/ npm-debug.log
  • 28. $ docker build -t <your username>/node-app .

  • 29. $ docker build -t <your username>/node-app .
 $ docker run -p 49160:3000 -d <your username>/node-app
  • 30. $ docker build -t <your username>/node-app .
 $ docker run -p 49160:3000 -d <your username>/node-app
  • 31. $ docker build -t <your username>/node-app .
 $ docker run -p 49160:3000 -d <your username>/node-app
  • 32. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Dockerfile Dockerfile-tools .dockerignore chart/node-app/Chart.yaml chart/node-app/templates/deployment.yaml chart/node-app/templates/hpa.yaml chart/node-app/templates/service.yaml chart/node-app/values.yaml HELM CHARTS
  • 33. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Dockerfile Dockerfile-tools .dockerignore chart/node-app/Chart.yaml chart/node-app/templates/deployment.yaml chart/node-app/templates/hpa.yaml chart/node-app/templates/service.yaml chart/node-app/values.yaml HELM CHARTS apiVersion: v1 description: A Helm chart for Kubernetes name: node-app version: 1.0.0
  • 34. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Dockerfile Dockerfile-tools .dockerignore chart/node-app/Chart.yaml chart/node-app/templates/deployment.yaml chart/node-app/templates/hpa.yaml chart/node-app/templates/service.yaml chart/node-app/values.yaml HELM CHARTS apiVersion: extensions/v1beta1 kind: Deployment metadata: name: “node-app-deployment" labels: chart: “node-app-1.0.0” spec: replicas: “5” revisionHistoryLimit: “1” template: metadata: labels: app: “node-app-selector" version: “1.0.0” spec: containers: - name: “node-app” image: “repository:1.0.0” imagePullPolicy: Always livenessProbe: httpGet: path: /health port: 3000 initialDelaySeconds: 3000 periodSeconds: 1000 resources: requests: cpu: "200m" memory: "300Mi" env: - name: PORT value : “3000”
  • 35. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Dockerfile Dockerfile-tools .dockerignore chart/node-app/Chart.yaml chart/node-app/templates/deployment.yaml chart/node-app/templates/hpa.yaml chart/node-app/templates/service.yaml chart/node-app/values.yaml HELM CHARTS apiVersion: autoscaling/v2alpha1 kind: HorizontalPodAutoscaler metadata: name: “node-app-hpa-policy" namespace: default spec: scaleTargetRef: apiVersion: apps/v1beta1 kind: Deployment name: “node-app-deployment" minReplicas: 5 maxReplicas: 10 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 70 - type: Resource resource: name: memory targetAverageUtilization: 70
  • 36. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Dockerfile Dockerfile-tools .dockerignore chart/node-app/Chart.yaml chart/node-app/templates/deployment.yaml chart/node-app/templates/hpa.yaml chart/node-app/templates/service.yaml chart/node-app/values.yaml HELM CHARTS apiVersion: v1 kind: Service metadata: name: “node-app“ labels: chart: “node-app-1.0.0” spec: type: NodePort ports: - port: 3000 selector: app: “node-app-selector"
  • 37. $ helm package ./chart/node-app
  • 38. $ helm package ./chart/node-app $ helm install ./node-app-1.0.0.tgz
  • 39. $ helm package ./chart/node-app $ helm install ./node-app-1.0.0.tgz
  • 40. $ helm package ./chart/node-app $ helm install ./node-app-1.0.0.tgz
  • 42. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Jenkinsfile
  • 43. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Jenkinsfile #!groovy @Library('MicroserviceBuilder') _ microserviceBuilderPipeline { image = 'node-frontend' }
  • 44. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Jenkinsfile .bluemix/deploy.json .bluemix/pipeline.yml .bluemix/toolchain.yml DevOps
  • 45. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Jenkinsfile .bluemix/deploy.json .bluemix/pipeline.yml .bluemix/toolchain.yml stages: - name: Build Stage inputs: - type: git branch: master service: ${REPO} jobs: - name: Build type: builder artifact_dir : '' - name: Deploy Stage inputs: - type: job stage: Build Stage job: Build triggers: - type: stage jobs: - name: Deploy type: deployer target: region_id: ${REGION_ID} organization: ${ORGANIZATION} space: ${SPACE} application: ${APP} script: |- #!/bin/bash DevOps
  • 46. func add(_ a: Int, to b: Int) -> Void { print(a + b) } let a = ”5” let b = 3 public/* test/* server/server.js package.json README.md .gitignore Jenkinsfile .bluemix/deploy.json .bluemix/pipeline.yml .bluemix/toolchain.yml version: 0.2 required: - deploy - repo toolchain: name: node-app # Github repos repo: service_id: hostedgit parameters: repo_url: "{{zip_url}}" repo_name: "{{toolchain.name}}" type: clone has_issues: true enable_traceability: true # Pipelines build: service_id: pipeline parameters: name: "{{name}}" ui-pipeline: true configuration: content: $file(pipeline.yml) env: DevOps
  • 48. PUBLIC NETWORK CLOUD NETWORK CATALOG ORDER INVENTORY USER MySQL MongoDB SPARK ELASTICSEARCH BACKEND FOR
 FRONTEND MICROSERVICES SERVICES LOAD
 BALANCER
  • 49. PUBLIC NETWORK CLOUD NETWORK CATALOG ORDER INVENTORY USER MySQL MongoDB SPARK ELASTICSEARCH BACKEND FOR
 FRONTEND MICROSERVICES SERVICES LOAD
 BALANCER
  • 50. PUBLIC NETWORK CLOUD NETWORK CATALOG ORDER INVENTORY USER MySQL MongoDB SPARK ELASTICSEARCH BACKEND FOR
 FRONTEND MICROSERVICES SERVICES LOAD
 BALANCER
  • 51. PUBLIC NETWORK CLOUD NETWORK CATALOG ORDER INVENTORY USER MySQL MongoDB SPARK ELASTICSEARCH BACKEND FOR
 FRONTEND MICROSERVICES SERVICES LOAD
 BALANCER
  • 52. PUBLIC NETWORK CLOUD NETWORK CATALOG ORDER INVENTORY USER MySQL MongoDB SPARK ELASTICSEARCH BACKEND FOR
 FRONTEND MICROSERVICES SERVICES LOAD
 BALANCER
  • 53. PUBLIC NETWORK CLOUD NETWORK CATALOG ORDER INVENTORY USER MySQL MongoDB SPARK ELASTICSEARCH BACKEND FOR
 FRONTEND MICROSERVICES SERVICES LOAD
 BALANCER
  • 54. PUBLIC NETWORK CLOUD NETWORK CATALOG ORDER INVENTORY USER MySQL MongoDB SPARK ELASTICSEARCH BACKEND FOR
 FRONTEND MICROSERVICES SERVICES LOAD
 BALANCER
  • 59. BROWSER LOAD BALANCER WEB BFF ORDER SERVICE MongoDB TIME
  • 60. BROWSER LOAD BALANCER WEB BFF ORDER SERVICE MongoDB INVENTORY SERVICE TIME
  • 61. MySQL BROWSER LOAD BALANCER WEB BFF ORDER SERVICE MongoDB INVENTORY SERVICE TIME
  • 62. MySQL BROWSER LOAD BALANCER WEB BFF ORDER SERVICE MongoDB INVENTORY SERVICE MongoDB TIME
  • 63. • Collects data from each enabled service
 • Propagates correlation ID using HTTP headers
 • Provides sampling, tracing, and debug capabilities • Collects microsecond timestamps
 • Correlates data in Zipkin server • Presents data in Zipkin dashboard Request Tracking: OpenTracing and Zipkin
  • 64. const zipkin = require(‘appmetrics-zipkin’); const rest = require(‘rest'); const express = require('express'); const app = express(); app.get('/', (req, res) => { rest('http://localhost:9000/api') .then(response => res.send(response.entity)) .catch(err => console.error('Error', err.stack)); }); const port = process.env.PORT || 3000; app.listen(port, function(){ logger.info(`Express listening on: ` + port); });
  • 66. • Collects data from each enabled service
 • Requires /metrics endpoint providing data
 • Provides storage and correlation capabilities • Provide customisable dashboard
 • Integrates with Graphana, Graphite, etc Microservice Metrics: Prometheus
  • 67. const zipkin = require(‘appmetrics-zipkin’); const prometheus = require(‘appmetrics-prometheus’).attach(); const rest = require(‘rest'); const express = require('express'); const app = express(); app.get('/', (req, res) => { rest('http://localhost:9000/api') .then(response => res.send(response.entity)) .catch(err => console.error('Error', err.stack)); }); const port = process.env.PORT || 3000; app.listen(port, function(){ logger.info(`Express listening on: ` + port); });
  • 70. • ‘appmetrics-dash’ provides self-hosted monitoring
 • Inbound and Outbound request performance • Resource and event loop monitoring • Request a node-report
 • Enable profiling and flame graphs Deep Analysis: ‘appmetrics-dash’ and Flame Graphs
  • 71. const zipkin = require(‘appmetrics-zipkin’); const prometheus = require(‘appmetrics-prometheus’).attach(); const dash = require(‘appmetrics-dash’).attach(); const rest = require(‘rest'); const express = require('express'); const app = express(); app.get('/', (req, res) => { rest('http://localhost:9000/api') .then(response => res.send(response.entity)) .catch(err => console.error('Error', err.stack)); }); const port = process.env.PORT || 3000; app.listen(port, function(){ logger.info(`Express listening on: ` + port); }); ‘appmetrics-dash’
  • 74. $ yo nodeserver$ yo nodeserver
  • 75. DEMO
  • 77. Config Fault Tolerance Health Check Health Metrics JWT Propagation externalize configuration to improve portability build robust behavior to cope with unexpected failures common format to determine service availability common REST endpoints for monitoring service health interoperable authentication and role- based access control
  • 78. Config Fault Tolerance Health Check Health Metrics JWT Propagation externalize configuration to improve portability build robust behavior to cope with unexpected failures common format to determine service availability common REST endpoints for monitoring service health interoperable authentication and role- based access control ibm-cloud-env hystrix-js /health appmetrics-prometheus jsonwebtoken
  • 79. Microservice Builder for Java: From development to production Development Deployment Runtime Liberty App Accelerator MicroProfile Programming Model Developer CLI Jenkins Pipeline Zipkin Distributed Trace Server Certificate key and trust store key.jks trust.jks IBM Cloud private Entitled with WAS ND or IBM Cloud PrivateFree
  • 80. Development Deployment Runtime Liberty App Accelerator Developer CLI Jenkins Pipeline Zipkin Distributed Trace Server Certificate key and trust store key.jks trust.jks IBM Cloud private Entitled with WAS ND or IBM Cloud PrivateFree Express or Loopback Frameworks LoopBack Microservice Builder for Node.js: From development to production
  • 81. Development Deployment Runtime Liberty App Accelerator Jenkins Pipeline Zipkin Distributed Trace Server Certificate key and trust store key.jks trust.jks IBM Cloud private Entitled with WAS ND or IBM Cloud PrivateFree Express or Loopback Frameworks LoopBack Developer CLI (yo nodeserver or IDT) Microservice Builder for Node.js: From development to production
  • 82. Development Deployment Runtime Jenkins Pipeline Zipkin Distributed Trace Server Certificate key and trust store key.jks trust.jks IBM Cloud private Entitled with WAS ND or IBM Cloud PrivateFree Express or Loopback Frameworks LoopBack Developer CLI (yo nodeserver or IDT) Cloud App Service Microservice Builder for Node.js: From development to production
  • 83. Development Deployment Runtime Cloud App Service Express or Loopback Frameworks Developer CLI (yo nodeserver or IDT) Jenkins Pipeline Zipkin Distributed Trace Server Certificate key and trust store key.jks trust.jks IBM Cloud private Entitled with IBM Advanced Support for Runtimes or IBM Cloud PrivateFree LoopBack Microservice Builder for Node.js: From development to production
  • 85. 85 IBM Foundation Support for Runtimes generator-nodeserver appmetrics monitoring generator-swiftserver swiftmetrics monitoringjavametrics monitoring IBM Support for Runtimes Enterprise Support: Node.js Runtime
  • 86. 86 LoopBack IBM Foundation Support for Runtimes generator-nodeserver appmetrics monitoring generator-swiftserver swiftmetrics monitoringjavametrics monitoring IBM Support for Runtimes IBM Advanced Support for Runtime Frameworks Enterprise Support: Frameworks
  • 87. 87 LoopBack IBM Foundation Support for Runtimes IBM Advanced Support for Runtime Frameworks generator-nodeserver appmetrics monitoring generator-swiftserver swiftmetrics monitoringjavametrics monitoring IBM Support for Runtimes Enterprise Support: Module Ecosystem