Skip to content

Instantly share code, notes, and snippets.

@arpit
Last active March 16, 2018 17:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arpit/ef275dd652ea79598916637f2d89b787 to your computer and use it in GitHub Desktop.
Save arpit/ef275dd652ea79598916637f2d89b787 to your computer and use it in GitHub Desktop.

So far what we have learnt is about developing apps. But in a company software development is only part of the story, the other part is Software Delivery. This is where DevOps, Infrastructure Engineering etc roles come in.

Continuous Delivery and Continuous Integration

When you have no devops, you have a person doing the following:

  • Check out code from repository
  • Turn off web server
  • Deploy code
  • Restart server
  • Done

This is a slow process and prone to human error. It also has to be done per environment and often per server or per location.

  • There could be different environments that need this to happen: Development, Staging, Prod
  • Additionally Prod could be in multiple locations (Example: Servers on east coast serving traffic from here, and on West coast for people there)
  • There may be another configuration where you have production servers and then backup servers in different locations. For example, you have infrastructure on AWS but run another on Google Cloud or Microsoft Azure in case Amazon has an outage (happens once in a while)

To manually handle all this is really hard. So people started automating it. You can for example have shell scripts that do all the work automatically: Checkout > Run some sanity tests > Deploy

This is called Continuous delivery (CD)

The steps that make up a particular company's delivery process usually form a "pipeline". Devops Engineers maintain the pipeline

But even before delivery you want catch developer errors as soon as possible. So everytime I check in code, you can have systems run unit and integration tests and if a new error is found, the developer is immediately alterted.

This is called Continuous Integration. There are several tools for this: you can always install an open source CI tool like Jenkins or pay for it as a hosted service like (Bamboo)[https://www.atlassian.com/software/bamboo], TravisCI, CircleCI etc

SaaS, PaaS, IaaS

One thing at this point we should talk about: A lot of this software is available in the form of monthly rental services. An umbrella for this is SaaS (Software as a Service) though that includes any kind of service. If you are talking about things like Heroku which handles the middleware and backend and lets you focus on the main app, its called Platform as a Service (PaaS). When using Amazon, or CI tools, its called Infrastructure as a Service.

Virtualized Hardware (VMWare)

You can run a website on your computer today if you wanted to. All you need to do is to open Port 80 on your OS and listen for HTTP packets ( Server software like Apache or NGinX do that). The early servers were similar, just beefier computers. You ran your application "on metal"

However it was challenging to manage a lot of machines to keep them at the same OS version since one machine might want to run multiple different apps which might require different OS versions. This led to the rise of the use of Virtual Machines. A VM lives between the application and the hardware and translates the calls between the two. This is how you can run Windows apps on Mac machines for example. Also one hardware could run many VMs with different versions of the OS making them more efficient. VMs also captured the development environment completely, so if you app needed a different app installed to work, you could create a VM with all the dependecies and just use that.

VMs are created by and managed by a Hypervisor

Read more about Hypervisors here

Docker

Orchestration with Kubernetes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment