cloud foundry opentour kiev keynote
TRANSCRIPT
Cloud FoundryThe Open Platform as a Service
Patrick ChanezonSenior DirectorDeveloper [email protected]@chanezon Cloud Foundry OpenTour, Kiev, April 2012Tuesday, April 24, 12
P@ in a nutshell
• French, based in San Francisco
• Senior Director, Developer Relations, VMware
• Software Plumber, API guy, mix of Enterprise and Consumer
• 18 years writing software, backend guy with a taste for javascript
• 2 y Accenture (Notes guru), 3 y Netscape/AOL (Servers, Portals), 5 y Sun (ecommerce, blogs, Portals, feeds, open source)
• 6 years at Google, API guy (first hired, helped start the team)
• Adwords, Checkout, Social, HTML5, Cloud
Tuesday, April 24, 12
Dreams Of my childhood
3
Tuesday, April 24, 12
Accelerando / Singularity, in a Galaxy far far away
§ Even if we automate ourselves out of a job every 10 years
§ ...I don’t think the singularity is near!
4
Tuesday, April 24, 12
Moore's Law is for Hardware Only
§ Does not apply to software
§ Productivity gains not keeping up with hardware and bandwidth
§ Writing software is hard, painful, and still very much a craft
5
Tuesday, April 24, 12
Moore's Law’s free lunch is over
§ Herb Sutter, Welcome to the Junglehttp://herbsutter.com/welcome-to-the-jungle/
6
Tuesday, April 24, 12
Future
“The future is already here — it's just not very evenly distributed” William Gibson
7
Tuesday, April 24, 12
Haiku - Skylark
“Trampling on clouds,inhaling the mist,the skylark soars” —SHIKI
8
Tuesday, April 24, 12
Haiku - Frog
“Crouching,studying the clouds—a frog”CHIYO-JO
9
Tuesday, April 24, 12
Architecture Changes: 60’s Mainframe
Tuesday, April 24, 12
Architecture Changes: 80’s Client-Server
Tuesday, April 24, 12
Architecture Changes: 90’s Web
Tuesday, April 24, 12
Architecture Changes: 2010’s Cloud, HTML5, Mobile
Tuesday, April 24, 12
Back to Client Server: Groovy Baby!
14
Tuesday, April 24, 12
What is Cloud Computing?
15
Cloud According to my daughter Eliette
Tuesday, April 24, 12
What is Cloud Computing?
16
Cloud at Михайлівський золотоверхий монастир
Tuesday, April 24, 12
Cloud Stack - Classic Pyramid
17
Platform As A Service
Infrastructure As A Service
SoftwareAs A Service
Tuesday, April 24, 12
Cloud Stack - By Value
18
InfrastructureAs A Service
SoftwareAs A Service
Platform As A Service
Tuesday, April 24, 12
Cloud Stack - History
§ What does cloud mean, 4 main angles• Software 1994 Netscape
• Infrastructure 2002 Amazon AWS
• Platform 2008 Google
• Development now!
19
§ Industrialization of hardware and software infrastructurelike electricity beginning of 20th century
§ But software development itself is moving towards craftmanship
Tuesday, April 24, 12
Cloud started at Consumer websites solving their needs
• Google, Amazon, Yahoo, Facebook, Twitter
• Large Data Sets
• Storage Capacity growing faster than Moore’s Law
• Fast Networks
• Horizontal -> Vertical scalability
• Open Source Software
• Virtualization
• Cloud is a productization of these infrastructures
• Public Clouds Services: Google, Amazon
• Open Source Software: Hadoop, Eucalyptus, Ubuntu, Cloud Foundry
Tuesday, April 24, 12
21
Infrastructure
Tuesday, April 24, 12
IaaS/Virtualization getting mainstream
§ AWS, Joyent, Rackspace,...
§ Open Source projects: OpenStack, DeltaCloud, Eucalyptus
§ Automation: Chef, Juju
§ Standardization? DMTF
§ Inside the Firewall, Virtualization: VMware, Microsoft, Xen, KVM
§ 50% of workloads are virtualized
§ Easy to provision, manage instance...BUT
§ Still need to manage backups, software stacks, monitor, upgrades
22
Tuesday, April 24, 12
With Infrastructure, you still need to build your own platform
§ Need to build a distributed platform on top of you infrastructure
§ Story of the AWS meltdown from last summer• http://blog.reddit.com/2011/03/why-reddit-was-down-for-6-of-last-24.html
• http://www.readwriteweb.com/cloud/2010/12/chaos-monkey-how-netflix-uses.php
• http://news.ycombinator.com/item?id=2477296
• http://stu.mp/2011/04/the-cloud-is-not-a-silver-bullet.html
§ Twilio, Smugmug, SimpleGeo survived it because they built their own distributed platform on top of IaaS
§ Enterprise customers want to consider Infrastructure like CDNs• Multi Cloud usage
• Based on Open Source de facto standards, or full standards whenever that happens
23
Tuesday, April 24, 12
24
Platforms
Tuesday, April 24, 12
Platforms
§ Raise the Unit of currency to be application & services instead of infrastructure
§ Google App Engine, Cloud Foundry, Joyent, Heroku, Stax (Cloudbees), Amazon elastic beanstalk, Microsoft Azure, AppFog
§ Single or a few languages, services
§ Start of Multi language Polyglot platforms
§ Enabler for Agile Developers -> Create Business value faster
§ Lack of standards: risk, vendor lock-in
§ Enterprise needs:•Control, customizability
•Private/Hybrid Cloud
•Avoid lock-in
25
Tuesday, April 24, 12
Agile Development Processes
Tuesday, April 24, 12
Agility as a survival skill
§ Consumer software is becoming like fashion•Phone apps, social apps, short lifetime, fast lifecycles
•Ab testing
§ Clay shirky situational apps
§ Kent Beck, Usenix 2011 Talk, “Software G-Forces”change in software process when frequency grows
§ Cloud Platforms enables an Agile culture, driver for innovation•Scalability is built in the platforms
•Can iterate faster
•Focus on design
§ Cloud Platforms lets developers focus on driving business value
27
Tuesday, April 24, 12
Main Risk: Lock-In
28
Welcome to the hotel californiaSuch a lovely placeSuch a lovely facePlenty of room at the hotel californiaAny time of year, you can find it here
Last thing I remember, I wasRunning for the doorI had to find the passage backTo the place I was before’relax,’ said the night man,We are programmed to receive.You can checkout any time you like,But you can never leave!
Tuesday, April 24, 12
Cloud Foundry: The Open PaaS
29
Clou
d Pr
ovide
r Int
erfa
ce
Application Service Private Clouds
PublicCloud
MicroCloud
Data Services
Other Services
Msg Services
vFabric Postgres
vFabric RabbitMQTM
• Open Source: Apache 2 Licensed
• multi language/frameworks
• multi services
• multi cloud
Tuesday, April 24, 12
30
Open Source
Tuesday, April 24, 12
Open Source Advantage
§ http://code.google.com/p/googleappengine/issues/detail?id=13
31
• https://github.com/cloudfoundry/vcap/pull/25
Tuesday, April 24, 12
32
CloudFoundry.org
Tuesday, April 24, 12
33
Cloud Foundry Open Source Workflow
Reviewers +2/-2
test verification score ✓ ✗ git push triggers test execution
Gerrit Code Review
reviews.cloudfoundry.org
Jenkins CI
ci.cloudfoundry.org
github
github.com/cloudfoundry
+1/-1 Committers
on +2 and ✓ change pushed to github
cloudfoundry.com
production updated ~2x/week
Tuesday, April 24, 12
34
Multi Cloud
Tuesday, April 24, 12
35
CloudFoundry.COM
Runtimes & Frameworks
Services
vCenter / vSphere
Cloud Foundry
Infrastructure
Tuesday, April 24, 12
36
Cloud Foundry.ORG
The Source Code to Compile & Build Cloud Foundry
vCenter / vSphere
Cloud Foundry
DownloadCode
Setup Environment
Deploy Behind Firewall
Setup Scripts
Tuesday, April 24, 12
Micro Cloud Foundry
37
Micro
Tuesday, April 24, 12
What is a Micro Cloud?
38
Entire Cloud Running inside of a single VM
Or
Tuesday, April 24, 12
What is in Micro Cloud Foundry?
39
Open source Platform as a Service project
App Instances Services
10.04
Dynamic Updating DNS
.COM
Tuesday, April 24, 12
Other Cloud Foundry powered PaaS
40
Private PaaS
Added Python and Perl
Public PaaS
Added PHP
Tier3 and Uhuru recently added .NET support
Tuesday, April 24, 12
Register today
41
http://cloudfoundry.com/signup
CFOpenTour2012Use Promo Code
To avoid approval queue waiting time
Tuesday, April 24, 12
42
Cloud Foundry BOSH
Tuesday, April 24, 12
43
§ 500 – 5,000 VMs
§ 40+ unique node types
§ 75+ unique software packages
§ 75+ unique environments
§ 2x/week cf.com updates
§ 24x7x365 non-stop operation
§ No-downtime deployments
§ Reliable, robust, repeatable deployments, updates, capacity adjustments
§ Small teams manage many instances
Production Grade Cloud Foundry Clusters
Google style problem è Google style solution
cloudfoundry.com
production, staging, stress, qa, dev
Tuesday, April 24, 12
44
§ Cloud Foundry BOSH is an open source tool-chain for release engineering, deployment, and lifecycle management of large scale distributed services• Prescriptive way of creating releases and managing systems and services
• It is not a collection of shell scripts, not a pile of Perl
§ Built to deploy and manage production-class, large scale clusters• Production grade Cloud Foundry clusters: 500+ VMs, 40+ jobs, 75+ packages
• Multi-node, multi-tier, complex clusters: e.g., our Gerrit/Jenkins Cluster
§ Built for devops usage and scale by a crack team of veterans• A project, not a product: command line interface, YAML, etc.
• Continuous improvement, iterative development, rough edges
Cloud Foundry BOSH
github.com/cloudfoundry/bosh
Tuesday, April 24, 12
45
BOSH: under the hood
bosh cli
redis natsdb
director healthmon
IaaS CPI
workers
stemcellagent
blobs
“BOSH is deployed by BOSH”
cloudfoundry.com
BOSH User
active jobs
disk
Tuesday, April 24, 12
46
IaaS neutral by design
CPI: code completefunctional status: “work in progress”
vSphere: battle tested implementation, thousands of deployments
vCloud Director: “work in progress”, 2H 2012
contribute: github.com/cloudfoundry/bosh
Cloud Provider Interface (CPI)
Cloud Foundry BOSH
Tuesday, April 24, 12
Cloud for Developers: the true path is PaaS!
47
Tuesday, April 24, 12
48
Development As A
Service
Tuesday, April 24, 12
Development
§ Final frontier, happening now
§ Not whole product yet
§ Social Coding: Google code, Github
§ Web IDEs: Cloud9, Exo, Orion
§ Higher level case tools, Wavemaker, Orangescape, Runmyprocess
§ Continuous Integration: Jenkins, Cloudbees, OpenShift
§ Test: feature of cloud platforms
§ Knowledge Sharing: StackOverflow
49
Tuesday, April 24, 12
50
DemoExo Cloud IDE
Mark DowneyCloud Services Product Manager, Exo Platforms
Twitter: @marksdowney
Tuesday, April 24, 12
51
Lessons for Developers
Tuesday, April 24, 12
Predictions
§ Software is becoming like fashion, design rules
§ Welcome to Babel, use the best tool for the job, embrace multiple language & heterogeneity
§ Our jobs will change, build yourself out of your current job
§ Sysadmin jobs will morph, there will be less of them
§ Many opportunities open when you embrace change
52
Tuesday, April 24, 12
Things to Forget
§ First normal form
§ Waterfall model
§ Single server deployment
§ Single language skill
§ Build everything from scratch
§ Build custom infrastructure
53
Tuesday, April 24, 12
Things to Learn
• Agile
• Take risks, fail often, fail fast and learn
• API Design: create the API first
• UI Design, Javacript, HTML5, CSS3
• A/B Testing
• Open Source, Open Standards
• Architecture, Distributed Computing (CAP theorem, 8 fallacies)
• Cloud Platforms and APIs
• Multiple types of languages (imperative, object, functional, logic)
• Ability to encapsulate domain knowledge in a DSL
• Build on the shoulders of giants: reuse, REST APIs
• Pick your battles, choose what you need to build yourself to add value
• Learn to live in a box (embrace platform limitations) to think outside the box
• Use an App Store for distribution
• Consider your career as a startup54
Tuesday, April 24, 12
Tuesday, April 24, 12
Such stuff as dreams are made on
§ Like a kid on a candy store: there's never been a better time to be a software developer!
§ Welcome to the Cloud: embrace change and reinvent yourselves
§ “The future is already there, not evenly distributed” Gibson
§ We Developers, invent the future today
56
Tuesday, April 24, 12
developer perspective v2.0
sample app
polyglot in actionby Mark Lucovsky
57
Tuesday, April 24, 12
developer perspective v2.058
Tuesday, April 24, 12
developer perspective v2.0
stac2: load generation system
59
redis
stac2frontend
api server
vmc worker http worker
http json
redis apirpush
blpop blpopredis api
- 2 x 128mb- ruby 1.8.7, sinatra
- 16 x 128mb*- node.JS, 0.6.8
- 16 x 128mb*- node.JS, 0.6.8
- 96 x 128mb- ruby 1.8.7, sinatra
json-p- jQuery, jQuery UI- haml templates- 100% JS based UI
* - api server and http worker share the same node.JS process/instance
emailreports
smtp
Tuesday, April 24, 12
developer perspective v2.0
deployment instructions
60
$ cd ~/stac2$ vmc push
Tuesday, April 24, 12
developer perspective v2.0
how is this possible?$ cd ~/stac2; cat manifest.ymlapplications: ./nabh: instances: 16 mem: 128M runtime: node06 url: ${name}.${target-‐base} services: nab-‐redis: type: :redis./nabv: instances: 96 mem: 128M runtime: ruby18 url: ${name}.${target-‐base} services: nab-‐redis: type: :redis./stac2: instances: 2 mem: 128M runtime: ruby18 url: ${name}.${target-‐base}
61
Tuesday, April 24, 12
developer perspective v2.0
design tidbits
62
• producer/consumer pattern using rpush/blpop
• node.JS: multi-server and high performance async i/o
• caldecott – aka vmc tunnel for debugging
• redis sorted sets for stats collection
• redis expiring keys for rate calculation
Tuesday, April 24, 12
developer perspective v2.0
producer/consumer
• core design pattern
• found at the heart of many complex apps
63
classic mode:- thread pools- semaphore/mutex, completion ports, etc.- scalability limited to visibility of the work queue
consumerwork queueproducer work work
cloud foundry mode:- instance pools- redis rpush/blpop, rabbit queues, etc.- full horizontal scalability, cloud scale
Tuesday, April 24, 12
developer perspective v2.0
producer/consumer: code
64
// producerfunction commit_item(queue, item) { // push the work item onto the proper queue redis.rpush(queue, item, function(err, data) {
// optionally trim the queue, throwing away // data as needed to ensure the queue does // not grow unbounded if (!err && data > queueTrim) { redis.ltrim(queue, 0, queueTrim-‐1); } });}
// consumerfunction worker() { // blocking wait for workitems blpop_redis.blpop(queue, 0, function(err, data) { // data[0] == queue, data[1] == item if (!err) { doWork(data[1]); } process.nextTick(worker); });
Tuesday, April 24, 12
developer perspective v2.0
node.JS multi-server: http API server
65
// the api server handles two key load generation apis// /http – for http load, /vmc for Cloud Foundry API loadvar routes = {“/http”: httpCmd, “/vmc”: vmcCmd}
// http api server booted by app.js, passing redis client// and Cloud Foundry instance function boot(redis_client, cfinstance) { var redis = redis_client; function onRequest(request, response) { var u = url.parse(request.url); var path = u.pathname; if (routes[path] && typeof routes[path] == ‘function’) { routes[path](request, response); } else { response.writeHead(404, {‘Content-‐Type’: ‘text/plain’}); response.write(‘404 Not Found’); response.end(); } } server = http.createServer(onRequest).listen(cfinstance[‘port’]);}
Tuesday, April 24, 12
developer perspective v2.0
node.JS multi-server: blpop server
66
var blpop_redis = null;var status_redis = null;var cfinstance = null;
// blpop server handles work requests for http traffic// that are placed on the queue by the http API server// another blpop server sits in the ruby/sinatra VMC serverfunction boot(r1, r2, cfi) { // multiple redis clients due to concurrency constraints blpop_redis = r1; status_redis = r2; cfinstance = cfi; worker();}
// this is the blpop server loopfunction worker() { blpop_redis.blpop(queue, 0, function(err, data) { if (!err) { doWork(data[1]); } process.nextTick(worker); });}
Tuesday, April 24, 12
developer perspective v2.0
caldecott: aka vmc tunnel
67
# create a caldecott tunnel to the redis server$ vmc tunnel nab-‐redis redis-‐cliBinding Service [nab-‐redis]: OK…Launching 'redis-‐cli -‐h localhost -‐p 10000 -‐a ...’
# enumerate the keys used by stac2redis> keys vmc::staging::*1) “vmc::staging::actions::time_50”2) “vmc::staging::active_workers”…
# enumerate actions that took less that 50msredis> zrange vmc::staging::actions::time_50 0 -‐1 withscores1) “delete_app”2) “1”3) “login”4) “58676”5) “info”6) “80390”
# see how many work items we dumped due to concurrency constraintredis> get vmc::staging::wastegate“7829”
Tuesday, April 24, 12
developer perspective v2.0
redis sorted sets for stats collection
68
# log action into a sorted set, net result is set contains# actions and the number of times the action was executed# count total action count, and also per elapsed time bucketdef logAction(action, elapsedTimeBucket) # actionKey is the set for all counts # etKey is the set for a particular time bucket e.g., _1s, _50ms actionKey = “vmc::#{@cloud}::actions::action_set” etKey = “vmc::#{@cloud}::actions::times#{elapsedTimeBucket}” @redis.zincrby actionKey, 1, action @redis.zincrby etKey, 1, actionend
# enumerate actions and their associated countredis> zrange vmc::staging::actions::action_set 0 -‐1 withscores1) “login”2) “212092”3) “info”4) “212093”
# enumerate actions that took between 400ms and 1sredis> zrange vmc::staging::actions::time_400_1s 0 -‐1 withscores1) “create-‐app”2) “14”3) “bind-‐service”4) “75”
Tuesday, April 24, 12
developer perspective v2.0
redis incrby and expire for rate calcs
69
# to calculate rates (e.g., 4,000 requests per second)# we use plain old redis.incrby. the trick is that the # key contains the current 1sec timestamp as it’s suffix value# all activity that happens within this 1s period accumulates# in that key. by setting an expire on the key, the key is # automatically deleted 10s after last writedef logActionRate(cloud) tv = Time.now.tv_sec one_s_key = "vmc::#{cloud}::rate_1s::#{tv}"
# increment the bucket and set expires, key # will eventually expires Ns after the last write @redis.incrby one_s_key, 1 @redis.expire one_s_key, 10end
# return current rate by looking at the bucket for the previous # one second period. by looking further back and averaging, we # can smooth the rate calcdef actionRate(cloud) tv = Time.now.tv_sec -‐ 1 one_s_key = "vmc::#{cloud}::rate_1s::#{tv}" @redis.get one_s_keyend
Tuesday, April 24, 12
developer perspective v2.0
stac2 demo -or- screencast
70
Tuesday, April 24, 12
developer perspective v2.0
stac2 demo -or- screencast
70
Tuesday, April 24, 12
Cloud Foundry Resources
71
Primary Site : cloudfoundry.com
Open Source Site : cloudfoundry.org
Twitter : @cloudfoundry , hash tag #cfoundry
Blog : blog.cloudfoundry.com
FB : facebook.com/cloudfoundry
Support : support.cloudfoundry.com• Documentation
• Knowledge Base
• Q & A / Forums
We’re hiring: www.cloudfoundry.com/jobs
Tuesday, April 24, 12
72
Community
Oleg ZhurakouskySenior Software Engineer, SpringSource/VMware
Twitter: @z_oleg
Tuesday, April 24, 12
Questions
73
?Tuesday, April 24, 12
Thank You!@CloudFoundry
@chanezon
Website : www.cloudfoundry.comBlog : blog.cloudfoundry.comForum : support.cloudfoundry.com
t
t
Tuesday, April 24, 12
Books / Articles
§ Nick Carr, The Big Switch
§ Eric Raymond, The Art of Unix Programming
§ Weinberg, Psychology of Computer Programming
§ Wes python book
§ Mark html5 book
§ Kent Beck XP
§ Hunt, Thomas, The Pragmatic Programmer
§ Ade Oshineye, Apprenticeship Patterns
§ Matt Cutt's Ignite Talk IO 2011, Trying different things
§ Josh Bloch talk about api design
§ Larry and Sergey, Anatomy of a Search Engine
§ Rob Pike, The Practice of Programming
75
Tuesday, April 24, 12
Papers / Talks
§ Simon Wardley, Oscon 09 “Cloud - Why IT Matters”
§ Tim O’Reilly article on internet os
§ Peter Deutsch’s 8 Fallacies of Distributed Computing
§ Brewer’s CAP Theorem
§ Gregor Hohpe’s Starbucks Does Not Use Two-Phase Commit
§ Stuff I tag http://www.delicious.com/chanezon/
§ More specifically http://www.delicious.com/chanezon/cloudfoundry
§ My previous Talks http://www.slideshare.net/chanezon
§ My list of favorite books http://www.chanezon.com/pat/soft_books.html
76
Tuesday, April 24, 12
Acknowledgement
§ Drawings from my daughters Eliette
§ Slides from Dave McCrory, Derek Collison, Duke Leto
§ Haiku from Addiss, Stephen; Yamamoto, Fumiko; Yamamoto, Fumiko Y.; Yamamoto, Akira Y. (2011-06-22). Haiku: An Anthology of Japanese Poems (Shambhala Library)
§ Painting Hiroshige, Sengai
77
Tuesday, April 24, 12