Ari LernerMichael Fairchild

Interactive R&D

I have a great idea!

This site, ts lets you post messages to your friends, and they can follow you...

write an application...

write an application... instantiate servers...

write an application... instantiate servers... configure servers...

write an application... instantiate servers... configure servers... scale them up...

write an application... instantiate servers... configure servers... scale them up... reconfigure...

write an application... instantiate servers... configure servers... scale them up... reconfigure.. scale down...

and pay for it ?!?

Wouldn’t it be nice if you could just write one file to do all that?

clouds.rb

cloud :twitterclone do end

cloud :twitterclone do instances 1..40 end

cloud :twitterclone do instances 1..40 using :ec2 end

It’s just Ruby

cloud :twitterclone do instances 1..40 using :ec2 has_file "/etc/motd" do content "hello you" end end

Let’s go already!

write an application... instantiate servers... configure servers... scale them up... reconfigure.. scale down...

Ew

cloud-start

cloud­start ­s examples/fairchild.rb  *** Starting cloud pp1 0 running instances (1 ­ 3) Adding default gem depdendencies ... 75.101.181.64 stderr => [Sat, 04 Apr 2009 16:46:01 +0000] INFO: Ran  execute[line_in_/etc/profile] successfully [Sat, 04 Apr 2009 16:46:01 +0000] INFO: Chef Run complete in 29.883499  seconds         Your cloud has started. Your ip is 75.101.181.64         Your cloud has started. Your ip is 75.101.181.64         Your cloud has started. Your ip is 75.101.181.64         Your cloud has started. Your ip is 75.101.181.64         Your cloud has started. Your ip is 75.101.181.64         Your cloud has started. Your ip is 75.101.181.64         Your cloud has started. Your ip is 75.101.181.64         Your cloud has started. Your ip is 75.101.181.64

launching...

bootstrapping...

configuring...

cloud-list

$ cloud­list ­s examples/fairchild.rb *** Listing cloud pp1 ****** Active instances master 75.101.181.64 i­516f0f38

cloud-ssh
cloud­ssh ­s examples/fairchild.rb master 75.101.181.64 i­516f0f38 Welcome to your PoolParty instance root@ip­10­251­201­157:~#

poolparty core resources crondirectoryexecfil ehostmountpackage remote_filesymlinku servariable

Puppet

Chef
“Chef is a state based, declarative configuration management engine. You define recipes of how you want your system to look and then chef makes it so.”
~Ezra Zygmuntovich

include_recipe "apache2" include_recipe "passenger" include_recipe "rails" web_app "paparazzi" do docroot "/var/www/paparazzi/public" template "paparazzi.conf.erb" server_name "www.paparazzi.com" server_aliases [node[:hostname], node[:fqdn], "paparazzi.com"] rails_env "production" end

chef do include_recipies "~/recipies/*" has_git_repos :name => "/srv/paparazzi" do source "git://github.com/auser/paparazzi.git" at "/srv" end

cloud :twitterclone do instances 1..1000 using :ec2 chef do include_recipes "~/recipies/*" has_git_repos :name => "/var/www/paparazzi" do source "git://github.com/auser/paparazzi.git" at "/var/www" end end

cloud-configure

Pushes configuration changes to the cloud

2building file list ... donedr_configure/clouds.jsondr

Idempotent

unchanged when multiplied by itself

Run it more than once and it won’t change things unless it should

cloud-configure

cloud-configure

cloud-configure

Recipes already available?

OMG!
Oprah mentioned twitterclone!

cloud :twitterclone do instances 1..40 expand_when 'load > 0.8' contract_when 'load < 0.3' end

collective metrics averaged across the cloud

Unequal use of resources

My database server is overloaded but my web server isn’t

multiple clouds

pool :twitterclone do instances 1..4000 cloud :db do expand_when "memory > 0.9" end cloud :webserver do maximum_instances 10 expand_when "load > 1.2" end end

cloud :twitterclone do end
Defaults :instances => 2..5 :using => :ec2 :ami => 'alestic ubuntu 8.1' :contract_when => "load < 0.65" :expand_when => "load > 1.9"

Decentralized

PoolParty does not make application assumptions

Only cloud architecture

python c Ruby (my)(postgre)sql(lite) PHP

Whatever

web applications data mining transcoding cloud email blasting cloud particle beam simulation cloud (getting girls) social networks

the sky is the limit

future

more remoter bases

using using using using using using :ssh :ssh

:ec2 :vmware :gogrid :slicehost :vbox :ssh

Add Your Own!

launch_new_instance! terminate_instance(id) describe_instance(id) describe_instances

scripted deployment testing

dslify aska parenting butterfly commander (soon) commander (soon) commander (soon) commander (soon)

Butterfly

HTTP for internode communication

of DNS round-robin load balancing round-robin load balancing round-robin load

nominate actions based on local state

Alternatives

console

cloud-terminate

http://poolpartyrb.com #poolpartyrb
(@freenode) (@freenode) (@freenode) alerner@atti.com (@freenode)

mfairchild@atti.com

Questions?

Thank you

Interactive R&D

Sign up to vote on this title
UsefulNot useful