Wednesday, September 30, 2020

What is SRE

SRE is an abbreviation for Service Reliability Engineering, also known as Site Reliability Engineering.  SRE can also be a job description for a Service(or Site) Reliability Engineer.  DevOps is a methodology (and should never be someones title) where a developer supports the code they write in production.

Service Reliability Engineering exists to improve reliability of services by writing software to keep a service functioning properly and to drive the improvement through feedback primarily around reliability, availability, observability & serviceability.  SREs are also expected to do a significant amount of troubleshooting to find the root cause of an issue and not focus on the symptoms.  SRE's often help Developers with Infrastructure, Deployment, Configuration, Monitoring & Metrics to make their software easy to update, manage and monitor.

SRE is a set of practices, metrics, and prescriptive ways to ensure reliability and uniformity to enable success at scale.

SRE is often a Gate to Production (grant access, make/approve/authorize production changes)

Characteristics of an SRE

  • Reliability
    • Focused heavily on meeting SLO's & SLA's
    • Error budgets are like money, they are meant to be spent, wisely as it is limited, underspending and overspending are both bad
    • Embraces fact that failures will happen, plans for them
    • Solve production issues and restore service
    • Actively participate in postmortems
    • Has a roadmap and prioritized backlog of things to automate
    • SRE's is at war with 
      • toil (anything repetitive that is done by hand should be automated)
      • inconsistencies (snowflakes are a killer)
      • ignorance (visibility & data are key to managing things quickly at scale)
    • Improves monitoring with alert correlation to reduce noise and TTR (time to repair)
    • SRE's mandate is to continually push for product improvements
  • Automation/Code
    • Minimally spends 51% of their time solving issues through code
    • All Incidents and Escalations should result in a runbook/workflow that eventually turns into automation (I like to call runbooks human-automation)
    • CI/CD Automation platforms to push out new code and fixes
    • Many small code pushes are far better and easier to backtrack than fewer large ones
    • No Production software pushes on Friday or the weekend
    • Knows you can't test everything, unit tests are required, but things will collide in production
    • Automation platform such as stackstorm to orchestrate fixes
    • Write tools such as auto-triage for troubleshooting (gather the logs while the engineer logs in)
    • Idempotent actions are your new best friend 
  • People & Process
    • SRE's need psychological safety, one example is blameless postmortems
    • SRE's is a cognitively difficult task, requires minimal context switching
    • Participates in on-call rotation
    • If SRE's support a platform they do not develop entirely, they must be involved in project planning and execution with those teams.
    • SRE's need time to dig into incidents to not only fix, but to find root cause and take preventative measures
  • Tooling for success
    • SRE's need proper tooling, such as logs, time-series metrics, traces, etc.. (it's virtually impossible to understand true root cause for intermittent issues if you don't have this.)
    • Proper monitoring to detect failures, need to feel confident that if no alarms are triggering that the infrastructure is healthy, customers should not be the ones to tell you that you have a problem.
    • Never create an alarm unless it leads to an action.  Warnings are useless at scale.
SRE Shared Vocabulary (my definitions, feel free to disagree)
  • Black Box Monitoring- All you know are the inputs and outputs, if wood goes in, and chairs comes out, thumbs up, things are good.  If chairs come out broken, incomplete or not at all, you realize you have a problem.
  • White Box Monitoring - (I wish it was called transparent box) but this is where you know what's happening inside the machine.  You see the first machine wood get cut, the second sand it, the third assemble the parts and the fourth paint the chair.  You know which part of the machine is not functioning properly.
  • Observability - You need to make your production observable, you need to expose signals we can watch programmatically in order for the operators to understand the health of the machine.
  • Serviceability - How easy/difficult is it to maintain this software, to get new software into production or upgrade to a new build.
  • Availability - Frequency of a system to operate properly or at least within a(n) SLO/SLA
  • Idempotent - Something that can be applied repeatedly safely and will only make a change the first time it applies.
  • Immutable - Something that can't be changed after it is built/created.
  • Heuristic - an approach to solving a problem that uses practical methods but may not be optimal, but it will get you there.
  • Orthogonal - When something changes, but does so independently and does not affect the other.
  • Chaos Engineering - Intentionally breaking things in production to test your resiliency
  • Canary - Something built to test new features or configurations, or possibly a  very small subset of production.  This way you can find issues with limited scope of impact.
Probably the biggest key to success for SRE & DevOps is the right mindset.  The business must see SRE as a trusted partner who's preventing issues and keeping the service running properly.  If SRE is running a production environment where they do not write all of the software, then developers sometimes think of them as operations people that they can toss software "over the fence to".  While SRE is fantastic at remediating issues at scale with automation, developers need to still be accountable to the code they write and maintain responsibility for improving that code.