SlideShare a Scribd company logo
1 of 36
hello!
Nikolay Valchev
Managing Distributed Cloud Native
Applications Made Easy
Spring Music 2.0
Spring Music inspired sample
✘ web – songs and albums
✘ news provider
✘ external news provider
spring-music
Lifecycle
Management
Unit
Version 1.0.0
news
provider
web
DB
service
instance
external news
provider
What are the Challenges?
✘ Develop…
✘ Deployment-specific configuration…
✘ Package and deliver…
✘ Deploy…
✘ Update…
✘ …with no downtime…
✘ Undeploy…
Application
DevOps
Team (~ 2
Pizzas)
Other Service
Business capability
Lifecycle
Management Unit
Version x.y.z
Java
(heavy data
processing)
“BACKEND”
Node.Js
(heavy data
processing)
”FRONTEND”
DB service
instance
“PERSISTE
NCE”
Geo-spatial
Service
“EXTERNAL
RESOURCE“
Multi-Target Application (MTA)
Business capability
Lifecycle
Management Unit
Version x.y.z
Java
(heavy data
processing)
“BACKEND”
Node.Js
(user request
processing)
”FRONTEND”
DB service
instance
“PERSISTEN
CE”
Geo-spatial
service
“EXTERNAL
RESOURCE“
MTA: my-app
Module
type
Resource
type
Module
type
Resource
type
Version x.y.z
MTA Descriptors
✘ YAML files
extends
MTA
deployment
descriptor
MTA
extension
descriptor
*1
extends
MTA Descriptors
✘ YAML files
✘ MTA Deployment Descriptor (mtad.yaml)
extends
MTA
deployment
descriptor
MTA
extension
descriptor
*1
extends
MTA Descriptors
✘ YAML files
✘ MTA Deployment Descriptor (mtad.yaml)
✘ MTA Extension Descriptor (*.mtaext)
extends
MTA
deployment
descriptor
MTA
extension
descriptor
*1
extends
MTA Deployment Descriptor
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
spring-music
Lifecycle
Management
Unit
Version 1.0.0
news
provider
web
DB
service
instance
external
news
provider
MTA Deployment Descriptor
MTA header
✘ spec version
✘ app ID
✘ version
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Deployment Descriptor
Modules
✘ name
✘ type
✘ path
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Deployment Descriptor
Modules
✘ buildpack
✘ route
✘ other parameters
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Deployment Descriptor
Modules
✘ properties/env
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Deployment Descriptor
Modules
✘ expose config
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Deployment Descriptor
Modules
✘ placeholders like
${default-url}
resolved automatically
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Deployment Descriptor
Modules
✘ inject config via
reference notation
like ~{url}
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Deployment Descriptor
Resources
✘ name
✘ type
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Deployment Descriptor
Resources
✘ service label
✘ plan
✘ other parameters
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Deployment Descriptor
Resources
✘ some parameters
unknown on design
time
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Deployment Descriptor
Modules
✘ service bindings
_schema-version: 3
ID: org.cf.samples.spring-music
version: 1.0.0
modules:
- name: spring-music-web
type: java.tomcat
path: build/libs/spring-music.jar
requires:
- name: news-provider
properties:
NEWS_URL: ~{url}
- name: spring-music-db
- name: spring-music-news-external
parameters:
buildpack: java_buildpack
properties:
POPULATE_ALBUM_REPOSITORY: true
- name: spring-music-news
type: javascript.nodejs
path: spring-music-news/
provides:
- name: news-provider
properties:
url: ${default-url}/news
resources:
- name: spring-music-db
type: managed-service
parameters:
service: postgresql
service-plan: v9.4-container
- name: spring-music-news-external
type: user-provided-service
parameters:
config:
url:
MTA Extension Descriptor
Deployment context dependent
Add property values and parameters
_schema-version: 3
ID: cf.samples.spring-music.prod-config
extends: cf.samples.spring.music
modules:
- name: spring-music-web
parameters:
memory: 1G
instances: 2
properties:
POPULATE_ALBUM_REPOSITORY: false
- name: spring-music-news
parameters:
memory: 128M
resources:
- name: spring-music-news-external
parameters:
config:
url: https://news-external.my.domain/news
What is an MTA Archive (MTAR)?
✘ Container, compliant with the
JAR specification
✘ Contains modules…
… a manifest and the MTA
deployment descriptor
✘ Used for distribution of the
packaged app
MTA
deployment
descriptor
Java
WAR
Node.Js
Code
…
...
CF Deploy Service
CF CLI plugin to deploy MTA with
a single operation
MTA
deployment
descriptor
MTA archive
module
MTA
extension
descriptor
CF CLI
operator
Cloud Foundry
Cloud
Controller
CF Deploy Service
PostgreSQL
database
target
state
workflows
cf deploy
current
state
CF Deploy Service
MTA
deployment
descriptor
MTA archive
module
MTA
extension
descriptor
CF CLI
operator
Cloud Foundry
Cloud
Controller
CF Deploy Service
PostgreSQL
database
target
state
workflows
cf deploy
current
state
”Server” app with the goal to
bring the app to desired state
Demo
Supported Operations
✘ Deploy (incl. from Git, in future from directory)
✘ Update (incremental)
✘ Blue-green deploy
✘ Cross-MTA configuration
Enterprise Qualities
✘ Deterministic deployment order and timing
✘ Recoverability of a multi-step operation
✘ Logging and auditability
✘ Version evolution policies
✘ Deletion of non-relevant artifacts
>1000Deploys per day
>100Real apps
>1500Distinct MTAs (incl. test ones)
@ SAP Cloud Platform
It is Open Source
Open Source Availability
MTA model guide
MTA parsers, validators, persistence and utilities
CF MTA plugin
CF MTA deploy service
Spring Music MTA
Outlook
Evaluation from CF Controller API team – Pivotal tracker item [done]
Proposal for incubation in CF Extensions [pending]
Outlook
Evaluation from CF Controller API team – Pivotal tracker item [done]
Proposal for incubation in CF Extensions [pending]
Planed features:
✘ Parallel materialization of artifacts
✘ Rolling updates
✘ Version rollbacks
✘ Application configuration update
✘ Docker support
✘ Lifecycle hooks
✘ Secure configuration management
thanks!
Any questions?
You can find me at
nikolay.valchev@sap.com
nvvalchev@gmail.com
Credits
Special thanks to all the people who made and released
these awesome resources for free:
✘ Presentation template by SlidesCarnival
✘ Photographs by Unsplash
SlidesCarnival icons are editable shapes.
This means that you can:
● Resize them without losing quality.
● Change fill color and opacity.
Isn’t that nice? :)
Examples:
Extra graphics

More Related Content

Similar to Managing distributed-cloud-apps

Elk-slides-pdf.pdf
Elk-slides-pdf.pdfElk-slides-pdf.pdf
Elk-slides-pdf.pdfHello244729
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKJosé Paumard
 
Progressive web apps
Progressive web appsProgressive web apps
Progressive web appsFastly
 
Istio Playground
Istio PlaygroundIstio Playground
Istio PlaygroundQAware GmbH
 
Web scale infrastructures with kubernetes and flannel
Web scale infrastructures with kubernetes and flannelWeb scale infrastructures with kubernetes and flannel
Web scale infrastructures with kubernetes and flannelpurpleocean
 
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 websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesLindsay Holmwood
 
ContainerDayVietnam2016: Docker for JS Developer
ContainerDayVietnam2016: Docker for JS DeveloperContainerDayVietnam2016: Docker for JS Developer
ContainerDayVietnam2016: Docker for JS DeveloperDocker-Hanoi
 
Automatic Discovery of Service Metadata for Systems at Scale
Automatic Discovery of Service Metadata for Systems at ScaleAutomatic Discovery of Service Metadata for Systems at Scale
Automatic Discovery of Service Metadata for Systems at ScaleMartina Iglesias Fernández
 
Composer the Right Way - PHPBNL16
Composer the Right Way - PHPBNL16Composer the Right Way - PHPBNL16
Composer the Right Way - PHPBNL16Rafael Dohms
 
Composer the right way - DPC15
Composer the right way - DPC15Composer the right way - DPC15
Composer the right way - DPC15Rafael Dohms
 
Composer The Right Way #PHPjhb15
Composer The Right Way #PHPjhb15Composer The Right Way #PHPjhb15
Composer The Right Way #PHPjhb15Rafael Dohms
 
Composer The Right Way
Composer The Right WayComposer The Right Way
Composer The Right WayRafael Dohms
 
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADSKNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADSElad Hirsch
 
Server Side Apocalypse, JS
Server Side Apocalypse, JSServer Side Apocalypse, JS
Server Side Apocalypse, JSMd. Sohel Rana
 
Red Hat OpenShift Operators - Operators ABC
Red Hat OpenShift Operators - Operators ABCRed Hat OpenShift Operators - Operators ABC
Red Hat OpenShift Operators - Operators ABCRobert Bohne
 
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOVirtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOPaolo Cristofaro
 

Similar to Managing distributed-cloud-apps (20)

Bosh 2.0
Bosh 2.0Bosh 2.0
Bosh 2.0
 
Elk-slides-pdf.pdf
Elk-slides-pdf.pdfElk-slides-pdf.pdf
Elk-slides-pdf.pdf
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UK
 
Progressive web apps
Progressive web appsProgressive web apps
Progressive web apps
 
Istio Playground
Istio PlaygroundIstio Playground
Istio Playground
 
Web scale infrastructures with kubernetes and flannel
Web scale infrastructures with kubernetes and flannelWeb scale infrastructures with kubernetes and flannel
Web scale infrastructures with kubernetes and flannel
 
Maven
MavenMaven
Maven
 
Maven
MavenMaven
Maven
 
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 websitesBurn 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
 
ContainerDayVietnam2016: Docker for JS Developer
ContainerDayVietnam2016: Docker for JS DeveloperContainerDayVietnam2016: Docker for JS Developer
ContainerDayVietnam2016: Docker for JS Developer
 
Automatic Discovery of Service Metadata for Systems at Scale
Automatic Discovery of Service Metadata for Systems at ScaleAutomatic Discovery of Service Metadata for Systems at Scale
Automatic Discovery of Service Metadata for Systems at Scale
 
Composer the Right Way - PHPBNL16
Composer the Right Way - PHPBNL16Composer the Right Way - PHPBNL16
Composer the Right Way - PHPBNL16
 
Composer the right way - DPC15
Composer the right way - DPC15Composer the right way - DPC15
Composer the right way - DPC15
 
Composer The Right Way #PHPjhb15
Composer The Right Way #PHPjhb15Composer The Right Way #PHPjhb15
Composer The Right Way #PHPjhb15
 
Composer The Right Way
Composer The Right WayComposer The Right Way
Composer The Right Way
 
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADSKNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
 
Server Side Apocalypse, JS
Server Side Apocalypse, JSServer Side Apocalypse, JS
Server Side Apocalypse, JS
 
Red Hat OpenShift Operators - Operators ABC
Red Hat OpenShift Operators - Operators ABCRed Hat OpenShift Operators - Operators ABC
Red Hat OpenShift Operators - Operators ABC
 
Google app engine by example
Google app engine by exampleGoogle app engine by example
Google app engine by example
 
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOVirtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
 

Recently uploaded

costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 

Recently uploaded (20)

costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 

Managing distributed-cloud-apps

  • 2. Managing Distributed Cloud Native Applications Made Easy
  • 3. Spring Music 2.0 Spring Music inspired sample ✘ web – songs and albums ✘ news provider ✘ external news provider spring-music Lifecycle Management Unit Version 1.0.0 news provider web DB service instance external news provider
  • 4. What are the Challenges? ✘ Develop… ✘ Deployment-specific configuration… ✘ Package and deliver… ✘ Deploy… ✘ Update… ✘ …with no downtime… ✘ Undeploy… Application DevOps Team (~ 2 Pizzas) Other Service Business capability Lifecycle Management Unit Version x.y.z Java (heavy data processing) “BACKEND” Node.Js (heavy data processing) ”FRONTEND” DB service instance “PERSISTE NCE” Geo-spatial Service “EXTERNAL RESOURCE“
  • 5. Multi-Target Application (MTA) Business capability Lifecycle Management Unit Version x.y.z Java (heavy data processing) “BACKEND” Node.Js (user request processing) ”FRONTEND” DB service instance “PERSISTEN CE” Geo-spatial service “EXTERNAL RESOURCE“ MTA: my-app Module type Resource type Module type Resource type Version x.y.z
  • 6. MTA Descriptors ✘ YAML files extends MTA deployment descriptor MTA extension descriptor *1 extends
  • 7. MTA Descriptors ✘ YAML files ✘ MTA Deployment Descriptor (mtad.yaml) extends MTA deployment descriptor MTA extension descriptor *1 extends
  • 8. MTA Descriptors ✘ YAML files ✘ MTA Deployment Descriptor (mtad.yaml) ✘ MTA Extension Descriptor (*.mtaext) extends MTA deployment descriptor MTA extension descriptor *1 extends
  • 9. MTA Deployment Descriptor _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url: spring-music Lifecycle Management Unit Version 1.0.0 news provider web DB service instance external news provider
  • 10. MTA Deployment Descriptor MTA header ✘ spec version ✘ app ID ✘ version _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 11. MTA Deployment Descriptor Modules ✘ name ✘ type ✘ path _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 12. MTA Deployment Descriptor Modules ✘ buildpack ✘ route ✘ other parameters _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 13. MTA Deployment Descriptor Modules ✘ properties/env _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 14. MTA Deployment Descriptor Modules ✘ expose config _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 15. MTA Deployment Descriptor Modules ✘ placeholders like ${default-url} resolved automatically _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 16. MTA Deployment Descriptor Modules ✘ inject config via reference notation like ~{url} _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 17. MTA Deployment Descriptor Resources ✘ name ✘ type _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 18. MTA Deployment Descriptor Resources ✘ service label ✘ plan ✘ other parameters _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 19. MTA Deployment Descriptor Resources ✘ some parameters unknown on design time _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 20. MTA Deployment Descriptor Modules ✘ service bindings _schema-version: 3 ID: org.cf.samples.spring-music version: 1.0.0 modules: - name: spring-music-web type: java.tomcat path: build/libs/spring-music.jar requires: - name: news-provider properties: NEWS_URL: ~{url} - name: spring-music-db - name: spring-music-news-external parameters: buildpack: java_buildpack properties: POPULATE_ALBUM_REPOSITORY: true - name: spring-music-news type: javascript.nodejs path: spring-music-news/ provides: - name: news-provider properties: url: ${default-url}/news resources: - name: spring-music-db type: managed-service parameters: service: postgresql service-plan: v9.4-container - name: spring-music-news-external type: user-provided-service parameters: config: url:
  • 21. MTA Extension Descriptor Deployment context dependent Add property values and parameters _schema-version: 3 ID: cf.samples.spring-music.prod-config extends: cf.samples.spring.music modules: - name: spring-music-web parameters: memory: 1G instances: 2 properties: POPULATE_ALBUM_REPOSITORY: false - name: spring-music-news parameters: memory: 128M resources: - name: spring-music-news-external parameters: config: url: https://news-external.my.domain/news
  • 22. What is an MTA Archive (MTAR)? ✘ Container, compliant with the JAR specification ✘ Contains modules… … a manifest and the MTA deployment descriptor ✘ Used for distribution of the packaged app MTA deployment descriptor Java WAR Node.Js Code … ...
  • 23. CF Deploy Service CF CLI plugin to deploy MTA with a single operation MTA deployment descriptor MTA archive module MTA extension descriptor CF CLI operator Cloud Foundry Cloud Controller CF Deploy Service PostgreSQL database target state workflows cf deploy current state
  • 24. CF Deploy Service MTA deployment descriptor MTA archive module MTA extension descriptor CF CLI operator Cloud Foundry Cloud Controller CF Deploy Service PostgreSQL database target state workflows cf deploy current state ”Server” app with the goal to bring the app to desired state
  • 25. Demo
  • 26. Supported Operations ✘ Deploy (incl. from Git, in future from directory) ✘ Update (incremental) ✘ Blue-green deploy ✘ Cross-MTA configuration
  • 27. Enterprise Qualities ✘ Deterministic deployment order and timing ✘ Recoverability of a multi-step operation ✘ Logging and auditability ✘ Version evolution policies ✘ Deletion of non-relevant artifacts
  • 28. >1000Deploys per day >100Real apps >1500Distinct MTAs (incl. test ones) @ SAP Cloud Platform
  • 29. It is Open Source
  • 30. Open Source Availability MTA model guide MTA parsers, validators, persistence and utilities CF MTA plugin CF MTA deploy service Spring Music MTA
  • 31. Outlook Evaluation from CF Controller API team – Pivotal tracker item [done] Proposal for incubation in CF Extensions [pending]
  • 32. Outlook Evaluation from CF Controller API team – Pivotal tracker item [done] Proposal for incubation in CF Extensions [pending] Planed features: ✘ Parallel materialization of artifacts ✘ Rolling updates ✘ Version rollbacks ✘ Application configuration update ✘ Docker support ✘ Lifecycle hooks ✘ Secure configuration management
  • 33. thanks! Any questions? You can find me at nikolay.valchev@sap.com nvvalchev@gmail.com
  • 34. Credits Special thanks to all the people who made and released these awesome resources for free: ✘ Presentation template by SlidesCarnival ✘ Photographs by Unsplash
  • 35. SlidesCarnival icons are editable shapes. This means that you can: ● Resize them without losing quality. ● Change fill color and opacity. Isn’t that nice? :) Examples:

Editor's Notes

  1. CF-apps which constitute a larger application might even not qualify for being micro-services. Although pushed to an individual container, they might lack the essential micro-services characteristics of being independently deployable units. This happens if they don't expose stable API contracts. Sometimes, it is just not worth the effort to create such contracts because the individual CF-apps might not be created as a result of a domain-driven design approach, but simply for enabling independent scaling of application parts. Another common pattern is to break down the application into a UI-part (also acting as the initial user request processing stage) and a backend-part, each implemented with adequate technologies (e.g. node.js vs. Java). Both parts will be tightly coupled as new backend features need to be reflected on the UI, and a pure compatible evolution of backend APIs is realistically impossible, especially for immature products. Further, application private service instances logically are constituents of the application which needs to be considered during initial deployment, updates and deletions.
  2. Definition: A multi-target application (MTA) is comprised of multiple software pieces (“modules”) which all share a common lifecycle for development and deployment. These modules can be written in different technologies and deployed to different targets respectively – but they all serve (different aspects of) a particular purpose for the application users.
  3. Describe the structure of the app
  4. Deploy with a single operation, which also includes validating the completeness and consistency of an MTA on this platform. Workflow-based Java server application Automating the lifecycle operations of MTA apps in CF Analyses the MTA archive and MTA ext. descriptor to build desired platform model Materialize this desired platform model Integrated in the CF and XSA CLI clients via plugins
  5. Deploy with a single operation, which also includes validating the completeness and consistency of an MTA on this platform. Workflow-based Java server application Automating the lifecycle operations of MTA apps in CF Analyses the MTA archive and MTA ext. descriptor to build desired platform model Materialize this desired platform model Integrated in the CF and XSA CLI clients via plugins
  6. Deploy with a single operation, which also includes validating the completeness and consistency
  7. Deterministic deployment order and timing Recoverability - resume deployment from the point of failure of a multi-step operation Logging and auditability of the entire application lifecycle Implement version evolution policies Deletion of non-relevant technical artifacts
  8. Proposal for incubation in CF Foundation Establish the standard for CF packaged apps for CF certified platforms Standardize CF packaged apps lifecycle management
  9. We are working on more lifecycle automation aspects based on the declarative application model. This list is not complete but should show you our intended direction.