Monday, Jul 18, 2016

Ignoring the complexities surrounding data.

Phase 1

Manual everything.

Not scalable at all. Well it might be surprisingly scalable if the code is well engineered, since everything is so simple! ;)

Probably never reboots, despite updates (e.g. Linux) requiring it.

Phase 2

Using a Configuration Management tool like Chef, Puppet or Ansible.

Scalability achieved with AMI snapshots and such. Zero downtime with a load balancer fronting at least two instances running your App independently of one another.

Updates are applied before making a new AMI image. Latest AMI images are applied haphazardly.

Phase 3

Using PaaS like Dokku, so a developer can git push to a “Heroku-ish” endpoint.

Probably can’t scale very well. Zero downtime can be achieved cheaply using some tricks. Probably best solution for personal projects or starting out since it’s fairly simple.

Probably never reboots or applies security updates properly.

Phase 4

Using Docker & containerizing all the things on something like CoreOS or RancherOS. Scalability is as manual as making sure you can quickly spin up new CoreOS instances & run the Docker images with a load balancer in front.

Bonus points if you have moved from Postfix MTA to an external Restful mail API or queue.

Bonus points is if one has figured out how to get a CI to build the image and deploy it.

Bonus points for running two instances for Blue/Green deployments behind the load balancer for zero downtime.

Serious kudos if you manage to orchestrate your updates with etcd locks and have no downtime.

Phase 5

Orchestrating Docker deployments with Docker Compose, using things like AWS ECR (private Docker image hosting) and AWS ECS for managing the containers on EC2.

Tip: Getting into ECS like myself? Checkout ECS questions or AWS ECS Workflow.

Scales in a complex way (worry about bother Container & Instance utilisation and timings), providing you have Service Auto Scaling in your region.

Phase 6

Serverless computing? FaaS! AWS Lambda. It’s not without servers of course, it more of a managed Containers or dynamic server allocation solution.

Included with “serverless”:

A/B deployments

Logging

Optionally: API gateway is pretty sweet (basically you get Cloudfront integrated)

Most apps would probably have to be completely rewritten and somewhat tied to the hosting platform’s API.