Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Антон Палий. Как я из python-разработчика стал первым SRE-инженером в своей команде

Антон Палий. Как я из python-разработчика стал первым SRE-инженером в своей команде

У каждого разработчика есть свой прод. Сервис на проде должен обеспечивать высокий уровень доступности.
Некоторые команды составляют график дежурств, кто-то нанимает админов или devops’ов. В Тинькофф мы поняли, что когда человек с экспертизой разработчика работает над стабильностью прода каждый день, результат получается гораздо круче. Такие люди называются SRE-инженерами. Они занимаются разбором инцидентов, построением полезного мониторинга и согласовывают требуемый уровень доступности сервиса с бизнесом. В своем докладе я расскажу:
- как я из python-разработчика стал первым SRE-инженером в своей команде;
- какой опыт и знания я получил в процессе поддержки кода, который раньше писал.

More Decks by Python Community Chelyabinsk

Other Decks in Programming

Transcript

  1. КАК Я ИЗ PYTHON-РАЗРАБОТЧИКА
    КАК Я ИЗ PYTHON-РАЗРАБОТЧИКА
    СТАЛ ПЕРВЫМ SRE В КОМАНДЕ
    СТАЛ ПЕРВЫМ SRE В КОМАНДЕ
    Палий Антон

    View Slide

  2. ОБО МНЕ
    ОБО МНЕ
    5 лет работаю с python
    2.5 года в tinkoff
    1 год в команде развития надежности
    сервисов

    View Slide

  3. Чатботы
    Голосовые роботы

    View Slide

  4. ПЛАН
    ПЛАН
    Предыстория
    Профессия SRE
    Где пригождались навыки
    программирования

    View Slide

  5. ПРЕДЫСТОРИЯ
    ПРЕДЫСТОРИЯ

    View Slide

  6. ВСЕ ДЕЛАЮТ РАЗРАБЫ
    ВСЕ ДЕЛАЮТ РАЗРАБЫ
    Пишут код
    Поднимают инфраструктуру
    Разбирают инциденты
    etc

    View Slide

  7. ТРЕБОВАНИЯ РАСТУТ
    ТРЕБОВАНИЯ РАСТУТ
    система становится сложнее
    ~200 деплойментов в k8s
    множество бизнес-линий

    View Slide

  8. ЧАСТЕНЬКО ЗАГЛЯДЫВАЮ НА ОГОНЕК
    ЧАСТЕНЬКО ЗАГЛЯДЫВАЮ НА ОГОНЕК

    View Slide

  9. ПЕРЕХОЖУ В SRE
    ПЕРЕХОЖУ В SRE

    View Slide

  10. SRE
    SRE

    View Slide

  11. SITE
    SITE
    RELIABILITY
    RELIABILITY
    ENGINEERING
    ENGINEERING

    View Slide

  12. НАДЕЖДА — ЭТО НЕ СТРАТЕГИЯ
    НАДЕЖДА — ЭТО НЕ СТРАТЕГИЯ
    sre.google/sre-book

    View Slide

  13. КОГДА В ПРОЕКТЕ НУЖНО
    КОГДА В ПРОЕКТЕ НУЖНО
    SRE?
    SRE?
    Сложный
    Нагруженный
    Географически распространенный

    View Slide

  14. SRE ЗАНИМАЕТСЯ
    SRE ЗАНИМАЕТСЯ
    Обеспечением отказоустойчивости
    системы
    Производительностью, оптимальным
    использованием ресурсов
    Улучшением системы
    Разбором инцидентов
    Предотвращением новых
    Дежурством

    View Slide

  15. ОСТАНОВИМСЯ ПОДРОБНЕЕ НА КАЖДОМ
    ОСТАНОВИМСЯ ПОДРОБНЕЕ НА КАЖДОМ
    ИЗ ПУНКТОВ
    ИЗ ПУНКТОВ

    View Slide

  16. ОБЕСПЕЧЕНИЕ ОТКАЗОУСТОЙЧИВОСТИ
    ОБЕСПЕЧЕНИЕ ОТКАЗОУСТОЙЧИВОСТИ
    СИСТЕМЫ
    СИСТЕМЫ

    View Slide

  17. ПРОИЗВОДИТЕЛЬНОСТЬ, ОПТИМАЛЬНОЕ
    ПРОИЗВОДИТЕЛЬНОСТЬ, ОПТИМАЛЬНОЕ
    ИСПОЛЬЗОВАНИЕ РЕСУРСОВ
    ИСПОЛЬЗОВАНИЕ РЕСУРСОВ
    Всегда есть риск того, что нам будут мешать
    шумные соседи
    Мы окажемся шумными соседями
    Ограничения на CPU
    Ограничения на RAM

    View Slide

  18. УЛУЧШЕНИЕ СИСТЕМЫ
    УЛУЧШЕНИЕ СИСТЕМЫ
    процесса доставки приложения в бой
    мониторинга
    логгирования
    алертинга
    процессы

    View Slide

  19. РАЗБОР ИНЦИДЕНТОВ
    РАЗБОР ИНЦИДЕНТОВ
    Поиск причин
    Выработка действий для предотвращения

    View Slide

  20. ДЕЖУРСТВА
    ДЕЖУРСТВА

    View Slide

  21. oncall

    View Slide

  22. РЕДКИЕ ГОСТИ НА DEV СТЕНДАХ
    РЕДКИЕ ГОСТИ НА DEV СТЕНДАХ

    View Slide

  23. ВСЁ ЭТО ДЕЛАЕТСЯ ВО БЛАГО
    ВСЁ ЭТО ДЕЛАЕТСЯ ВО БЛАГО
    СТАБИЛЬНОСТИ ПРОДА, НО
    СТАБИЛЬНОСТИ ПРОДА, НО
    СТАБИЛЬНОСТЬ НУЖНО СЧИТАТЬ
    СТАБИЛЬНОСТЬ НУЖНО СЧИТАТЬ

    View Slide

  24. SLA
    SLA

    View Slide

  25. SLA
    SLA
    Service Level Agreement

    View Slide

  26. SLI
    SLI
    Service Level Indicator

    View Slide

  27. SLO
    SLO
    Service Level Objectives

    View Slide

  28. SLA
    downtime
    day
    downtime
    week
    downtime
    month
    99
    14 min 24
    sec
    1 hour 40
    min
    7 hours 12
    min
    99.9
    1 min 26
    sec
    10 min 5 sec 43 min 12 sec
    99.99 9 sec 1 min 4 min 19 sec
    99.999
    Less than 1
    sec
    6 sec 26 sec

    View Slide

  29. ЧТО ЖЕ ПРИХОДИЛОСЬ ДЕЛАТЬ, ГДЕ БЫЛИ
    ЧТО ЖЕ ПРИХОДИЛОСЬ ДЕЛАТЬ, ГДЕ БЫЛИ
    НЕОБХОДИМЫ НАВЫКИ
    НЕОБХОДИМЫ НАВЫКИ
    ПРОГРАММИРОВАНИЯ
    ПРОГРАММИРОВАНИЯ

    View Slide

  30. ВНОСИЛ ВКЛАД В ДРУГИЕ ПРОЕКТЫ
    ВНОСИЛ ВКЛАД В ДРУГИЕ ПРОЕКТЫ

    View Slide

  31. ЛОГИРОВАНИЕ
    ЛОГИРОВАНИЕ

    View Slide

  32. было
    import threading
    class ThreadLocalCtx(threading.local):
    trace_id: Optional[UUID] = None
    application_name: Optional[str] = None
    thread_name: Optional[str] = None

    View Slide

  33. стало
    class Context(ContextVarStorage):
    trace_id: Optional[UUID] = ContextVarAttribute[UUID]("trace_id", initial=None)
    application_name: Optional[str] = ContextVarAttribute[str](
    "application_name", initial=None
    )
    thread_name: Optional[str] = ContextVarAttribute[str]("thread_name", initial=None)

    View Slide

  34. from contextvars import ContextVar
    from typing import Generic
    from pydantic import BaseSettings
    T = TypeVar('T')
    class ContextVarAttribute(Generic[T]):
    def __init__(self, name: str, initial: T) -> None:
    self._name = name
    self._context_var: ContextVar[T] = ContextVar(name, default=initial)
    def __get__(self, instance: Any, owner: Any) -> T:
    return self._context_var.get()
    def __set__(self, instance: Any, value: T) -> None:
    self._context_var.set(value)

    View Slide

  35. УМЕНЬШАЕМ КОЛИЧЕСТВО МИН ПРИ
    УМЕНЬШАЕМ КОЛИЧЕСТВО МИН ПРИ
    РАЗРАБОТКЕ
    РАЗРАБОТКЕ

    View Slide

  36. from pydantic import BaseSettings
    class BaseHttpClientSettings(BaseSettings):
    url: Url
    def __init_subclass__(cls, **kwargs: Any) -> None:
    if cls.__fields__['url'].default is not None:
    raise RuntimeError("NOPE!")

    View Slide

  37. АВТОМАТИЗАЦИЯ, ВЕЗДЕ АВТОМАТИЗАЦИЯ
    АВТОМАТИЗАЦИЯ, ВЕЗДЕ АВТОМАТИЗАЦИЯ

    View Slide

  38. МОНИТОРИНГ
    МОНИТОРИНГ

    View Slide

  39. САМОПИСНЫЕ АЛЕРТЫ
    САМОПИСНЫЕ АЛЕРТЫ

    View Slide

  40. АВТОГЕНЕРАЦИЯ ДОСОК
    АВТОГЕНЕРАЦИЯ ДОСОК

    View Slide

  41. РАБОТА С МЕТРИКАМИ
    РАБОТА С МЕТРИКАМИ

    View Slide

  42. ВЫВОДЫ
    ВЫВОДЫ

    View Slide

  43. ОПЫТ РАЗРАБОТКИ ПОМОГАЛ В РАЗБОРЕ И
    ОПЫТ РАЗРАБОТКИ ПОМОГАЛ В РАЗБОРЕ И
    ПОЧИНКЕ ТЕХ ИЛИ ИНЫХ КОМПОНЕНТОВ
    ПОЧИНКЕ ТЕХ ИЛИ ИНЫХ КОМПОНЕНТОВ

    View Slide

  44. РАЗРАБ В ИНФРАСТРУКТУРЕ - ХОРОШО,
    РАЗРАБ В ИНФРАСТРУКТУРЕ - ХОРОШО,
    ЕСЛИ ОН ПОДХОДИТ К ИНФРАСТРУКТУРЕ,
    ЕСЛИ ОН ПОДХОДИТ К ИНФРАСТРУКТУРЕ,
    КАК К СВОЕМУ КОДУ
    КАК К СВОЕМУ КОДУ

    View Slide

  45. ИЗМЕРЯЙТЕ РАБОТУ ВАШЕГО ПРОДА
    ИЗМЕРЯЙТЕ РАБОТУ ВАШЕГО ПРОДА

    View Slide

  46. ДЕЛАЙТЕ КОД, КОТОРЫЙ МОЖНО
    ДЕЛАЙТЕ КОД, КОТОРЫЙ МОЖНО
    МОНИТОРИТЬ
    МОНИТОРИТЬ

    View Slide

  47. ВОПРОСЫ
    ВОПРОСЫ

    View Slide