Beyond the Buzzword
● Cloud user – from small personal projects to
millions of users
● Java, Scala, etc.
● StackOverflow *cough*
● twitter: @bozhobg
The cloud: what is it?
● “the internet”
● “something remote, parts of the
infrastructure of which is managed by
● ...and other incompetent
● Cloud computing (CPU as a Service)
● SaaS - Software as a Service
● PaaS - Platform as a Service
● IaaS - Infrastructure as a Service
SaaS - Software as a Service
● Your software is “in the cloud” from the point of view of
● multi-tenant software
● DropBox, SalesForce, Gmail, JIRA, GitHub
● pros – easy upgrade, can’t be cracked, users don’t have
to manage infrastructure
● cons – internet connection dependence, ownership of
data, privacy, harder to personalize
PaaS - Platform as a Service
● Providers give a platform with limited access where you
deploy your application
● Components are plugins (databases,message queues,
caches, log collection, monitoring, etc…)
● Heroku, CloudFoundry, OpenShift, GoogleAppEngine
● pros: easy setup (UI/CLI), no server administration
experience needed, supports autoscaling, cheap.
● cons: sandbox, specific learning curve, hard plugin
version management, privacy.
IaaS - Infrastructure as as Service
● You get virtual machines and APIs/UI, to manage them
● The provider takes care only of the infrastructure
● Amazon AWS, ??? (Microsoft Azure, Rackspace,
● pros – almost complete freedom, cheaper than own
data-center  , auto-scaling, extras.
● Cons - learning curve, privacy, single provider
AWS (Amazon Web Services)
● pioneers and market leaders
● API, CLI
● extras: S3, CloudFront, CloudWatch, RDS,
SQS, SES, SNS, ElastiCache, Beanstalk
● multiple regions, multiple availability zones
● prices are dropping; spot instances
● valid for both PaaS and IaaS
● Conditionally starting and stopping virtual machines
(based on CPU, memory, I/O, network I/O)
● Keeping a certain number of machines up, in case one
or more “die”.
● The harder part: making your application scale
● virtual machines (instances) die often
● Information written on them is lost.
Alternatives: EBS, S3, clusters
● A whole availability zone (= data center) can
● chaos monkey
● => good practices
● Servers, networks, access control, load balancers, etc.
– declared with a script.
● AWS CloudFormation - JSON-based language for
● calling shell scripts on initialization = endless
● Allows for almost identical environments for test,
Should we be “in the cloud”
● It depends
● To be “in the cloud” is not a marketing
decision - it’s a technical choice.
● SaaS doesn’t mean you are “in the cloud”, it
means your software is in the cloud from
your users’ perspective
● in any case - embrace failure