Курс по подготовке
Site Reliability Engineer
Вы узнаете что нужно для эксплуатации больших информационных систем
О курсе и преподавателях
Мы занимаемся эксплуатацией систем, работающих на тысячах машин. За несколько лет у нас накопился опыт, который мы бы хотели передать тем, кто собирается серьёзно заниматься эксплуатацией больших и нагруженных систем. Мы сделали курс, который читаем в Школе Анализа Данных Яндекса и предлагаем вам ознакомиться с программой курса и материалами.
В рамках курса вы узнаете, какие бывают аварии, погрузитесь в работу отдельной машины, изучите как можно диагностировать работу машины, работая на ней в консоли. Далее мы перейдём к распределённым системам: разберём инфраструктурные составляющие, средства диагностики распределённных систем и особенности работы в контейнерной среде.
Надеемся, материалы понравятся вам также, как и нам!
Программа курса
1. Как ломаются большие системы
В этом занятии мы рассматриваем как ломаются большие компьютерные системы, какие бывают поломки и как с ними справляются. Также мы разбираем известный текст Ричарда Кука "How Complex Systems Fail", знаменитый тем, что писался вовсе без оглядки на IT, но оказавшийся очень подходящим нашей области. Завершаем занятие разбором одного из изнцидентов. Слайды

Материалы:
  1. Why Does the Cloud Stop Computing?: Lessons from Hundreds of Service Outages
  2. How to Fight Production Incidents? An Empirical Study on a Large-scale Cloud Service
  3. How Complex Systems Fail
  4. Details of the Cloudflare outage on July 2, 2019
  5. GitLab, Postmortem of database outage of January 31
2. Архитектура суперскалярного центрального процессора
Погружение в компьютерные системы мы начнём с самого базового: с архитектуры современного CPU и того как можно оценивать его производительность несмотря на все неочевидности. Слайды

Материалы:
  1. Computer Architecture: A Quantitative Approach, 6th Edition. Chapter 3: Instruction-Level Parallelism and Its Exploitation. Appendix C: Pipelining: Basic and Intermediate Concepts.
  2. Intel Skylake pipeline
  3. A fast alternative to the modulo reduction
3. Архитектура памяти на одном ядре
После центрального процессора мы говорим об архитектуре памяти: как работает память и кеши, какие у них характеристики работы. Помимо теоретического обзора мы также приводим результаты практических измерений на нескольких современных процессорах. Слайды

Материалы:
  1. Computer Architecture: A Quantitative Approach, 6th Edition. Appendix B: Review of Memory Hierarchy. Appendix L: Advanced Concepts on Address Translation.
  2. What Every Programmer Should Know About Memory
  3. Memory Deep Dive Series
  4. Performance Speed Limits
  5. Quantifying The Cost of Context Switch
4. Многоядерная архитектура памяти
Современные многоядерные процессоры дают большой отпечаток на архитектуру памяти: популярная ныне Non-Unified-Memory-Architecture имеет нетривиальную топологию и за незнание топологии больно наказывает производительностью. Мы посмотрим внимательно на эту архитектуру и разберём какое время работают операции работы с памятью в многопроцессорной системе, в том числе примитивы синхронизации в многопоточных программах. Слайды 1, Слайды 2

Материалы:
  1. Memory Performance of AMD EPYC Rome and Intel Cascade Lake SP Server Processors
  2. Evaluating the Cost of Atomic Operations on Modern Architecture
  3. A Concurrency Cost Hierarchy
  4. MESIF: A Two-Hop Cache Coherency Protocol for Point-to-Point Interconnects (2009)
  5. The Common System Interface: Intel’s Future Interconnect
  6. NUMA Deep Dive Series
5. Обработка сетевого пакета ядром Linux
Передача пакетов по сети может задержаться во многих местах, и одно из таких мест - ядро Linux на отправителе и на приёмнике. Мы разберём движение пакета по ядерному стеку, после чего посмотрим на то как работает балансировка пакетов на разных уровнях OSI модели. Слайды 1, Слайды 2
6. Работа с накопителями постоянной памяти
Огромное число поломок в больших системах связано с выходом из строя накопителей постоянной памяти. К тому же, накопители памяти традиционно были одним из самых медленных компонент компьютера. Мы посмотрим на характеристики современных накопителей и как современные информационные системы ээфективно избегают потери данных при постоянно выходящих из строя накопителях. Слайды

Материалы:
  1. Reading from External Memory
  2. Failure Trends in a Large Disk Drive Population
  3. Lessons and Actions: What We Learned from 10K SSD-Related Storage System Failures
  4. EVENODD: An Optimal Scheme for Tolerating Double Disk Failures in RAID Architectures
  5. Erasure Coding in Windows Azure Storage
  6. Screaming Fast Galois Field Arithmetic Using Intel SIMD Instructions.
7. Диагностика проблем на хосте
У каждого инженера эксплуатации наступает день, когда он видит аномалии на одном из хостов, но вообще не понимает как к ним подступиться: привычная ему система показывает странное и необычное поведение и все ранее работавшие средства диагностики бессильны. К счастью в линуксе есть огромное количество утилит анализа производительности. В этой лекции приводится обзор стандартных утилит и как с их помощью понять что происходит. Слайды

Материалы:
  1. Systems Performance: Enterprise and the Cloud, 2nd Edition
8. Построение надёжной сети
В TCP есть встроенный механизм защиты от перегрузок - congestion control. В лекции разбирается как он работает и как сеть самоподстраивается под решение проблем внутри себя. Также даётся обзор eBPF - нового механизма ядра Linux, позволяющего делать как эффективную фильтрацию пакетов, так и нетривиальную интроспекцию внутрь любой подсистемы ядра.

Материалы:
  1. Computer Networking: A Top-Down Approach, 8th edition. Chapter 3: Transport Layer
9. Дизайн распределённых систем
Есть такая дисциплина - System Design, в которой занимаются проектированием распределённых систем. Вначале мы поговорим о тонкостях работы протокола связи между компонентами таких систем: как правильно ограничивать нагрузку, балансировку и ретраи. Затем вспомним, что важна производительность системы и посмотрим как в рамках System Design можно оценивать необходимое для сервиса железо. Слайды

Материалы:
  1. Alex Xu. System Design Interview – An insider's guide
  2. Stop Rate Limiting! Capacity Management Done Right
  3. Site Reliability Engineering. Chapter 21: Handling Overload. Chapter 22. Addressing Cascading Failures
  4. Site Reliability Workbook. Chapter 12: Introducing Non-Abstract Large System Design
  5. Overload Control for Scaling WeChat Microservices
  6. Using load shedding to survive a success disaster
  7. SRE Best Practices for Capacity Management
  8. SRE Classroom: Distributed PubSub
10. Диагностика распределённых систем
Чем быстрее получается диагностировать проблему в случае её возникновения, тем проще эксплуатировать систему. Мы рассмотрим средства диагностики распределённых систем: мониторинги, логи, трейсы, сбор профилей и ошибок. Слайды

Материалы:
  1. Google Cloud's Operations
  2. Google Cloud Error Reporting
  3. Dapper, a Large-Scale Distributed Systems Tracing Infrastructure
  4. Google-Wide Profiling: A Continuous Profiling Infrastructure for Data Centers
  5. Monarch: Google's Planet-Scale In-Memory Time Series Database
  6. BTrDB: Optimizing Storage System Design for Timeseries Processing
  7. InfluxDB storage subsystem: the TSM files
11. Практики работы SRE
Команды эксплуатации используют в своей работе разные практики: алерты, дежурства, работу с инцидентами и их разбор. Мы поговорим как может быть организована работы команды эксплуатации крупного и постоянно эволюционирущего сервиса. Слайды

Материалы:
  1. Site Reliability Engineering: How Google Runs Production Systems
  2. The Site Reliability Workbook: Practical Ways to Implement SRE
  3. Global Continuous Delivery with Spinnaker
  4. Canary Analyze All The Things: How We Learned to Keep Calm and Release Often
12. Безопасность и контроль ресурсов
В линуксе есть способы изоляции процессов, нацеленные как на контроль потребляемых ресурсов, так и на безопасоность. Мы поговорим про различные такие механизмы. Слайды
13. Оркестрация
Современные крупные сервисы как правило работают в контейнерах в каком-нибудь облаке. Мы поговорим про Kubernetes - популярную систему оркестрации. Во второй части занятия мы поговорим про проблемы масштабирования сервисов внутри облаков и проблемы изоляции таких сервисов друг от друга. Слайды

Материалы:
  1. Autopilot: workload autoscaling at Google
  2. CPI: CPU performance isolation for shared compute clusters
  3. Improving Performance Isolation on Chip Multiprocessors via an Operating System Scheduler
  4. Workload Consolidation in Alibaba Clusters: The Good, the Bad, and the Ugly