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
cloudstart 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
$ cloudlist s examples/fairchild.rb *** Listing cloud pp1 ****** Active instances master 75.101.181.64 i516f0f38
cloud-ssh cloudssh s examples/fairchild.rb master 75.101.181.64 i516f0f38 Welcome to your PoolParty instance root@ip10251201157:~#
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)
[email protected] (@freenode)
[email protected]
Questions?
Thank you
Interactive R&D