PaaS on OpenStack@natishalomCTO & Founder GigaSpaces
Agenda® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 2
Defining the PaaSThere is a difference between knowing the PaaS (path), and walking the PaaS (path).  Morpheus in “The Matrix”Quiz: What do youexpect from a PaaS?® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 3
Agenda® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 4
Different  Paths to PaaSProductivity vs. Control tradeoffs® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 5
Google App Engine Architecture® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 6
Control assumptions® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 7YouHW configurationOperating systemLanguage (Java/Paython)Middleware stack (data-base, messaging,…)ArchitecturePerformance (Quota : CPU, Mem, Net,..)Data center locationApplication CodeSelecting the middleware stack from a predefined list.
Heroku Architecture® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 8Routing MeshDynoGridSQL DatabaseMemory Cache
Control assumptions® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 9YouHW configurationOperating systemLanguage (Ruby)Middleware stack (data-base, messaging…)Flexibility of choicesArchitecturePerformance (dyno)Data center locationApplication CodeSelecting the middleware stack from a predefined list
Elastic Beanstalk ArchitectureElastic BeanstalkApplicationhttp://myapp-staging.elasticbeanstalk.com/VersionEnvironmentElastic Load BalancerAutoScalingEC2 InstancesEC2 InstancesEC2 InstancesVersionVersionApacheElastic BeanstalkHost ManagerTomcatYour Running ApplicationAmazon Linux AMI10® Copyright 2011 Gigaspaces Ltd. All Rights Reserved
Control assumptionsAmazonOperating systemLanguage (Java)Middleware stack (tomcat, RDS…)Can be easily extendedArchitecture (Web)StorageData centerYouApplication CodeSelecting the middleware stack (anything beyond tomcat)HW configurationPerformance Limited control over the OS using linux toolsJVM tuning/configuration® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 11
Productivity MythsYou have to give up control for more simplicityNot always…Less code = more productivityProductivity is measured by units of features being delivered (not lines of code)Opinionated architecture (Rails/Grails) is extremely productive® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 12“..developing on GAE introduced such a design complexity that working around it pushes us 5 months behind schedule.”Carlos Ble's post Goodbye Google App Engine
So Who’s Better?Google/HerokuTop-down sandbox approachHighly opinionatedDesigned for extreme simplicity at expense of user control Amazon Bottom-up approachDesigned for extreme simplicity with a significantly higher degree of control® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 13Fits a small subset of appsFits a larger spectrum of apps
Agenda® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 14
PaaS on OpenStack – Aim Higher Anyone should be able to:Build their own PaaS in a snapRun on any cloud (public/private)Gain multi-tenancy, elasticity… Without code changes.Provide a significantly higher degree of control without substantial complexityLanguage choiceOSMiddleware stackShould come pre-integrated with popular stackSpring,Tomcat, DevOps, NoSQL, Hadoop…Designed to run the most demanding mission-critical apps ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 15
The Building Blocks..® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 16
Service Orchestration Layer® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 17GigaSpaces Application ClusterDeployControlGrid Service ContainerGrid Service ContainerGrid Service ContainerGrid Service ManagerAgentAgentAgentPublic CloudPrivate CloudBare metal Scale-inScale-outData Center/Cloud
 Life cycle
 Provisioning
 Monitoring
 StatisticsGrid Service ContainerAgentZoom-In…18® Copyright 2011 Gigaspaces Ltd. All Rights Reserved
Service Recipe (Proposal)service {  name "cassandra-service"  icon new File("icon.png")  defaultScalingUnit "small"  IpRange "*.*.*.*"  lifecycle {    //life cycle events can be shell scripts or groovy closures that receive the admin as a parameter    //here you can implement logic to download binaries from any repository or file server    install {ServiceContextserviceContext ->      myCalculatedParam = serviceContext.serviceInstance.localHostAddress.hostName;      masterNodeIp = serviceContext.getServiceInstanceMatching(name("cassandra-master")).localHostAddress.hostName      serviceContext.environmentParameters["localHostName"] = myCalculatedParam;      port = serviceContext.portLocator.nextAvailablePort      serviceContext.environmentParameters["port"] = port      //inject runtime parameters to a config file / script using a utility class      serviceContext.templateReplacer.replace("cassandra.yaml", serviceContext.environmentParameters)      "install.sh".execute();    }    uninstall "install.sh"    relocate "relocate.sh"    preStart "pre-start.sh"    start "start.sh"    postStart "post-start.sh"    preShutdown "pre-shutdown.sh"    shutdown "shutdown.sh"    postShutdown "post-shutdown.sh"  }® Copyright 2011 GigaSpaces Ltd. All Rights Reserved 19
Service Recipe Monitors & SLAmonitoring {    pluginClass "org.openspaces.usm.JmxMetricsCollector"    config {      jmxOperations["org.apache.cassandra.db:CompactionManager:CompletedTasks:Cassandra": "Completed Tasks",                    "org.apache.cassandra.db:CompactionManager:PendingTasks:Cassandra": "Pending Tasks",                    "org.apache.cassandra.db:CompactionManager:ColumnFamilyInProgress:Cassandra": "Column Family In Progress"];      jmxHost "127.0.0.1";      jmxPort 8080;    }  }  sla {    deploymentConstraints {      scalingUnit small    }    scalingRules {      rule {        priority 1        when {thisSerice().anyInstace."Disk Space".lessThan(30.MB) }        add 2.ScalingUnits      }      rule {        priority 2        when {thisSerice().anyInstace."CPU Utilization".lessThan(30.Percent).for(5.Minutes)}        remove 1.ScalingUnit      }      rule {        when (alertOfType("CPU Utilization").raisedFor(anyServiceNode()))      }      //    }  } ® Copyright 2011 GigaSpaces Ltd. All Rights Reserved 20
Agenda® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 21
How does it work?You take the control seat.
The DemoUse Cassandra as a private case for a serviceDemonstrate what it takes toDeployManageHandle failureScaleMonitor ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 23
The Deployment Process® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 24Elastic ServiceManagerDevOps CLI2) PackCassandraInstallation6) Start cassandraGrid Service Container3) Deploy5) Start containersAgentCassandraInstancesGrid Service Container1) Deploy Cassandra4) Provision  a Machine and installGigaSpacesAgentCassandraInstances7) Add instance
Continuous Availability® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 25Instance failureUSM starts new instance Grid Service ContainerGrid Service ContainerGrid Service ContainerMachine failureAgentAgentElastic ServiceManagerElastic manager starts a new instance on another machineCassandraInstancesCassandraInstances
Continuous Scalability® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 26Not enough resources to meet the SLAAdd resources to meet the SLAElastic ServiceManagerGrid Service ContainerGrid Service ContainerGrid Service ContainerGrid Service ContainerAgentAgentAgentAgentCassandraInstancesCassandraInstancesCassandraInstancesCassandraInstancesMonitor
Multi-Tenancy® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 27Elastic ServiceManagerAdd shared tenantGrid Service ContainerGrid Service ContainerTenant BAgentAgentTenant ATenant CAdd private tenant
Composite Application® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 28Elastic ServiceManagerGrid Service ContainerGrid Service ContainerAgentAgentApacheTomcatGrid Service ContainerAgentCassandra
MonitoringRedirect console outputMonitor statistics through JMXPluggable monitoringManagement console:WebCLIAPI (REST, Groovy, Java)Alerts® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 29
Current StatusJClouds provider for OpenStack is readyDeveloped in Collaboration with GridDynamics & Adrian ColeIntegrated with OpenStack/Cactus buildRequired a few patch updates to OpenStack code baseContinuous collaboration with CitrixIntegrate the platform with the underlying IaaS stackBetter performance/utilizationFull stack (pre-engineered) enterprise-ready solution ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 30

PaaS on Openstack

  • 1.
  • 2.
    Agenda® Copyright 2011Gigaspaces Ltd. All Rights Reserved 2
  • 3.
    Defining the PaaSThereis a difference between knowing the PaaS (path), and walking the PaaS (path). Morpheus in “The Matrix”Quiz: What do youexpect from a PaaS?® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 3
  • 4.
    Agenda® Copyright 2011Gigaspaces Ltd. All Rights Reserved 4
  • 5.
    Different Pathsto PaaSProductivity vs. Control tradeoffs® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 5
  • 6.
    Google App EngineArchitecture® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 6
  • 7.
    Control assumptions® Copyright2011 Gigaspaces Ltd. All Rights Reserved 7YouHW configurationOperating systemLanguage (Java/Paython)Middleware stack (data-base, messaging,…)ArchitecturePerformance (Quota : CPU, Mem, Net,..)Data center locationApplication CodeSelecting the middleware stack from a predefined list.
  • 8.
    Heroku Architecture® Copyright2011 Gigaspaces Ltd. All Rights Reserved 8Routing MeshDynoGridSQL DatabaseMemory Cache
  • 9.
    Control assumptions® Copyright2011 Gigaspaces Ltd. All Rights Reserved 9YouHW configurationOperating systemLanguage (Ruby)Middleware stack (data-base, messaging…)Flexibility of choicesArchitecturePerformance (dyno)Data center locationApplication CodeSelecting the middleware stack from a predefined list
  • 10.
    Elastic Beanstalk ArchitectureElasticBeanstalkApplicationhttp://myapp-staging.elasticbeanstalk.com/VersionEnvironmentElastic Load BalancerAutoScalingEC2 InstancesEC2 InstancesEC2 InstancesVersionVersionApacheElastic BeanstalkHost ManagerTomcatYour Running ApplicationAmazon Linux AMI10® Copyright 2011 Gigaspaces Ltd. All Rights Reserved
  • 11.
    Control assumptionsAmazonOperating systemLanguage(Java)Middleware stack (tomcat, RDS…)Can be easily extendedArchitecture (Web)StorageData centerYouApplication CodeSelecting the middleware stack (anything beyond tomcat)HW configurationPerformance Limited control over the OS using linux toolsJVM tuning/configuration® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 11
  • 12.
    Productivity MythsYou haveto give up control for more simplicityNot always…Less code = more productivityProductivity is measured by units of features being delivered (not lines of code)Opinionated architecture (Rails/Grails) is extremely productive® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 12“..developing on GAE introduced such a design complexity that working around it pushes us 5 months behind schedule.”Carlos Ble's post Goodbye Google App Engine
  • 13.
    So Who’s Better?Google/HerokuTop-downsandbox approachHighly opinionatedDesigned for extreme simplicity at expense of user control Amazon Bottom-up approachDesigned for extreme simplicity with a significantly higher degree of control® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 13Fits a small subset of appsFits a larger spectrum of apps
  • 14.
    Agenda® Copyright 2011Gigaspaces Ltd. All Rights Reserved 14
  • 15.
    PaaS on OpenStack– Aim Higher Anyone should be able to:Build their own PaaS in a snapRun on any cloud (public/private)Gain multi-tenancy, elasticity… Without code changes.Provide a significantly higher degree of control without substantial complexityLanguage choiceOSMiddleware stackShould come pre-integrated with popular stackSpring,Tomcat, DevOps, NoSQL, Hadoop…Designed to run the most demanding mission-critical apps ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 15
  • 16.
    The Building Blocks..®Copyright 2011 Gigaspaces Ltd. All Rights Reserved 16
  • 17.
    Service Orchestration Layer®Copyright 2011 Gigaspaces Ltd. All Rights Reserved 17GigaSpaces Application ClusterDeployControlGrid Service ContainerGrid Service ContainerGrid Service ContainerGrid Service ManagerAgentAgentAgentPublic CloudPrivate CloudBare metal Scale-inScale-outData Center/Cloud
  • 18.
  • 19.
  • 20.
  • 21.
    StatisticsGrid ServiceContainerAgentZoom-In…18® Copyright 2011 Gigaspaces Ltd. All Rights Reserved
  • 22.
    Service Recipe (Proposal)service { name "cassandra-service"  icon new File("icon.png")  defaultScalingUnit "small"  IpRange "*.*.*.*"  lifecycle {    //life cycle events can be shell scripts or groovy closures that receive the admin as a parameter    //here you can implement logic to download binaries from any repository or file server    install {ServiceContextserviceContext ->      myCalculatedParam = serviceContext.serviceInstance.localHostAddress.hostName;      masterNodeIp = serviceContext.getServiceInstanceMatching(name("cassandra-master")).localHostAddress.hostName      serviceContext.environmentParameters["localHostName"] = myCalculatedParam;      port = serviceContext.portLocator.nextAvailablePort      serviceContext.environmentParameters["port"] = port      //inject runtime parameters to a config file / script using a utility class      serviceContext.templateReplacer.replace("cassandra.yaml", serviceContext.environmentParameters)      "install.sh".execute();    }    uninstall "install.sh"    relocate "relocate.sh"    preStart "pre-start.sh"    start "start.sh"    postStart "post-start.sh"    preShutdown "pre-shutdown.sh"    shutdown "shutdown.sh"    postShutdown "post-shutdown.sh"  }® Copyright 2011 GigaSpaces Ltd. All Rights Reserved 19
  • 23.
    Service Recipe Monitors& SLAmonitoring {    pluginClass "org.openspaces.usm.JmxMetricsCollector"    config {      jmxOperations["org.apache.cassandra.db:CompactionManager:CompletedTasks:Cassandra": "Completed Tasks",                    "org.apache.cassandra.db:CompactionManager:PendingTasks:Cassandra": "Pending Tasks",                    "org.apache.cassandra.db:CompactionManager:ColumnFamilyInProgress:Cassandra": "Column Family In Progress"];      jmxHost "127.0.0.1";      jmxPort 8080;    }  }  sla {    deploymentConstraints {      scalingUnit small    }    scalingRules {      rule {        priority 1        when {thisSerice().anyInstace."Disk Space".lessThan(30.MB) }        add 2.ScalingUnits      }      rule {        priority 2        when {thisSerice().anyInstace."CPU Utilization".lessThan(30.Percent).for(5.Minutes)}        remove 1.ScalingUnit      }      rule {        when (alertOfType("CPU Utilization").raisedFor(anyServiceNode()))      }      //    }  } ® Copyright 2011 GigaSpaces Ltd. All Rights Reserved 20
  • 24.
    Agenda® Copyright 2011Gigaspaces Ltd. All Rights Reserved 21
  • 25.
    How does itwork?You take the control seat.
  • 26.
    The DemoUse Cassandraas a private case for a serviceDemonstrate what it takes toDeployManageHandle failureScaleMonitor ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 23
  • 27.
    The Deployment Process®Copyright 2011 Gigaspaces Ltd. All Rights Reserved 24Elastic ServiceManagerDevOps CLI2) PackCassandraInstallation6) Start cassandraGrid Service Container3) Deploy5) Start containersAgentCassandraInstancesGrid Service Container1) Deploy Cassandra4) Provision a Machine and installGigaSpacesAgentCassandraInstances7) Add instance
  • 28.
    Continuous Availability® Copyright2011 Gigaspaces Ltd. All Rights Reserved 25Instance failureUSM starts new instance Grid Service ContainerGrid Service ContainerGrid Service ContainerMachine failureAgentAgentElastic ServiceManagerElastic manager starts a new instance on another machineCassandraInstancesCassandraInstances
  • 29.
    Continuous Scalability® Copyright2011 Gigaspaces Ltd. All Rights Reserved 26Not enough resources to meet the SLAAdd resources to meet the SLAElastic ServiceManagerGrid Service ContainerGrid Service ContainerGrid Service ContainerGrid Service ContainerAgentAgentAgentAgentCassandraInstancesCassandraInstancesCassandraInstancesCassandraInstancesMonitor
  • 30.
    Multi-Tenancy® Copyright 2011Gigaspaces Ltd. All Rights Reserved 27Elastic ServiceManagerAdd shared tenantGrid Service ContainerGrid Service ContainerTenant BAgentAgentTenant ATenant CAdd private tenant
  • 31.
    Composite Application® Copyright2011 Gigaspaces Ltd. All Rights Reserved 28Elastic ServiceManagerGrid Service ContainerGrid Service ContainerAgentAgentApacheTomcatGrid Service ContainerAgentCassandra
  • 32.
    MonitoringRedirect console outputMonitorstatistics through JMXPluggable monitoringManagement console:WebCLIAPI (REST, Groovy, Java)Alerts® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 29
  • 33.
    Current StatusJClouds providerfor OpenStack is readyDeveloped in Collaboration with GridDynamics & Adrian ColeIntegrated with OpenStack/Cactus buildRequired a few patch updates to OpenStack code baseContinuous collaboration with CitrixIntegrate the platform with the underlying IaaS stackBetter performance/utilizationFull stack (pre-engineered) enterprise-ready solution ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 30

Editor's Notes

  • #13 How to measure productivityA generally accepted working definition of programmer productivity needs to be established and agreed upon. Appropriate metrics need to established. Productivity needs to be viewed over the lifetime of code. Example: Programmer A writes code in a shorter interval than programmer B but programmer A's code is of lower quality and months later requires additional effort to match the quality of programmer B's code; in such a case, it is fair to claim that programmer B was actually more productive.You have to give up control for better simplicityTrue in some cases – but there are many cases were better control gets you more productivity for example – choosing your own OS can get you better performance, save bugs through patches that was already addressed etc , choosing your own selection of middleware packages can save the need to develop things that was already addressed through the ecosystem,..Productivity is measured by the number of lines of codeProductivity is measured by units of features being delivered (not lines of code)Development languages is only a small measure – take scala or earlnag for example. You can code the same thing that you would do in Java in few lines of code but it doesn’t come with strong development tools support, adminstration tools, and its hard to find skilled programmer in Scala – so even in the case that you could write less code for the same feature it doesn’t means that you would be able to deliver more features faster.Opinionated architecture (Rails/Grails) gets your more productivityTrue only if you stick to the exact design concept – but in reality architecture change and doesn’t always fits to all cases – in those cases designing to an opinionated approach can be significantly more complex.. (See the Twitter example, they started with Rails and over time found out that they needed something different – at the time Rails became extremely un productive to address their new needs and coding around it was extremely difficult that twitter decided to move away from it to Java/Scala…)