What’s DevOps

    DevOps isn’t a tangible product. « You can’t buy DevOps in a box, » explains Kevin Behr, author and Chief Science Officer at Praxis Flow. The culture that can foster the DevOps mindset has to exist throughout a company, not just within a single department, so people can collectively contribute all their skills to solving problems. Otherwise, DevOps can become just a local optimization.

    DevOps is all about:

    1. culture
    2. automation
    3. monitoring metrics
    4. sharing

    However, DevOps is NOT solving a technical problem, it’s trying to solve a business problem and bringing better value to the end user at a more sustainable pace.

    For the DevOps’ best practices, we may want to check the Accelerate book and the State of DevOps report. This includes practices such as using Continuous Integration and Continuous Delivery, using trunk-based development, and using the cloud well.

    These days, using the cloud well means using a container management platform such as Kubernetes, which automates the running and load balancing of containers on any cloud infrastructure. It also means scaling the nodes and containers elastically, all of which can be managed by your cloud provider.


    DevOps at Amazon

    Here is a DevOps snapshot (deployment stats for production hosts & environments) for a month at amazon (data from Keynote: Why We Need DevOps):

    1. 11.6 seconds : Mean time between deployments (weekday)
    2. 1,079 : Max # of deployments in a single hour
    3. 10,000 : Mean # of hosts simultaneously receiving a deployment
    4. 30,000 : Max # of hosts simultaneously receiving a deployment


    Although devops is not about tooling, there are a number of open source tools out there that will be able to help you achieve your goals. Some of those tools will also enable better communication between your development and operations teams.

    Most successful DevOps organizations automate using tools in a few core categories, using a variety of specific tools (DevOps Best Practices: Finding the Right Tools):

    1. Configuration management.
      When DevOps aficionados throw around phrases like automated infrastructureinfrastructure as code, and programmable infrastructure, they’re talking about configuration management. That’s the tracking and controlling of changes to the software code base and the archiving of all file versions into a central configuration management database (CMDB), which enables multiple developers to work on the same code base while avoiding version-control issues.Popular configuration management tools include
      1. Chef – Ruby/Erlang, Knife, recipe, cookbook
      2. Puppet – Ruby, Puppet manifests, Factor, catalog
      3. Ansible – Python, Playbook, inventory
      4. CFEngine
      5. SaltStack – Python, YAML, Jinja2, salt master / salt minion
      6. Fabric – Python
    1. However, the real question is what do we need in configuration management? For example, if we want to take in data that other people provide and then do something with it, we need a tool that handles that well.
    2. Application deployment. 
      Application deployment tools enable the automation of releases, and are at the heart of continuous delivery, one of the primary tenets of DevOps.For continuous integration and continuous deployment, we need a number of tools to help us there. We need to be able to build reproducible artifacts which we can test. And we need a reproducible infrastructure which we can manage in a fast and sane way. To do that we need a Continuous Integration framework like Jenkins
      1. Capistrano, a deployment library, is the most popular standalone tool in this category.
      2. Other popular tools for automating application deployment include Ansible
      3. Fabric,
      4. and Jenkins.Again, the key is to find a tool that tracks behavior-from history to change logs-in ways that is meaningful for both dev and ops.
    3. Monitoring. 
      DevOps requires two distinct types of monitoring. Application performance monitoring tools:
      1. nagios
      2. zabbix
      3. icinga
      4. New Relic APM enable code-level identification and remediation of performance issues and at the infrastructure level, server monitoring tools like New Relic Serverprovide visibility into capacity, memory, and CPU consumption so reliability engineers can fix issues as soon as they appear.
      5. pingdom
      6. appdynamics
      7. datadog – though listed here near the bottom, datadog is one of the widely used monitoring tools that provides good integrations with other services: host integration (aws, github), local endpoint integration(postgres, nginx, docker), notification integration (pagerduty, webhooks, slack), and framworks, libraries (Go, Python, Ruby), APIs and Trace integration.
      8. splunk – I haven’t used splunk but it could be listed at the top probably along with datadog.
      9. sumologic – It has very good query capabilities and provides lots of PCI compliant templates. I could list sumologic as top 5 monitoring tools.