Multi-cloud scenarios for tomorrow’s applications
Alex Heneveld / @ahtweetin
FIA/Cloud4SOA Workshop
7 May 2013
© 2013 Cloudsoft Corporation
Agenda
• Canned PaaS
• Challenges #1: multi-cloud and complex apps
• Composable PaaS
• Challenges #2: usability and interop
• Declarative PaaS
2
© 2013 Cloudsoft Corporation
Canned PaaS
3
© 2013 Cloudsoft Corporation
Canned PaaS
4
Software
Stack
Languages Data Services Elastic
Hosting
Providers
Amazon Elastic
Beanstalk
proprietary
Java
(so far)
proprietary
(extensive) ✓ AWS only
Google AppEngine proprietary
Python, Java
(limited)
proprietary
✓
Google
only
Microsoft Azure proprietary
.NET, PHP,
Java
proprietary
(extensive) ✓ Azure only
Heroku proprietary
Java, Ruby,
node.js, ...
MySQL, Mongo,
... ✓ AWS
Engine Yard
multiple
(Rubinius, etc)
Ruby, PHP,
JRuby, ...
MySQL,
PostgreSQL ✓
AWS
(so far)
CloudBees RUN@cloud LAMJ Java MySQL
✓
AWS
(so far)
VMware CloudFoundry
multiple
(e.g. tcServer)
Java, Ruby,
node.js, ...
MySQL, Mongo,
... ✓
multiple,
OSS
RedHat OpenShift
multiple
(e.g. JBoss)
Ruby, Python,
PHP, Java, ...
MySQL, Mongo,
... ✓
multiple,
OSS
© 2013 Cloudsoft Corporation
Canned PaaS
5
Software
Stack
Languages Data Services Elastic
Hosting
Providers
Multiple
Locations
Extensible
Safe from
Lock-in
Amazon Elastic
Beanstalk
proprietary
Java
(so far)
proprietary
(extensive) ✓ AWS only ✗ ✗ ✗
Google AppEngine proprietary
Python, Java
(limited)
proprietary
✓
Google
only ✗ ✗ ✗
Microsoft Azure proprietary
.NET, PHP,
Java
proprietary
(extensive) ✓ Azure only ✗ ✗ ✗
Heroku proprietary
Java, Ruby,
node.js, ...
MySQL, Mongo,
... ✓ AWS ✗ ✗ ✗
Engine Yard
multiple
(Rubinius, etc)
Ruby, PHP,
JRuby, ...
MySQL,
PostgreSQL ✓
AWS
(so far) ✗ ✗ ✗
CloudBees RUN@cloud LAMJ Java MySQL
✓
AWS
(so far) ✗ ✗ ✓
VMware CloudFoundry
multiple
(e.g. tcServer)
Java, Ruby,
node.js, ...
MySQL, Mongo,
... ✓
multiple,
OSS ✗ ✓ ✓
RedHat OpenShift
multiple
(e.g. JBoss)
Ruby, Python,
PHP, Java, ...
MySQL, Mongo,
... ✓
multiple,
OSS ✗ ✓ ✓
© 2013 Cloudsoft Corporation
Challenges #1
• Multi-environment
• On-premise, hybrid, and legacy
• Bursting and spanning
• Complex applications
• Custom dependency injection
• Richer applications
6
© 2013 Cloudsoft Corporation
Betfair
7
© 2013 Cloudsoft Corporation
Betfair
8
• cloud: Rackspace
• on-prem: vSphere
• lightweight virt’n (LXC)
• nginx dev / F5 live
© 2013 Cloudsoft Corporation
The Elephant in the Room
9
© 2013 Cloudsoft Corporation
Betfair
10
© 2013 Cloudsoft Corporation
GSLB
11
✗
◦ ◦ ◦
© 2013 Cloudsoft Corporation
Composable PaaS
12
© 2013 Cloudsoft Corporation
Composable PaaS
13
© 2013 Cloudsoft Corporation
http://brooklyncentral.github.com
14
© 2013 Cloudsoft Corporation 15
Autonomic Management (M-A-P-E)
Monitor
Analyze Plan
ExecuteState
Sensors Effectors
Enrich
Delegate
Autonomic
Manager*
Sensors Effectors
Escalate
Managed
Element
*An autonomic manager can be a managed element
© 2013 Cloudsoft Corporation 16
Hierarchical Autonomic Management
Granularity can be anything from individual application to overall control plane
© 2013 Cloudsoft Corporation
Multi-Tier Application
Load Balanced Cluster
Cluster
Multi-Tier Application
17
OS
MySQL
OS
NGINX
OS
JBoss7Server
OS
JBoss7Server
…
Need to update targets
to match cluster
Need to publish MySQL
URL for cluster
Need to specify
autoscaling policy
There has to be a better
way than scripting …
© 2013 Cloudsoft Corporation
MyWebCluster – Topology
18
…
MyWebCluster
ControlledDynamicWebAppCluster
DynamicWebAppCluster
JBoss7Server
NGINX
MySQL
JBoss7Server
Concrete Entities
Abstract Entities
Managed Elements - AMP proxies for real world components
Autonomic Managers - AMP specific constructs or building blocks
Here we explicitly model the app’s
organizational structure
MySQL and NGINX could be
swapped out for their
clustered variants
© 2013 Cloudsoft Corporation
MyWebCluster – Blueprint
19
Auto Scaler Policy[targets]
…
MyWebCluster
ControlledDynamicWebAppCluster
DynamicWebAppCluster
JBoss7Server
NGINX
MySQL
JBoss7Server
Policies Attached to entities they effect but can subscribe to any sensor
[targets] is a built in policy
whereas the auto scaling
policy is explicitly added
An application blueprint is
completely portable
© 2013 Cloudsoft Corporation
MyWebCluster – Customization
20
…JBoss7Server
NGINX
MySQL
JBoss7Server
Auto Scaler Policy[targets]
…
MyWebCluster
ControlledDynamicWebAppCluster
DynamicWebAppCluster
JBoss7Server
NGINX
MySQL
JBoss7Server
Drivers Customer specific implementations (Bash, Puppet, Chef etc.)
The pluggable driver mechanism is an
elegant way to customize a blueprint for
a particular environment
© 2013 Cloudsoft Corporation
MyWebCluster – Instantiation
21
Location
OS
OS
OS
… OS
…JBoss7Server
NGINX
MySQL
JBoss7Server
+
Auto Scaler Policy[targets]
…
MyWebCluster
ControlledDynamicWebAppCluster
DynamicWebAppCluster
JBoss7Server
NGINX
MySQL
JBoss7Server
Instances
Locations – can be virtual machine, LXC, legacy; and multiple
© 2013 Cloudsoft Corporation 22
Java Library
public class MyWebCluster extends AbstractApplication
implements MyWebClusterConstants {
@Override
public void init() {
MySqlNode mysql = ...;
ControlledDynamicWebAppCluster web = ...;
web.addEnricher(HttpLatencyDetector.builder().url(ROOT_URL).
rollup(10, SECONDS).build());
web.getCluster().addPolicy(AutoScalerPolicy.builder().
metric(REQUESTS_PER_SECOND_IN_WINDOW_PER_NODE).
metricRange(10, 100).sizeRange(2, 5).build());
addEnricher(SensorPropagatingEnricher.newInstanceListeningTo(web,
ROOT_URL, REQUESTS_PER_SECOND_IN_WINDOW, REQUEST_LATENCY_IN_SECONDS_IN_WINDOW));
}
}
© 2013 Cloudsoft Corporation
Powerful GUI and RESTful API
23
© 2013 Cloudsoft Corporation
Uses
24
© 2013 Cloudsoft Corporation
Challenges #2
• Usability — code is hard!
• Interop — #unicorns
25
© 2013 Cloudsoft Corporation
PUSH
26
• impose a common
pattern on PaaSes
• Cloud4SOA !
• Strong types in Brooklyn
• limited success
(DI, locations, etc)
© 2013 Cloudsoft Corporation
PULL
27
• standards: create desire
and make them achievable
• Oasis CAMP, TOSCA; OCCI
• Cloud4SOA, SeaClouds (FP7)
• OpenStack Heat, Cloudstack 576
• early days ...
but huge momentum!
© 2013 Cloudsoft Corporation
PUSH AND PULL
28
© 2013 Cloudsoft Corporation 29
A DSL (WIP not RIP!)
name: "three tier app"
components:
hello_war: # no type
content: hello.war
requires:
com.example.java:WarContainer:
initialSize: 3
fulfillment: frontend
com.example.java:Autoscaler:
metric: request.latency
max: 120ms
hello_sql:
content: hello.sql
type: com.example.database:Schema # here, type of component defined
requires: backend
frontend: # "platform component" implied by WarDeplReq above
requires:
database: # frontend type must recognise a named "database" req
mode: CDI # assume that req supports various injection modes
fulfillment: backend
Multi-cloud scenarios for tomorrow’s applications
Alex Heneveld / @ahtweetin
FIA/Cloud4SOA Workshop
7 May 2013

2013 05-multicloud-paas-interop-scenarios-fia-dublin

  • 1.
    Multi-cloud scenarios fortomorrow’s applications Alex Heneveld / @ahtweetin FIA/Cloud4SOA Workshop 7 May 2013
  • 2.
    © 2013 CloudsoftCorporation Agenda • Canned PaaS • Challenges #1: multi-cloud and complex apps • Composable PaaS • Challenges #2: usability and interop • Declarative PaaS 2
  • 3.
    © 2013 CloudsoftCorporation Canned PaaS 3
  • 4.
    © 2013 CloudsoftCorporation Canned PaaS 4 Software Stack Languages Data Services Elastic Hosting Providers Amazon Elastic Beanstalk proprietary Java (so far) proprietary (extensive) ✓ AWS only Google AppEngine proprietary Python, Java (limited) proprietary ✓ Google only Microsoft Azure proprietary .NET, PHP, Java proprietary (extensive) ✓ Azure only Heroku proprietary Java, Ruby, node.js, ... MySQL, Mongo, ... ✓ AWS Engine Yard multiple (Rubinius, etc) Ruby, PHP, JRuby, ... MySQL, PostgreSQL ✓ AWS (so far) CloudBees RUN@cloud LAMJ Java MySQL ✓ AWS (so far) VMware CloudFoundry multiple (e.g. tcServer) Java, Ruby, node.js, ... MySQL, Mongo, ... ✓ multiple, OSS RedHat OpenShift multiple (e.g. JBoss) Ruby, Python, PHP, Java, ... MySQL, Mongo, ... ✓ multiple, OSS
  • 5.
    © 2013 CloudsoftCorporation Canned PaaS 5 Software Stack Languages Data Services Elastic Hosting Providers Multiple Locations Extensible Safe from Lock-in Amazon Elastic Beanstalk proprietary Java (so far) proprietary (extensive) ✓ AWS only ✗ ✗ ✗ Google AppEngine proprietary Python, Java (limited) proprietary ✓ Google only ✗ ✗ ✗ Microsoft Azure proprietary .NET, PHP, Java proprietary (extensive) ✓ Azure only ✗ ✗ ✗ Heroku proprietary Java, Ruby, node.js, ... MySQL, Mongo, ... ✓ AWS ✗ ✗ ✗ Engine Yard multiple (Rubinius, etc) Ruby, PHP, JRuby, ... MySQL, PostgreSQL ✓ AWS (so far) ✗ ✗ ✗ CloudBees RUN@cloud LAMJ Java MySQL ✓ AWS (so far) ✗ ✗ ✓ VMware CloudFoundry multiple (e.g. tcServer) Java, Ruby, node.js, ... MySQL, Mongo, ... ✓ multiple, OSS ✗ ✓ ✓ RedHat OpenShift multiple (e.g. JBoss) Ruby, Python, PHP, Java, ... MySQL, Mongo, ... ✓ multiple, OSS ✗ ✓ ✓
  • 6.
    © 2013 CloudsoftCorporation Challenges #1 • Multi-environment • On-premise, hybrid, and legacy • Bursting and spanning • Complex applications • Custom dependency injection • Richer applications 6
  • 7.
    © 2013 CloudsoftCorporation Betfair 7
  • 8.
    © 2013 CloudsoftCorporation Betfair 8 • cloud: Rackspace • on-prem: vSphere • lightweight virt’n (LXC) • nginx dev / F5 live
  • 9.
    © 2013 CloudsoftCorporation The Elephant in the Room 9
  • 10.
    © 2013 CloudsoftCorporation Betfair 10
  • 11.
    © 2013 CloudsoftCorporation GSLB 11 ✗ ◦ ◦ ◦
  • 12.
    © 2013 CloudsoftCorporation Composable PaaS 12
  • 13.
    © 2013 CloudsoftCorporation Composable PaaS 13
  • 14.
    © 2013 CloudsoftCorporation http://brooklyncentral.github.com 14
  • 15.
    © 2013 CloudsoftCorporation 15 Autonomic Management (M-A-P-E) Monitor Analyze Plan ExecuteState Sensors Effectors Enrich Delegate Autonomic Manager* Sensors Effectors Escalate Managed Element *An autonomic manager can be a managed element
  • 16.
    © 2013 CloudsoftCorporation 16 Hierarchical Autonomic Management Granularity can be anything from individual application to overall control plane
  • 17.
    © 2013 CloudsoftCorporation Multi-Tier Application Load Balanced Cluster Cluster Multi-Tier Application 17 OS MySQL OS NGINX OS JBoss7Server OS JBoss7Server … Need to update targets to match cluster Need to publish MySQL URL for cluster Need to specify autoscaling policy There has to be a better way than scripting …
  • 18.
    © 2013 CloudsoftCorporation MyWebCluster – Topology 18 … MyWebCluster ControlledDynamicWebAppCluster DynamicWebAppCluster JBoss7Server NGINX MySQL JBoss7Server Concrete Entities Abstract Entities Managed Elements - AMP proxies for real world components Autonomic Managers - AMP specific constructs or building blocks Here we explicitly model the app’s organizational structure MySQL and NGINX could be swapped out for their clustered variants
  • 19.
    © 2013 CloudsoftCorporation MyWebCluster – Blueprint 19 Auto Scaler Policy[targets] … MyWebCluster ControlledDynamicWebAppCluster DynamicWebAppCluster JBoss7Server NGINX MySQL JBoss7Server Policies Attached to entities they effect but can subscribe to any sensor [targets] is a built in policy whereas the auto scaling policy is explicitly added An application blueprint is completely portable
  • 20.
    © 2013 CloudsoftCorporation MyWebCluster – Customization 20 …JBoss7Server NGINX MySQL JBoss7Server Auto Scaler Policy[targets] … MyWebCluster ControlledDynamicWebAppCluster DynamicWebAppCluster JBoss7Server NGINX MySQL JBoss7Server Drivers Customer specific implementations (Bash, Puppet, Chef etc.) The pluggable driver mechanism is an elegant way to customize a blueprint for a particular environment
  • 21.
    © 2013 CloudsoftCorporation MyWebCluster – Instantiation 21 Location OS OS OS … OS …JBoss7Server NGINX MySQL JBoss7Server + Auto Scaler Policy[targets] … MyWebCluster ControlledDynamicWebAppCluster DynamicWebAppCluster JBoss7Server NGINX MySQL JBoss7Server Instances Locations – can be virtual machine, LXC, legacy; and multiple
  • 22.
    © 2013 CloudsoftCorporation 22 Java Library public class MyWebCluster extends AbstractApplication implements MyWebClusterConstants { @Override public void init() { MySqlNode mysql = ...; ControlledDynamicWebAppCluster web = ...; web.addEnricher(HttpLatencyDetector.builder().url(ROOT_URL). rollup(10, SECONDS).build()); web.getCluster().addPolicy(AutoScalerPolicy.builder(). metric(REQUESTS_PER_SECOND_IN_WINDOW_PER_NODE). metricRange(10, 100).sizeRange(2, 5).build()); addEnricher(SensorPropagatingEnricher.newInstanceListeningTo(web, ROOT_URL, REQUESTS_PER_SECOND_IN_WINDOW, REQUEST_LATENCY_IN_SECONDS_IN_WINDOW)); } }
  • 23.
    © 2013 CloudsoftCorporation Powerful GUI and RESTful API 23
  • 24.
    © 2013 CloudsoftCorporation Uses 24
  • 25.
    © 2013 CloudsoftCorporation Challenges #2 • Usability — code is hard! • Interop — #unicorns 25
  • 26.
    © 2013 CloudsoftCorporation PUSH 26 • impose a common pattern on PaaSes • Cloud4SOA ! • Strong types in Brooklyn • limited success (DI, locations, etc)
  • 27.
    © 2013 CloudsoftCorporation PULL 27 • standards: create desire and make them achievable • Oasis CAMP, TOSCA; OCCI • Cloud4SOA, SeaClouds (FP7) • OpenStack Heat, Cloudstack 576 • early days ... but huge momentum!
  • 28.
    © 2013 CloudsoftCorporation PUSH AND PULL 28
  • 29.
    © 2013 CloudsoftCorporation 29 A DSL (WIP not RIP!) name: "three tier app" components: hello_war: # no type content: hello.war requires: com.example.java:WarContainer: initialSize: 3 fulfillment: frontend com.example.java:Autoscaler: metric: request.latency max: 120ms hello_sql: content: hello.sql type: com.example.database:Schema # here, type of component defined requires: backend frontend: # "platform component" implied by WarDeplReq above requires: database: # frontend type must recognise a named "database" req mode: CDI # assume that req supports various injection modes fulfillment: backend
  • 30.
    Multi-cloud scenarios fortomorrow’s applications Alex Heneveld / @ahtweetin FIA/Cloud4SOA Workshop 7 May 2013