ЁЯЫая╕П рдзрдбрд╛ 01 тАФ SRE рдореНрд╣рдгрдЬреЗ рдХрд╛рдп: рдкрдиреНрд╣рд╛рд│ рджреБрд░реБрд╕реНрдд рдХрд░рдгрд╛рд░реЗ рдкрдердХ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 01 ┬╖ рдкреБрдвреЗ: lesson-02-error-budget-policy
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рд╣рд╛ рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕ рдЬреНрдпрд╛ рдХрд╛рдорд╛рдмрджреНрджрд▓ рдЖрд╣реЗ рддреЗ рдХрд╛рдо. рд╢рд╛рд│реЗрдд рдЕрдиреЗрдХ рдЗрдорд╛рд░рддреА (services) рдЖрд╣реЗрдд: timetable, рдирд┐рдХрд╛рд▓рд╛рдВрдЪреЗ portal, рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рдЪрд╛ catalogue. рд╢рд╛рд│реЗрдХрдбреЗ рдПрдХ рджреЗрдЦрднрд╛рд▓ рдкрдердХ рдЖрд╣реЗ тАФ рдХрддрд░рд┐рдирд╛, рджреАрдкрд┐рдХрд╛ рдЖрдгрд┐ рдРрд╢реНрд╡рд░реНрдпрд╛ тАФ рдЬреНрдпрд╛ рдЗрдорд╛рд░рддреА рдЪрд╛рд▓реВ рдареЗрд╡рддрд╛рдд. рдпрд╛ рдкрдердХрд╛рдЪрд╛ рдПрдХ рдирд┐рдпрдо рддреНрдпрд╛рдВрдирд╛ рд╕рд╛рдзреНрдпрд╛ рджреБрд░реБрд╕реНрддреА team рдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реЗ рдмрдирд╡рддреЛ: рддреНрдпрд╛ tools рд▓рд┐рд╣рд┐рддрд╛рдд, рдлрдХреНрдд рдЬрд╛рд╕реНрдд рдмрд╛рджрд▓реНрдпрд╛ рд╡рд╛рд╣рдд рдирд╛рд╣реАрдд. рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕рднрд░ рддреБрдореНрд╣реА рд╡рд╛рдкрд░рд╛рд▓ рддреНрдпрд╛ рдЦрд▒реНрдпрд╛ files:
- sre/crew.py тАФ рдкрдердХрд╛рдЪреЗ рдХрд╛рдорд╛рдЪреЗ рдирд┐рдпрдо, рдЫреЛрдЯреНрдпрд╛ deterministic models рдЪреНрдпрд╛ рд░реВрдкрд╛рдд (рдзрдбреЗ 01тАУ08), рд╢реБрджреНрдз Python, рд╢реВрдиреНрдп dependencies
- sre/design.py тАФ рдЕрдкрдпрд╢рд╛рд╕рд╛рдареА рдЗрдорд╛рд░рдд рдмрд╛рдВрдзрдгреНрдпрд╛рдЪреЗ рдирд┐рдпрдо (рдзрдбреЗ 09тАУ12)
- sre/demo.py тАФ рдкреНрд░рддреНрдпреЗрдХ рдзрдбрд╛ рдПрдХ рдЫреЛрдЯрд╛ program рдореНрд╣рдгреВрди (
python3 sre/demo.py <section>; sections:job budget toil oncall canary rollout capacity command nines overload chaos prr) - sre/test_sre.py тАФ рдкрдердХрд╛рдЪреНрдпрд╛ рдирд┐рдпрдорд╛рдВрд╡рд░реАрд▓ 12 checks
- demo-output.txt тАФ рдирд┐рд░реЛрдЧреА run рдХрд╛рдп print рдХрд░рддреЛ
ЁЯОТ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЖрдзреА: рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд Python 3 рд▓рд╛рдЧреЗрд▓, рдмрд╛рдХреА рдХрд╛рд╣реА рдирд╛рд╣реА тАФ cloud account рдирд╛рд╣реА,
pip installрдирд╛рд╣реА.crew.pyрдЖрдгрд┐design.pyрд╣реЗ рд╢рд┐рдХрд╡рдгреНрдпрд╛рд╕рд╛рдареАрдЪреЗ models рдЖрд╣реЗрдд: рддреЗ рдЦрд▒реНрдпрд╛ SRE рдкрджреНрдзрддреАрдЪреЗ рдЧрдгрд┐рдд рдЖрдгрд┐ рдирд┐рдпрдо рдареЗрд╡рддрд╛рдд рдЖрдгрд┐ рдмрд╛рдХреА рд╕рдЧрд│реЗ рд╡рдЧрд│рддрд╛рдд. Randomness рд▓рд╛ seed рджрд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдкреНрд░рддреНрдпреЗрдХ run рддреАрдЪ рдЧреЛрд╖реНрдЯ print рдХрд░рддреЛ. Signals, SLO рдЪреЗ рдЧрдгрд┐рдд, burn-rate alerts рдЖрдгрд┐ postmortems рд╣реЗ рд╢реЗрдЬрд╛рд░рдЪреНрдпрд╛ Observability school рдордзреНрдпреЗ рд╢рд┐рдХрд╡рд▓реЗ рдЖрд╣реЗрдд; рд╣рд╛ рдХреЛрд░реНрд╕ рддреЗ рдкреБрдиреНрд╣рд╛ рд╢рд┐рдХрд╡рдгреНрдпрд╛рдРрд╡рдЬреА рддреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреЗ link рджреЗрддреЛ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдкрд╛рдКрд╕ рдкрдбрд▓рд╛ рдХреА timetable рдЗрдорд╛рд░рддреАрдЪреЗ рдЫрдкреНрдкрд░ рдЧрд│рддреЗ. ЁЯМзя╕П
рд╕рд╛рдзреА рджреБрд░реБрд╕реНрддреА team рдЧрд│рддреАрдЦрд╛рд▓реА рдПрдХ рдмрд╛рджрд▓реА рдареЗрд╡рддреЗ. рдкреБрдврдЪреНрдпрд╛ рдЖрдард╡рдбреНрдпрд╛рдд рдЬрд╛рд╕реНрдд рдкрд╛рдКрд╕, рдЬрд╛рд╕реНрдд рдЧрд│рддреА, рдЬрд╛рд╕реНрдд рдмрд╛рджрд▓реНрдпрд╛. рд╢рд╛рд│рд╛ рд╡рд╛рдврддреЗ, рдореНрд╣рдгреВрди рдЫрдкрд░реЗ рд╡рд╛рдврддрд╛рдд тАФ рдЖрдгрд┐ рдмрд╛рджрд▓реНрдпрд╛рд╣реА. рд▓рд╡рдХрд░рдЪ рддреА team рдмрд╛рджрд▓реНрдпрд╛ рд╡рд╛рд╣рдгреНрдпрд╛рд╢рд┐рд╡рд╛рдп рджреБрд╕рд░реЗ рдХрд╛рд╣реАрдЪ рдХрд░рдд рдирд╛рд╣реА. рдлрдХреНрдд рддреНрдпрд╛ рд╡рд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдВрдирд╛ рдЬрд╛рд╕реНрдд рд▓реЛрдХ рд▓рд╛рдЧрддрд╛рдд.
рдХрддрд░рд┐рдирд╛, рджреАрдкрд┐рдХрд╛ рдЖрдгрд┐ рдРрд╢реНрд╡рд░реНрдпрд╛ рд╣реЗ рд╡реЗрдЧрд│реНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдХрд░рддрд╛рдд. рдЖрдЬ рддреНрдпрд╛ рдмрд╛рджрд▓реА рд╡рд╛рд╣рддрд╛рдд, рд╣реЛ. рдкрдг рддреНрдпрд╛ рдкрдиреНрд╣рд╛рд│рд╕реБрджреНрдзрд╛ рджреБрд░реБрд╕реНрдд рдХрд░рддрд╛рдд, рдореНрд╣рдгрдЬреЗ рдкреБрдврдЪреНрдпрд╛ рдЖрдард╡рдбреНрдпрд╛рдд рдЧрд│рддреА рдирд╛рд╣реА рдЖрдгрд┐ рдмрд╛рджрд▓реАрд╣реА рдирд╛рд╣реА. ЁЯФз
рдЖрдгрд┐ рддреНрдпрд╛ рдПрдХ рдирд┐рдпрдо рдкрд╛рд│рддрд╛рдд: рдЖрдордЪреНрдпрд╛ рдЖрдард╡рдбреНрдпрд╛рдЪрд╛ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рдЕрд░реНрдзрд╛ рд╡реЗрд│ рдмрд╛рджрд▓реНрдпрд╛рдВрд╕рд╛рдареА. рдЙрд░рд▓реЗрд▓рд╛ рдЕрд░реНрдзрд╛ рдкрдиреНрд╣рд╛рд│ рджреБрд░реБрд╕реНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдЬрд░ рдмрд╛рджрд▓реНрдпрд╛рдВрдиреА рдЕрд░реНрдзреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЖрдард╡рдбрд╛ рдШреЗрддрд▓рд╛, рддрд░ рддреНрдпрд╛ рдЗрдорд╛рд░рдд рдмрд╛рдВрдзрдгрд╛рд▒реНрдпрд╛ рд▓реЛрдХрд╛рдВрдирд╛ рд╕рд╛рдВрдЧрддрд╛рдд: "рддреБрдордЪреА рдЗрдорд╛рд░рдд рдЦреВрдк рдЧрд│рддреЗ тАФ рд╡рд╛рд╣рд╛рдпрд▓рд╛ рдорджрдд рдХрд░рд╛рдпрд▓рд╛ рдпрд╛, рдХрд┐рдВрд╡рд╛ рджреБрд░реБрд╕реНрдд рдХрд░рд╛рдпрд▓рд╛ рдорджрдд рдХрд░рд╛рдпрд▓рд╛ рдпрд╛."
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
rain["ЁЯМзя╕П more pupils,<br/>more buildings"] --> ops["ЁЯкг ops work<br/>tickets, pages, manual fixes"]
ops --> cap{"more than 50%<br/>of the crew's week?"}
cap -->|"no"| eng["ЁЯФз engineering<br/>tools, automation, fixes"]
cap -->|"yes"| back["тЖйя╕П extra ops goes back<br/>to the dev team"]
eng -->|"less ops next week"| ops
back --> eng
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрд╡реГрддреНрддреА + рдПрдХ lab: https://school-edh.pages.dev/sre/lesson-diagrams.html#l01
тЭУ рдХрд╛рдп
- Site Reliability Engineering (SRE) тАФ production services рдЪрд╛рд▓рд╡рдгреЗ рд╣рд╛ рдПрдХ software engineering рдкреНрд░рд╢реНрди рдореНрд╣рдгреВрди рд╣рд╛рддрд╛рд│рдгреЗ. 2003 рдордзреНрдпреЗ Google рдЪреА SRE team рд╕реБрд░реВ рдХрд░рдгрд╛рд░реЗ Ben Treynor Sloss рдпрд╛рдВрдиреА рд╣реЗ рдЕрд╕реЗ рдорд╛рдВрдбрд▓реЗ: "software engineer рд▓рд╛ operations team design рдХрд░рд╛рдпрд▓рд╛ рд╕рд╛рдВрдЧрд┐рддрд▓реНрдпрд╛рд╡рд░ рдЬреЗ рдШрдбрддреЗ рддреЗ."
- Operations (ops) рдХрд╛рдо тАФ рдЧреЛрд╖реНрдЯреА рд╣рд╛рддрд╛рдиреЗ рдЪрд╛рд▓реВ рдареЗрд╡рдгреЗ: tickets, pages, рд╣рд╛рддрд╛рдиреЗ рдХреЗрд▓реЗрд▓реЗ deploys, restarts, "рддреЗ рдмрдВрдж рдЖрд╣реЗ рдХрд╛?" рдпрд╛рд▓рд╛ рдЙрддреНрддрд░ рджреЗрдгреЗ. рдЖрд╡рд╢реНрдпрдХ, рдкрдг рддреНрдпрд╛рдиреЗ рдкреБрдврдЪрд╛ рдЖрдард╡рдбрд╛ рд╕реЛрдкрд╛ рд╣реЛрдд рдирд╛рд╣реА.
- Engineering рдХрд╛рдо тАФ рдХрд╛рдпрдордЪреА рд╕реБрдзрд╛рд░рдгрд╛ рдорд╛рдЧреЗ рдареЗрд╡рдгрд╛рд░реЗ рдХрд╛рдо: рдПрдЦрд╛рджреЗ tool, automation, design рдордзрд▓рд╛ рдмрджрд▓, рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓рд╛ alert. рддреЗ рдкреБрдврдЪреНрдпрд╛ рдЖрдард╡рдбреНрдпрд╛рдЪреЗ ops рдХрдореА рдХрд░рддреЗ.
- 50% cap тАФ Google SRE рдкреБрд╕реНрддрдХрд╛рдЪрд╛ рдирд┐рдпрдо: SREs рдЖрдкрд▓реНрдпрд╛ рд╡реЗрд│реЗрдкреИрдХреА рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд 50% рд╡реЗрд│ ops рдХрд╛рдорд╛рд╡рд░ рдШрд╛рд▓рд╡рддрд╛рдд, рдореНрд╣рдгрдЬреЗ рдХрд┐рдорд╛рди рдЕрд░реНрдзрд╛ рд╡реЗрд│ engineering. Ops cap рдЪреНрдпрд╛ рд╡рд░ рдЧреЗрд▓реЗ рдХреА рдЬрд╛рд╕реНрддреАрдЪреЗ рдХрд╛рдо development team рдХрдбреЗ рдкрд░рдд рдкрд╛рдард╡рд▓реЗ рдЬрд╛рддреЗ (рддреЗ tickets рдШреЗрддрд╛рдд, on-call rotation рдордзреНрдпреЗ рд╕рд╛рдореАрд▓ рд╣реЛрддрд╛рдд) рдЬреЛрдкрд░реНрдпрдВрдд service рдЕрдзрд┐рдХ рдирд┐рд░реЛрдЧреА рд╣реЛрдд рдирд╛рд╣реА. Cap рдХрд╛рд╣реА рдХрд╛рд│рд╛рддреАрд▓ рд╕рд░рд╛рд╕рд░реАрд╡рд░ рдореЛрдЬрд▓рд╛ рдЬрд╛рддреЛ, рддрд╛рд╕рд╛-рддрд╛рд╕рд╛рд▓рд╛ рддреНрдпрд╛рд╡рд░ рдкрд╣рд╛рд░рд╛ рджрд┐рд▓рд╛ рдЬрд╛рдд рдирд╛рд╣реА.
- рдкрд╛рд░рдВрдкрд░рд┐рдХ ops team тАФ service рд╕реЛрдмрддрдЪ рдЖрдкрд▓реА рдорд╛рдгрд╕рд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврд╡рддреЗ: рджреБрдкреНрдкрдЯ servers, рдЬрд╡рд│рдкрд╛рд╕ рджреБрдкреНрдкрдЯ рд▓реЛрдХ. SRE рдЪреЗ рдзреНрдпреЗрдп рдЕрд╢реА team рдЖрд╣реЗ рдЬреА service рдкреЗрдХреНрд╖рд╛ рд╣рд│реВ рд╡рд╛рдврддреЗ.
- DevOps тАФ рдПрдХ рд╕рдВрд╕реНрдХреГрддреА рдЖрдгрд┐ рддрддреНрддреНрд╡рд╛рдВрдЪрд╛ рд╕рдВрдЪ: developers рдЖрдгрд┐ operations рдЬрдмрд╛рдмрджрд╛рд░реА рд╡рд╛рдЯреВрди рдШреЗрддрд╛рдд, automate рдХрд░рддрд╛рдд, рдореЛрдЬрддрд╛рдд, рдЫреЛрдЯреНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рдВрдд release рдХрд░рддрд╛рдд. Google рдЪреЗ Site Reliability Workbook SRE рд▓рд╛ рдпрд╛ рдХрд▓реНрдкрдирд╛рдВрдЪреА рдПрдХ рдареЛрд╕ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдореНрд╣рдгрддреЗ ("class SRE implements interface DevOps"). рддреЗ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдирд╛рд╣реАрдд; SRE рддреНрдпрд╛рдд рдард░рд╛рд╡рд┐рдХ рдЖрдХрдбреЗ рдЖрдгрд┐ рдкрджреНрдзрддреА рдЬреЛрдбрддреЗ (SLOs, error budgets, ops cap, toil budgets).
- рд╕рд╛рдорд╛рдпрд┐рдХ рдЬрдмрд╛рдмрджрд╛рд░реА тАФ developers рдЕрдЬреВрдирд╣реА рдЖрдкрд▓реНрдпрд╛ service рдЪреЗ рдорд╛рд▓рдХ рдЕрд╕рддрд╛рдд. SRE рд╣рд╛ pager рдЖрдгрд┐ рддрдпрд╛рд░ рдирд╕рд▓реЗрд▓реНрдпрд╛ launches рд╡рд░ veto рдЕрд╕рд▓реЗрд▓рд╛ рднрд╛рдЧреАрджрд╛рд░ рдЖрд╣реЗ (рдзрдбрд╛ 12), рднрд┐рдВрддреАрд╡рд░реВрди рдлреЗрдХрд▓реЗрд▓реЗ рдХрд╛рд╣реАрд╣реА рддрд╛рдмреНрдпрд╛рдд рдШреЗрдгрд╛рд░реА team рдирд╛рд╣реА.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг рд╣рд╛рддрд╛рдиреЗ рдХреЗрд▓реЗрд▓реЗ operations рд╡рд╛рдврддреНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдЯрд┐рдХрдд рдирд╛рд╣реАрдд. рдкреНрд░рддреНрдпреЗрдХ рдирд╡реНрдпрд╛ рдЗрдорд╛рд░рддреАрд╕рд╛рдареА рдмрд╛рджрд▓реНрдпрд╛ рд╡рд╛рд╣рд╛рдпрд▓рд╛ рдЖрдгрдЦреА рдПрдХ рдорд╛рдгреВрд╕ рд▓рд╛рдЧрдд рдЕрд╕реЗрд▓, рддрд░ рджреЗрдЦрднрд╛рд▓реАрдЪрд╛ рдЦрд░реНрдЪ рд╢рд╛рд│реЗрдЗрддрдХрд╛рдЪ рд╡реЗрдЧрд╛рдиреЗ рд╡рд╛рдврддреЛ. рддреНрдпрд╛рд╣реВрди рд╡рд╛рдИрдЯ: рдЬреА team рдлрдХреНрдд рдмрд╛рджрд▓реНрдпрд╛ рд╡рд╛рд╣рддреЗ рддрд┐рдЪреНрдпрд╛рдХрдбреЗ рдЫрдкреНрдкрд░ рдХрд╛ рдЧрд│рддреЗ рд╣реЗ рд╡рд┐рдЪрд╛рд░рд╛рдпрд▓рд╛ рд╡реЗрд│рдЪ рдирд╕рддреЛ. 50% cap рддреЛ рд╡реЗрд│ рд╡рд╛рдЪрд╡рддреЛ рдЬреЛ рдкреНрд░рд╢реНрди рд▓рд╣рд╛рди рдХрд░рддреЛ. рдЖрдгрд┐ рдЬрд╛рд╕реНрддреАрдЪреЗ рдХрд╛рдо developers рдХрдбреЗ рдкрд░рдд рдкрд╛рдард╡рдгреЗ рд╣рд╛ рдПрдХ feedback loop рдЖрд╣реЗ: рдЬреЗ рд▓реЛрдХ рдЧрд│рдХреЗ design рджреБрд░реБрд╕реНрдд рдХрд░реВ рд╢рдХрддрд╛рдд рддреНрдпрд╛рдВрдирд╛ рдЧрд│рддреА рдЬрд╛рдгрд╡рддреЗ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
sre/crew.py рдордзреАрд▓ ops_share(weeks, cap=0.5) рджрд░ рдЖрдард╡рдбреНрдпрд╛рдЪреНрдпрд╛
(ops_hours, total_hours) рдЪреА рдпрд╛рджреА рдШреЗрддреЗ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА (share, over_cap) рдкрд░рдд рджреЗрддреЗ.
sre/demo.py рдордзреАрд▓ job() рддреАрди рдЬрдгрд╛рдВрдЪреНрдпрд╛ рдкрдердХрд╛рдЪреЗ рд╕рд╣рд╛ рдЖрдард╡рдбреЗ рдЪрд╛рд▓рд╡рддреЗ: 3 ├Ч 40 рддрд╛рд╕ = рдЖрдард╡рдбреНрдпрд╛рд▓рд╛ 120
рддрд╛рд╕.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 sre/demo.py job
python3 - <<'EOF'
import sys; sys.path.insert(0, "sre"); from crew import ops_share
# a quarter where the timetable service keeps growing and nobody automates anything
weeks = [(40 + 4 * w, 120) for w in range(8)]
for i, (share, over) in enumerate(ops_share(weeks), 1):
print(f"week {i}: ops {share:5.1%}" + (" тЖТ over the cap" if over else ""))
print("the same weeks with a 3-person crew grown to 4 (160 h):")
print([f"{s:.0%}" for s, _ in ops_share([(o, 160) for o, _ in weeks])])
EOF
python3 sre/test_sre.py
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
job рд╣реЗ print рдХрд░рддреЗ:
week 3: 63 h ops = 52.5% тЖР over the 50% cap: extra tickets and pages go back to the dev team
week 4: 71 h ops = 59.2% тЖР over the 50% cap: extra tickets and pages go back to the dev team
week 5: 58 h ops = 48.3%
week 6: 45 h ops = 37.5%
six-week average 47.1% ┬╖ the rest of the week is ENGINEERING: tools that make next week's ops smaller
рддреБрдордЪрд╛ snippet рд╣реЗ print рдХрд░рддреЛ:
week 6: ops 50.0%
week 7: ops 53.3% тЖТ over the cap
week 8: ops 56.7% тЖТ over the cap
the same weeks with a 3-person crew grown to 4 (160 h):
['25%', '28%', '30%', '32%', '35%', '38%', '40%', '42%']
Tests рд╢реЗрд╡рдЯреА 12/12 passed рджрд╛рдЦрд╡рддрд╛рдд.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
Ops рджрд░ рдЖрдард╡рдбреНрдпрд╛рд▓рд╛ 4 рддрд╛рд╕рд╛рдВрдиреА рд╡рд╛рдврдд рдЕрд╕реЗрд▓ рдЖрдгрд┐ рдХреЛрдгреАрдЪ automate рдХрд░рдд рдирд╕реЗрд▓, рддрд░ рдкрдердХ рдЖрдард╡рдбрд╛ 7 рдордзреНрдпреЗ cap рдУрд▓рд╛рдВрдбрддреЗ. рдЪреМрдереА рд╡реНрдпрдХреНрддреА рднрд░рддреА рдХреЗрд▓реНрдпрд╛рдиреЗ share рдкрд░рдд 42% рд╡рд░ рдпреЗрддреЛ тАФ рд╕рдзреНрдпрд╛рдкреБрд░рддрд╛. Ops рдЪреЗ рддрд╛рд╕ рд╡рд╛рдврддрдЪ рд░рд╛рд╣рд┐рд▓реЗ (40 тЖТ 68); рдирд╡реНрдпрд╛ рд╡реНрдпрдХреНрддреАрдиреЗ рдлрдХреНрдд рд╡реЗрд│ рд╡рд┐рдХрдд рдШреЗрддрд▓рд╛. рд╣рд╛рдЪ рдкрд╛рд░рдВрдкрд░рд┐рдХ ops рдЪрд╛ рд╕рд╛рдкрд│рд╛ рдЖрд╣реЗ: рдЬрд╛рд╕реНрдд рдмрд╛рджрд▓реНрдпрд╛рдВрд╡рд░ рдЙрдкрд╛рдп рдореНрд╣рдгрдЬреЗ рдЬрд╛рд╕реНрдд рд▓реЛрдХ. SRE рдЪрд╛ рдЙрдкрд╛рдп рдореНрд╣рдгрдЬреЗ 68 рд▓рд╣рд╛рди рдХрд░рдгреЗ, рдЖрдгрд┐ рддреЛрдЪ рднрд╛рдЧ 1 рдЪрд╛ рдЙрд░рд▓реЗрд▓рд╛ рднрд╛рдЧ рдЖрд╣реЗ. Demo рдЪреНрдпрд╛ рдЖрдард╡рдбреЗ 3 рдЖрдгрд┐ 4 рдордзреНрдпреЗ рдкрдердХрд╛рдиреЗ рдЬрд╛рд╕реНрддреАрдЪреЗ рдХрд╛рдо developers рдХрдбреЗ рдкрд░рдд рджрд┐рд▓реЗ; рдЖрдард╡рдбрд╛ 6 рдкрд░реНрдпрдВрдд рддреЗ 37.5% рд╡рд░ рдЖрд▓реЗ.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- ops team рдЪреЗ рдирд╛рд╡ рдмрджрд▓реВрди "SRE" рдареЗрд╡рдгреЗ рдЖрдгрд┐ рдмрд╛рдХреА рдХрд╛рд╣реАрдЪ рди рдмрджрд▓рдгреЗ
- рдореЛрдЬрдорд╛рдк рдирд╛рд╣реА: ops share рдХреЛрдгрд╛рд▓рд╛рдЪ рдорд╛рд╣реАрдд рдирд╛рд╣реА, рдореНрд╣рдгреВрди cap рдлрдХреНрдд рдПрдХ рдШреЛрд╖рдгрд╛ рдЙрд░рддреЗ
- SRE team service рддрд╛рдмреНрдпрд╛рдд рдШреЗрддреЗ рдЖрдгрд┐ developers рдирд╛ рддрд┐рдЪрд╛ рддреНрд░рд╛рд╕ рдЬрд╛рдгрд╡рдгреЗрдЪ рдмрдВрдж рд╣реЛрддреЗ
- 50% рд▓рд╛ рднрд░рд╛рдпрдЪреЗ рд▓рдХреНрд╖реНрдп рд╕рдордЬрдгреЗ ("рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдореЛрдХрд│рд╛ рд╡реЗрд│ рдЖрд╣реЗ, рдЖрдгрдЦреА tickets рдШреНрдпрд╛")
- engineering рдЪрд╛ рд╡реЗрд│ рдЬреЛ рдиреЗрд╣рдореА "рдкреБрдврдЪреНрдпрд╛ sprint рдордзреНрдпреЗ" рдЕрд╕рддреЛ
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
Ops share рдореЛрдЬрд╛. рд╕рд░реНрд╡рд╛рдд рд╕реНрд╡рд╕реНрдд рдорд╛рд░реНрдЧ: tickets рдЖрдгрд┐ pages рдирд╛ label рд▓рд╛рд╡рд╛, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрд╛рдиреЗ рдЖрдард╡рдбреНрдпрд╛рддреВрди рдПрдХрджрд╛
ops рдЪреЗ рддрд╛рд╕ рдиреЛрдВрджрд╡рд╛рд╡реЗрдд. рдЦрд▒реНрдпрд╛ account рд╡рд░ тАФ GitHub CLI рд╡рд╛рдкрд░реВрди, рдкрдердХрд╛рдЪреНрдпрд╛ repo рдордзреАрд▓ рдпрд╛ рдЖрдард╡рдбреНрдпрд╛рддрд▓реЗ
ops label рдЕрд╕рд▓реЗрд▓реЗ issues рдореЛрдЬрд╛:
gh issue list --label ops --state all --search "created:>=2026-09-21" --json number --jq length
SRE рдЖрдгрд┐ рдПрдЦрд╛рджреНрдпрд╛ service рдЪреНрдпрд╛ developers рдордзрд▓реА рдПрдХ рдЫреЛрдЯреА "engagement" рдиреЛрдВрдж рдХрд╛рдо рдкрд░рдд рджреЗрдгреЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ (service repo рдордзреАрд▓ рдПрдХ рд╕рд╛рдзреА YAML file рдкреБрд░реЗрд╢реА рдЖрд╣реЗ):
service: timetable
sre_owner: katrina
dev_owner: timetable-team
ops_cap: 0.5 # measured over 4 weeks
over_cap_action: dev team joins the on-call rotation and takes ops tickets until under the cap
review: quarterly
рдкреБрдвреЗ рд╡рд╛рдЪрд╛: https://sre.google/books/ рд╡рд░реАрд▓ рдореЛрдлрдд SRE рдкреБрд╕реНрддрдХреЗ тАФ Site Reliability Engineering (2016) рдЪреА рдкреНрд░рдХрд░рдгреЗ 1 рдЖрдгрд┐ 5, рдЖрдгрд┐ The Site Reliability Workbook (2018) рдордзреАрд▓ SRE рдЪрд╛ DevOps рд╢реА рд╕рдВрдмрдВрдз рд╕рд╛рдВрдЧрдгрд╛рд░реЗ рдкреНрд░рдХрд░рдг.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: рддреБрдордЪреНрдпрд╛ team рд▓рд╛ рд╡рд┐рдЪрд╛рд░рд╛ "рдЧреЗрд▓реНрдпрд╛ рдорд╣рд┐рдиреНрдпрд╛рддрд▓рд╛ рдХрд┐рддреА рднрд╛рдЧ ops рд╣реЛрддрд╛?" рдХреЛрдгрд╛рд▓рд╛рдЪ рдорд╛рд╣реАрдд рдирд╕реЗрд▓, рддрд░ рдпрд╛ рдЖрдард╡рдбреНрдпрд╛рдкрд╛рд╕реВрди рдиреЛрдВрджрд╡рд╛рдпрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХрд░рд╛. рддреБрдореНрд╣реА SRE team рдЖрд╣рд╛рдд рдХреА рдмрд╛рджрд▓реА team, рд╣реЗ рддреЛ рдЖрдХрдбрд╛ рдард░рд╡рддреЛ.
тПня╕П рдкреБрдвреЗ
Cap рдкрдердХрд╛рдЪрд╛ рд╡реЗрд│ рд╡рд╛рдЪрд╡рддреЛ. рдкреБрдврдЪрд╛ рдзрдбрд╛ users рдЪреЗ рд░рдХреНрд╖рдг рдХрд░рддреЛ: рдЕрдкрдпрд╢рд╛рдЪреЗ рдПрдХ рдард░рд▓реЗрд▓реЗ рдкреНрд░рдорд╛рдг, рдЖрдгрд┐ рддреЗ рд╕рдВрдкрд▓реНрдпрд╛рд╡рд░ рдХрд╛рдп рд╣реЛрддреЗ.
git checkout lesson-02-error-budget-policy