You are on page 1of 77

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 :ec2
using :vmware
using :gogrid
using :slicehost
using :vbox
using :ssh
:ssh
: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

You might also like