SlideShare a Scribd company logo
BOSH
&
Diego
Benjamin Gandon
@BenjGa
2016-04-04
@BenjGa
Founder & CEO @ Gstack.io
Formerly: CTO @ Alvarum.com
Benjamin Gandon
BOSH
At:
We do:
And:
BOSH
Deploys Distributed Systems
Argh! It’s again those Americans! Don’t worry, Herr General, we will find out soon!
What is BOSH
BOSH is a flexible and resilient
technology that ………………………
complete ecosystems of distributed
software.
1. Package
2. Deploy
3. Monitor
4. Manage
(start/stop, scale, resurrect, update, …)
5. Upgrade
Instance in a BOSH Deployment
Container (or VM)
Filesystem + BOSH Agent
NginxHAproxy Pcre
HAproxy Nginx
Stemcell
Packages
Jobs
Instance Stemcell
+ Jobs
+ Packages
= Instance
Equation
/var/vcap/jobs/*
/var/vcap/packages/*
Availability Zone #3
AZ2AZ1
What we do with those “instances”
HAproxy
Stemcell
Pkg1 Pkg2
Nginx
Stemcell
Pkg3 Pkg2
HAproxy
Stemcell
Pkg1 Pkg2
Nginx
Stemcell
Pkg3 Pkg2
Nginx
Stemcell
Pkg3 Pkg2
● Garden containers (in a VitrualBox VM)
● Docker (experimental)
● AWS
● OpenStack
● CloudStack
● Azure
● vSphere
BOSH secret? → Use abstract Cloud Provider Interfaces (CPIs)
Deploy where ?
Diego
Flexible Container Engine
From
Try at home! Because…
● BOSH
● Cloud Foundry
● Diego
Open
Source
Why “diego”?
● Since 2019, intuition for stateless “not-yet-containers” → the Droplets
● Their engine: the Droplet Execution Agent
→ DEA
● When rewritten in Go: DEA-GO
→ Diego!
Diego architecture
(logs)
(controller)
(http routes)
Source: https://github.com/cloudfoundry-incubator/diego-design-notes
Not just about containers
● Long Running Processes
→ LRPs
● Tasks
→ Servers
→ Cron jobs
Two ways to use Diego
● Multi-tenant Diego
→ as Cloud Foundry central container engine
● Single-tenant Diego
→ as Lattice, a single-tenant Diego cluster
Dude, go to http://lattice.cf
Lattice is definitely cool
● Containerized workloads
○ Long running, or temporary tasks
○ Dynamically scaled
○ Dynamically balanced across cells (but no live re-balancing)
● Cluster scheduler
● HTTP load balancing
● Log aggregation
● Health management
Some code!
Diego Auctions Scoring
// See: github.com/cloudfoundry-incubator/rep/…/resources.go#L15-L24
type CellState struct {
RootFSProviders RootFSProviders
AvailableResources Resources
TotalResources Resources
LRPs []LRP
Tasks []Task
StartingContainerCount int
Zone string
Evacuating bool
VolumeDrivers []string
}
// See: github.com/cloudfoundry-incubator/rep/…/resources.go#L74-L79
func (c CellState) ComputeScore(res *Resource, startingContainerWeight float64) float64 {
remainingResources := c.AvailableResources.Copy()
remainingResources.Subtract(res)
startingContainerScore := float64(c.StartingContainerCount) * startingContainerWeight
return remainingResources.ComputeScore(&c.TotalResources) + startingContainerScore
}
// See: github.com/cloudfoundry-incubator/rep/…/resources.go#L90-L93
type Resources struct {
MemoryMB int32
DiskMB int32
Containers int
}
// See: github.com/cloudfoundry-incubator/rep/…/resources.go#L110-L115
func (r *Resources) ComputeScore(total *Resources) float64 {
fractionUsedMemory := 1.0 - float64(r.MemoryMB)/float64(total.MemoryMB)
fractionUsedDisk := 1.0 - float64(r.DiskMB)/float64(total.DiskMB)
fractionUsedContainers := 1.0 - float64(r.Containers)/float64(total.Containers)
return (fractionUsedMemory + fractionUsedDisk + fractionUsedContainers) / 3.0
}
// See: github.com/cloudfoundry-incubator/auction/…/auctionrunner/scheduler.go#L206-L258
func (s *Scheduler) scheduleLRPAuction(lrpAuction *auctiontypes.LRPAuction) (*auctiontypes.LRPAuction, error) {
var winnerCell *Cell
winnerScore := 1e20
// Lists all zones, and count how many times the LRP is already in each of them
zones := accumulateZonesByInstances(s.zones, lrpAuction.ProcessGuid)
// Retain only zones with compatible filesystem (e.g. Linux or Windows)
filteredZones := filterZones(zones, lrpAuction)
if len(filteredZones) == 0 {
return nil, auctiontypes.ErrorCellMismatch
}
sortedZones := sortZonesByInstances(filteredZones)
// …
}
Diego Auctions Evaluation (1/3)
// See: github.com/cloudfoundry-incubator/auction/…/auctionrunner/scheduler.go#L206-L258
func (s *Scheduler) scheduleLRPAuction(lrpAuction *auctiontypes.LRPAuction) (*auctiontypes.LRPAuction, error) {
// …
for zoneIndex, lrpByZone := range sortedZones {
for _, cell := range lrpByZone.zone {
score, err := cell.ScoreForLRP(&lrpAuction.LRP, s.startingContainerWeight)
if err != nil {
continue
}
// Look for the Diego cell with minimal overall utilization
if score < winnerScore {
winnerScore = score
winnerCell = cell
}
}
// if (not last zone) && (this zone has the same # of instances as the next sorted zone)
// acts as a tie breaker
if zoneIndex+1 < len(sortedZones) &&
lrpByZone.instances == sortedZones[zoneIndex+1].instances {
continue
}
if winnerCell != nil {
break
}
}
// …
}
Diego Auctions Evaluation (2/3)
// See: github.com/cloudfoundry-incubator/auction/…/auctionrunner/scheduler.go#L206-L258
func (s *Scheduler) scheduleLRPAuction(lrpAuction *auctiontypes.LRPAuction) (*auctiontypes.LRPAuction, error) {
// …
if winnerCell == nil {
return nil, rep.ErrorInsufficientResources
}
err := winnerCell.ReserveLRP(&lrpAuction.LRP)
if err != nil {
s.logger.Error("lrp-failed-to-reserve-cell", err, lager.Data{"cell-guid": winnerCell.Guid, "lrp-guid": lrpAuction.Identifier()})
return nil, err
}
winningAuction := lrpAuction.Copy()
// Return a copy of the auction containing the winning cell
winningAuction.Winner = winnerCell.Guid
return &winningAuction, nil
}
Diego Auctions Evaluation (3/3)
→ Simple as that!
Thank you!
www.gstack.io (not yet in Google)
www.bosh.io
www.lattice.cf
www.cloudfoundry.org
Questions?
↘ ↙
→ @BenjGa ←
↗ ↖

More Related Content

What's hot (18)

PDF
ch8-pv1-the-virtual-filesystem
yushiang fu
 
PDF
PuppetDB: New Adventures in Higher-Order Automation - PuppetConf 2013
Puppet
 
DOCX
50 Most Frequently Used UNIX Linux Commands -hmftj
LGS, GBHS&IC, University Of South-Asia, TARA-Technologies
 
PDF
Gitosis on Mac OS X Server
Yasuhiro Asaka
 
PDF
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam
 
PDF
今日から始めるPlan 9 from Bell Labs
Ryousei Takano
 
PDF
Apache Hadoop for System Administrators
Allen Wittenauer
 
PDF
IL: 失われたプロトコル
Ryousei Takano
 
PDF
Redis as a message queue
Brandon Lamb
 
PPTX
Cis 216 – shell scripting
Dan Morrill
 
PPTX
Job Automation using Linux
Jishnu Pradeep
 
ODP
NUMOSS 4th Week - Commandline Tutorial
Gagah Arifianto
 
PDF
Redis & ZeroMQ: How to scale your application
rjsmelo
 
PDF
Gogo shell
jwausle
 
ODP
Eat my data
Peng Zuo
 
PDF
Rustでパケットと戯れる
ShuyaMotouchi1
 
PPTX
Awk primer and Bioawk
Hoffman Lab
 
PDF
Containers for sysadmins
Carlos de Alfonso Laguna
 
ch8-pv1-the-virtual-filesystem
yushiang fu
 
PuppetDB: New Adventures in Higher-Order Automation - PuppetConf 2013
Puppet
 
50 Most Frequently Used UNIX Linux Commands -hmftj
LGS, GBHS&IC, University Of South-Asia, TARA-Technologies
 
Gitosis on Mac OS X Server
Yasuhiro Asaka
 
PGDay.Amsterdam 2018 - Stefan Fercot - Save your data with pgBackRest
PGDay.Amsterdam
 
今日から始めるPlan 9 from Bell Labs
Ryousei Takano
 
Apache Hadoop for System Administrators
Allen Wittenauer
 
IL: 失われたプロトコル
Ryousei Takano
 
Redis as a message queue
Brandon Lamb
 
Cis 216 – shell scripting
Dan Morrill
 
Job Automation using Linux
Jishnu Pradeep
 
NUMOSS 4th Week - Commandline Tutorial
Gagah Arifianto
 
Redis & ZeroMQ: How to scale your application
rjsmelo
 
Gogo shell
jwausle
 
Eat my data
Peng Zuo
 
Rustでパケットと戯れる
ShuyaMotouchi1
 
Awk primer and Bioawk
Hoffman Lab
 
Containers for sysadmins
Carlos de Alfonso Laguna
 

Viewers also liked (11)

PDF
When containers fail
Alois Mayr
 
PDF
Building a PaaS for Government @ Cloud expo Europe
Colin Saliceti
 
PPTX
Myfirst cloudfoundry intro_20161201
Tomohiro Ichimura
 
PDF
Bosh 2-0-reloaded
Gwenn Etourneau
 
PDF
Install Concourse CI with BOSH
Toshiaki Maki
 
PPTX
Cloud Foundry V2 | Intermediate Deep Dive
Kazuto Kusama
 
PDF
Introduction to Cloud Foundry #JJUG
Toshiaki Maki
 
PPTX
Cloud Foundry | How it works
Kazuto Kusama
 
PDF
Bitcoinを技術的に理解する
Kenji Urushima
 
PDF
Cloud Foundryで学ぶ、PaaSのしくみ講座
Kazuto Kusama
 
PDF
Bosh - Configuring Services
Andrew Shafer
 
When containers fail
Alois Mayr
 
Building a PaaS for Government @ Cloud expo Europe
Colin Saliceti
 
Myfirst cloudfoundry intro_20161201
Tomohiro Ichimura
 
Bosh 2-0-reloaded
Gwenn Etourneau
 
Install Concourse CI with BOSH
Toshiaki Maki
 
Cloud Foundry V2 | Intermediate Deep Dive
Kazuto Kusama
 
Introduction to Cloud Foundry #JJUG
Toshiaki Maki
 
Cloud Foundry | How it works
Kazuto Kusama
 
Bitcoinを技術的に理解する
Kenji Urushima
 
Cloud Foundryで学ぶ、PaaSのしくみ講座
Kazuto Kusama
 
Bosh - Configuring Services
Andrew Shafer
 
Ad

Similar to BOSH deploys distributed systems, and Diego runs any containers (20)

KEY
Node.js basics
Ben Lin
 
ODP
Releasing and deploying python tools
Quintagroup
 
PPTX
Splunk n-box-splunk conf-2017
Mohamad Hassan
 
PDF
Bash is not a second zone citizen programming language
René Ribaud
 
PDF
Launch the First Process in Linux System
Jian-Hong Pan
 
PDF
Efficient System Monitoring in Cloud Native Environments
Gergely Szabó
 
PDF
DevOps(4) : Ansible(2) - (MOSG)
Soshi Nemoto
 
PPT
What is-a-computer-process-os
Manish Singh
 
PDF
Goroutine stack and local variable allocation in Go
Yu-Shuan Hsieh
 
PDF
Ganesh naik linux_kernel_internals
nullowaspmumbai
 
PDF
Ganesh naik linux_kernel_internals
Ganesh Naik
 
PDF
Shared Object images in Docker: What you need is what you want.
Workhorse Computing
 
PDF
TYPO3 Extension development using new Extbase framework
Christian Trabold
 
PDF
Getting started with Burst – Unite Copenhagen 2019
Unity Technologies
 
KEY
Deploying and maintaining your software with RPM/APT
Joshua Thijssen
 
PDF
An Overview of the IHK/McKernel Multi-kernel Operating System
Linaro
 
PPTX
DotNetFest - Let’s refresh our memory! Memory management in .NET
Maarten Balliauw
 
PPTX
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
ngotogenome
 
PPTX
HPC_MPI_CICID_OA.pptx
ObjectAutomation2
 
Node.js basics
Ben Lin
 
Releasing and deploying python tools
Quintagroup
 
Splunk n-box-splunk conf-2017
Mohamad Hassan
 
Bash is not a second zone citizen programming language
René Ribaud
 
Launch the First Process in Linux System
Jian-Hong Pan
 
Efficient System Monitoring in Cloud Native Environments
Gergely Szabó
 
DevOps(4) : Ansible(2) - (MOSG)
Soshi Nemoto
 
What is-a-computer-process-os
Manish Singh
 
Goroutine stack and local variable allocation in Go
Yu-Shuan Hsieh
 
Ganesh naik linux_kernel_internals
nullowaspmumbai
 
Ganesh naik linux_kernel_internals
Ganesh Naik
 
Shared Object images in Docker: What you need is what you want.
Workhorse Computing
 
TYPO3 Extension development using new Extbase framework
Christian Trabold
 
Getting started with Burst – Unite Copenhagen 2019
Unity Technologies
 
Deploying and maintaining your software with RPM/APT
Joshua Thijssen
 
An Overview of the IHK/McKernel Multi-kernel Operating System
Linaro
 
DotNetFest - Let’s refresh our memory! Memory management in .NET
Maarten Balliauw
 
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
ngotogenome
 
HPC_MPI_CICID_OA.pptx
ObjectAutomation2
 
Ad

Recently uploaded (20)

PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PPT
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PPTX
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PDF
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
PPTX
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
PDF
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 

BOSH deploys distributed systems, and Diego runs any containers

  • 2. @BenjGa Founder & CEO @ Gstack.io Formerly: CTO @ Alvarum.com Benjamin Gandon BOSH At: We do: And:
  • 3. BOSH Deploys Distributed Systems Argh! It’s again those Americans! Don’t worry, Herr General, we will find out soon!
  • 4. What is BOSH BOSH is a flexible and resilient technology that ……………………… complete ecosystems of distributed software. 1. Package 2. Deploy 3. Monitor 4. Manage (start/stop, scale, resurrect, update, …) 5. Upgrade
  • 5. Instance in a BOSH Deployment Container (or VM) Filesystem + BOSH Agent NginxHAproxy Pcre HAproxy Nginx Stemcell Packages Jobs Instance Stemcell + Jobs + Packages = Instance Equation /var/vcap/jobs/* /var/vcap/packages/*
  • 6. Availability Zone #3 AZ2AZ1 What we do with those “instances” HAproxy Stemcell Pkg1 Pkg2 Nginx Stemcell Pkg3 Pkg2 HAproxy Stemcell Pkg1 Pkg2 Nginx Stemcell Pkg3 Pkg2 Nginx Stemcell Pkg3 Pkg2
  • 7. ● Garden containers (in a VitrualBox VM) ● Docker (experimental) ● AWS ● OpenStack ● CloudStack ● Azure ● vSphere BOSH secret? → Use abstract Cloud Provider Interfaces (CPIs) Deploy where ?
  • 9. Try at home! Because… ● BOSH ● Cloud Foundry ● Diego Open Source
  • 10. Why “diego”? ● Since 2019, intuition for stateless “not-yet-containers” → the Droplets ● Their engine: the Droplet Execution Agent → DEA ● When rewritten in Go: DEA-GO → Diego!
  • 11. Diego architecture (logs) (controller) (http routes) Source: https://github.com/cloudfoundry-incubator/diego-design-notes
  • 12. Not just about containers ● Long Running Processes → LRPs ● Tasks → Servers → Cron jobs
  • 13. Two ways to use Diego ● Multi-tenant Diego → as Cloud Foundry central container engine ● Single-tenant Diego → as Lattice, a single-tenant Diego cluster Dude, go to http://lattice.cf
  • 14. Lattice is definitely cool ● Containerized workloads ○ Long running, or temporary tasks ○ Dynamically scaled ○ Dynamically balanced across cells (but no live re-balancing) ● Cluster scheduler ● HTTP load balancing ● Log aggregation ● Health management
  • 16. Diego Auctions Scoring // See: github.com/cloudfoundry-incubator/rep/…/resources.go#L15-L24 type CellState struct { RootFSProviders RootFSProviders AvailableResources Resources TotalResources Resources LRPs []LRP Tasks []Task StartingContainerCount int Zone string Evacuating bool VolumeDrivers []string } // See: github.com/cloudfoundry-incubator/rep/…/resources.go#L74-L79 func (c CellState) ComputeScore(res *Resource, startingContainerWeight float64) float64 { remainingResources := c.AvailableResources.Copy() remainingResources.Subtract(res) startingContainerScore := float64(c.StartingContainerCount) * startingContainerWeight return remainingResources.ComputeScore(&c.TotalResources) + startingContainerScore } // See: github.com/cloudfoundry-incubator/rep/…/resources.go#L90-L93 type Resources struct { MemoryMB int32 DiskMB int32 Containers int } // See: github.com/cloudfoundry-incubator/rep/…/resources.go#L110-L115 func (r *Resources) ComputeScore(total *Resources) float64 { fractionUsedMemory := 1.0 - float64(r.MemoryMB)/float64(total.MemoryMB) fractionUsedDisk := 1.0 - float64(r.DiskMB)/float64(total.DiskMB) fractionUsedContainers := 1.0 - float64(r.Containers)/float64(total.Containers) return (fractionUsedMemory + fractionUsedDisk + fractionUsedContainers) / 3.0 }
  • 17. // See: github.com/cloudfoundry-incubator/auction/…/auctionrunner/scheduler.go#L206-L258 func (s *Scheduler) scheduleLRPAuction(lrpAuction *auctiontypes.LRPAuction) (*auctiontypes.LRPAuction, error) { var winnerCell *Cell winnerScore := 1e20 // Lists all zones, and count how many times the LRP is already in each of them zones := accumulateZonesByInstances(s.zones, lrpAuction.ProcessGuid) // Retain only zones with compatible filesystem (e.g. Linux or Windows) filteredZones := filterZones(zones, lrpAuction) if len(filteredZones) == 0 { return nil, auctiontypes.ErrorCellMismatch } sortedZones := sortZonesByInstances(filteredZones) // … } Diego Auctions Evaluation (1/3)
  • 18. // See: github.com/cloudfoundry-incubator/auction/…/auctionrunner/scheduler.go#L206-L258 func (s *Scheduler) scheduleLRPAuction(lrpAuction *auctiontypes.LRPAuction) (*auctiontypes.LRPAuction, error) { // … for zoneIndex, lrpByZone := range sortedZones { for _, cell := range lrpByZone.zone { score, err := cell.ScoreForLRP(&lrpAuction.LRP, s.startingContainerWeight) if err != nil { continue } // Look for the Diego cell with minimal overall utilization if score < winnerScore { winnerScore = score winnerCell = cell } } // if (not last zone) && (this zone has the same # of instances as the next sorted zone) // acts as a tie breaker if zoneIndex+1 < len(sortedZones) && lrpByZone.instances == sortedZones[zoneIndex+1].instances { continue } if winnerCell != nil { break } } // … } Diego Auctions Evaluation (2/3)
  • 19. // See: github.com/cloudfoundry-incubator/auction/…/auctionrunner/scheduler.go#L206-L258 func (s *Scheduler) scheduleLRPAuction(lrpAuction *auctiontypes.LRPAuction) (*auctiontypes.LRPAuction, error) { // … if winnerCell == nil { return nil, rep.ErrorInsufficientResources } err := winnerCell.ReserveLRP(&lrpAuction.LRP) if err != nil { s.logger.Error("lrp-failed-to-reserve-cell", err, lager.Data{"cell-guid": winnerCell.Guid, "lrp-guid": lrpAuction.Identifier()}) return nil, err } winningAuction := lrpAuction.Copy() // Return a copy of the auction containing the winning cell winningAuction.Winner = winnerCell.Guid return &winningAuction, nil } Diego Auctions Evaluation (3/3) → Simple as that!
  • 21. www.gstack.io (not yet in Google) www.bosh.io www.lattice.cf www.cloudfoundry.org Questions? ↘ ↙ → @BenjGa ← ↗ ↖