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 В КОМАНДЕ Палий Антон
  2. ОБО МНЕ ОБО МНЕ 5 лет работаю с python 2.5

    года в tinkoff 1 год в команде развития надежности сервисов
  3. КОГДА В ПРОЕКТЕ НУЖНО КОГДА В ПРОЕКТЕ НУЖНО SRE? SRE?

    Сложный Нагруженный Географически распространенный
  4. SRE ЗАНИМАЕТСЯ SRE ЗАНИМАЕТСЯ Обеспечением отказоустойчивости системы Производительностью, оптимальным использованием

    ресурсов Улучшением системы Разбором инцидентов Предотвращением новых Дежурством
  5. ПРОИЗВОДИТЕЛЬНОСТЬ, ОПТИМАЛЬНОЕ ПРОИЗВОДИТЕЛЬНОСТЬ, ОПТИМАЛЬНОЕ ИСПОЛЬЗОВАНИЕ РЕСУРСОВ ИСПОЛЬЗОВАНИЕ РЕСУРСОВ Всегда есть

    риск того, что нам будут мешать шумные соседи Мы окажемся шумными соседями Ограничения на CPU Ограничения на RAM
  6. ВСЁ ЭТО ДЕЛАЕТСЯ ВО БЛАГО ВСЁ ЭТО ДЕЛАЕТСЯ ВО БЛАГО

    СТАБИЛЬНОСТИ ПРОДА, НО СТАБИЛЬНОСТИ ПРОДА, НО СТАБИЛЬНОСТЬ НУЖНО СЧИТАТЬ СТАБИЛЬНОСТЬ НУЖНО СЧИТАТЬ
  7. 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
  8. ЧТО ЖЕ ПРИХОДИЛОСЬ ДЕЛАТЬ, ГДЕ БЫЛИ ЧТО ЖЕ ПРИХОДИЛОСЬ ДЕЛАТЬ,

    ГДЕ БЫЛИ НЕОБХОДИМЫ НАВЫКИ НЕОБХОДИМЫ НАВЫКИ ПРОГРАММИРОВАНИЯ ПРОГРАММИРОВАНИЯ
  9. стало 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)
  10. 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)
  11. 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!")
  12. ОПЫТ РАЗРАБОТКИ ПОМОГАЛ В РАЗБОРЕ И ОПЫТ РАЗРАБОТКИ ПОМОГАЛ В

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

    ЕСЛИ ОН ПОДХОДИТ К ИНФРАСТРУКТУРЕ, ЕСЛИ ОН ПОДХОДИТ К ИНФРАСТРУКТУРЕ, КАК К СВОЕМУ КОДУ КАК К СВОЕМУ КОДУ