They used to be pets, then we turned them into cattle, when all we ever wanted was a good steak.
Developers just want to run code reliably and repeatably. Instead, they spend their time with pet servers or caring for their herd. We’ve relegated hardware to a distant memory, and it is time to do the same for our idea of what a server is.
In this talk, James and Fernando will cover the landscape of cloud computing, and how the evolution from pets to cattle is moving fast towards 'just the steak'. They will contrast between serverless solutions and container orchestration, and the bright future for application developers in the cloud.
This is the age of computing steak, exactly how you like it done. Compute on demand, when you need it, for as long as you need it.
These are our opinions based on our experience, we are consultants, so if you hire us we will probably be expressing these opinions.
This is a pivot point in the industry
We don’t think we all get it yet: we’re still thinking about servers
We’ve had some experiences that are worth sharing
http://www.acreditanisso.com.br/wp-content/uploads/2015/11/vaca9.jpg
nano talks about physical servers and star wars and uptime racers
Uptime racers story, 3 years without rebooting the server
james: 3 years without security patches?
overspecing, possibly black friday example
NOT supposed to name
Not suppose to keep them around
Scale up and down
2 ways for cattle
IAAS - too low level, have to to everything myself
Story: general first experience of what autoscaling was like
Too specific
Gets expensive
CONTAINERS!
ALL we want is SALAD!
pack everything together, run instantly, modular, portable, reproducible and scalable
Smaller, faster, repeatable
Docker called it “swarm” for a reason… lots of little things that are hard to control
james goes into the docker host story, talking about how all of us played with this and immediately out grew the single host, and orchestration became a problem
Remember the bees? Kubernetes gives us order and structure
It’s about taking all our containers, and scheduling and distributing them across our servers
James talks about high level abstractions, descriptive language, pods
nano talks about services and deployments, how that gives an abstraction for things we use to do by hand (blue/green, zero downtime...)
Like language abstractions and patterns
you order a server, you name it, you compile the kernel, you wait a bunch of months,
you click on a domain register to setup your DNS,
you order a certificate with goDaddy,
there are not enough characters in the star wars universe to run netflix
This is your alerting system
you write a bunch of ansible, you have some terraform.
you have route53 on your terraform with your domains
you get certs from your cert issuer (waiting months for internal certs from enterprise), link them in your scripts
you bake some AMIs with your ansible and you app
Not physically, but virtually putting things together, so many things to do still
CONTAINERS!
CONTAINERS!
Developers are creative, it’s all containers anyway.
Developers are creative, it’s all containers anyway.
Mind blown story
you ssh into your servers and tail the logs
you forget passwords to some servers
you need to physically be in the building to access the internal network
That one time I forgot to logrotate
ssh multiplexing
you add log forwarding configuration to your ansible
you need to make sure it's running
One of your servers out of many is not shipping it
Some apps are not shipping
config drift, deployment staleness
CONTAINERS!
There are nodes that run all of our pods/services/deployments
A daemon set runs on all (or selected) nodes
Containers log to STDOUT
Container hosts have access to logs on STDOUT
Another container listens to host logs and forwards them to you log aggregator of choice
Story about moving log aggregator service without impacting any of the teams
So we walk into work one day and the CI is down
What could be happening?
only one nginx running on an overloaded node
Ok, so we scale up, amazing!
Still down, what did we get wrong?
We have them running on the same node, the node goes down it’s all over
So we make them run on separate nodes using affinities
Who manages all this? Isn’t it becoming more specialised? Are developers realistically expected to know all of this?
SRE, roaming specialists, secondments.
Who manages all this? Isn’t it becoming more specialised? Are developers realistically expected to know all of this?
SRE, roaming specialists, secondments.
Who manages all this? Isn’t it becoming more specialised? Are developers realistically expected to know all of this?
SRE, roaming specialists, secondments.
Who manages all this? Isn’t it becoming more specialised? Are developers realistically expected to know all of this?
SRE, roaming specialists, secondments.
the good patterns of the industry still apply
there’s no reason clusters should be shared
While you’re mastering what’s the difference between ReplicaSets, StatefulSets, DaemonSets, Deployments etc, use a managed service for looking after your cluster.
We’re all learning. This is all new. Play somewhere safe.
Create a cluster, peer it with a real system, and run something non-production on it. Monitoring, alerting, logging, CI workers, etc...
ecosystem, new creative ways to compose solutions
keep things that change together close, and change apart separate
there is still infra there
The lessons summarised
This is the future, or actually the present. We are at a time where we can make our salad exactly how we like it, on demand
It presents complexities, but as we have seen a huge amount of benefit to make our systems and organisations more resilient.