3. Defining the PaaS There is a difference between knowing the PaaS (path), and walking the PaaS (path). Morpheus in “The Matrix” Quiz: What do you expect from a PaaS? ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 3
5. Different Paths to PaaS Productivity vs. Control tradeoffs ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 5
6. Google App Engine Architecture ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 6
7. Control assumptions ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 7 You HW configuration Operating system Language (Java/Paython) Middleware stack (data-base, messaging,…) Architecture Performance (Quota : CPU, Mem, Net,..) Data center location Application Code Selecting the middleware stack from a predefined list.
8. Heroku Architecture ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 8 Routing Mesh DynoGrid SQL Database Memory Cache
9. Control assumptions ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 9 You HW configuration Operating system Language (Ruby) Middleware stack (data-base, messaging…) Flexibility of choices Architecture Performance (dyno) Data center location Application Code Selecting the middleware stack from a predefined list
10. Elastic Beanstalk Architecture Elastic Beanstalk Application http://myapp-staging.elasticbeanstalk.com/ Version Environment Elastic Load Balancer Auto Scaling EC2 Instances EC2 Instances EC2 Instances Version Version Apache Elastic Beanstalk Host Manager Tomcat Your Running Application Amazon Linux AMI 10 ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved
11. Control assumptions Amazon Operating system Language (Java) Middleware stack (tomcat, RDS…) Can be easily extended Architecture (Web) Storage Data center You Application Code Selecting the middleware stack (anything beyond tomcat) HW configuration Performance Limited control over the OS using linux tools JVM tuning/configuration ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 11
12. Productivity Myths You have to give up control for more simplicity Not always… Less code = more productivity Productivity 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/Heroku Top-down sandbox approach Highly opinionated Designed for extreme simplicity at expense of user control Amazon Bottom-up approach Designed for extreme simplicity with a significantly higher degree of control ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 13 Fits a small subset of apps Fits a larger spectrum of apps
15. PaaS on OpenStack – Aim Higher Anyone should be able to: Build their own PaaS in a snap Run on any cloud (public/private) Gain multi-tenancy, elasticity… Without code changes. Provide a significantly higher degree of control without substantial complexity Language choice OS Middleware stack Should come pre-integrated with popular stack Spring,Tomcat, DevOps, NoSQL, Hadoop… Designed to run the most demanding mission-critical apps ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 15
17. Service Orchestration Layer ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 17 GigaSpaces Application Cluster Deploy Control Grid Service Container Grid Service Container Grid Service Container Grid Service Manager Agent Agent Agent Public Cloud Private Cloud Bare metal Scale-in Scale-out Data Center/Cloud
21. StatisticsGrid Service Container Agent Zoom-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 & SLA monitoring { 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
26. The Demo Use Cassandra as a private case for a service Demonstrate what it takes to Deploy Manage Handle failure Scale Monitor ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 23
27. The Deployment Process ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 24 Elastic Service Manager DevOps CLI 2) Pack Cassandra Installation 6) Start cassandra Grid Service Container 3) Deploy 5) Start containers Agent Cassandra Instances Grid Service Container 1) Deploy Cassandra 4) Provision a Machine and install GigaSpaces Agent Cassandra Instances 7) Add instance
28. Continuous Availability ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 25 Instance failure USM starts new instance Grid Service Container Grid Service Container Grid Service Container Machine failure Agent Agent Elastic Service Manager Elastic manager starts a new instance on another machine Cassandra Instances Cassandra Instances
29. Continuous Scalability ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 26 Not enough resources to meet the SLA Add resources to meet the SLA Elastic Service Manager Grid Service Container Grid Service Container Grid Service Container Grid Service Container Agent Agent Agent Agent Cassandra Instances Cassandra Instances Cassandra Instances Cassandra Instances Monitor
30. Multi-Tenancy ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 27 Elastic Service Manager Add shared tenant Grid Service Container Grid Service Container Tenant B Agent Agent Tenant A Tenant C Add private tenant
31. Composite Application ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 28 Elastic Service Manager Grid Service Container Grid Service Container Agent Agent Apache Tomcat Grid Service Container Agent Cassandra
32. Monitoring Redirect console output Monitor statistics through JMX Pluggable monitoring Management console: Web CLI API (REST, Groovy, Java) Alerts ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 29
33. Current Status JClouds provider for OpenStack is ready Developed in Collaboration with GridDynamics & Adrian Cole Integrated with OpenStack/Cactus build Required a few patch updates to OpenStack code base Continuous collaboration with Citrix Integrate the platform with the underlying IaaS stack Better performance/utilization Full stack (pre-engineered) enterprise-ready solution ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 30
34. Join the Effort Call for action Try out the provider jclouds Establish a PaaS working group to drive PaaS within OpenStack community Register now for the beta program www.gigaspaces.com Learn more.. natishalom.typepad.com blog.gigaspaces.com ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 31
35. Summary Curving out complexity, opinionated architecture, relying on someone else’s stack is only one way to achieve productivity at the expense of control With OpenStack we can aim higher and make the application infrastructure simpler and better suited for the cloud in the first place ® Copyright 2011 Gigaspaces Ltd. All Rights Reserved 32
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…)