$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Road to SRE culture in a small company
Search
Sobolev Nikita
February 28, 2019
Programming
1
150
Road to SRE culture in a small company
Sobolev Nikita
February 28, 2019
Tweet
Share
More Decks by Sobolev Nikita
See All by Sobolev Nikita
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
180
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
160
Внутреннее устройство сборки мусора в CPython 3.14+ – Сергей Мирянов, PythoNN
sobolevn
0
62
Генератор байткода и байткод генератора, Михаил Ефимов, PythoNN
sobolevn
0
55
Дотянуться до кремния. HighLoad Python: SIMD, GPU – Пётр Андреев, PythoNN
sobolevn
0
66
Проектирование — это когда чувствуешь, а не какие-то там циферки, Николай Хитров, PythoNN
sobolevn
0
90
Continuous profiling, Давид Джалаев, PythoNN
sobolevn
0
96
Михаил Гурбанов – Are you NATS? @ PythoNN
sobolevn
0
120
Дмитрий Бровкин – Почему исправление опечаток сложнее, чем кажется, и как мы с этим српавляемся @ PythoNN
sobolevn
0
46
Other Decks in Programming
See All in Programming
AIコーディングエージェント(NotebookLM)
kondai24
0
120
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
5
18k
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
160
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
390
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
470
TypeScript 5.9 で使えるようになった import defer でパフォーマンス最適化を実現する
bicstone
1
1k
Module Harmony
petamoriken
2
610
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
110
AWS CDKの推しポイントN選
akihisaikeda
1
240
sbt 2
xuwei_k
0
180
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
18k
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
310
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Faster Mobile Websites
deanohume
310
31k
Statistics for Hackers
jakevdp
799
230k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Documentation Writing (for coders)
carmenintech
76
5.2k
A better future with KSS
kneath
240
18k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Transcript
None
Никита Соболев github.com/sobolevn
У меня пока нет SRE. Как?
None
wemake.services/meta Repeatable Software Development Process
None
1. Задача 2. Контроль 3. Деньги
1. Задача 2. Контроль 3. Деньги
None
None
None
None
None
Будет ли кто–то будет хоть что–то делать?
1. Задача 2. Контроль 3. Деньги
sobolevn.me/2018/12/blameless-environment Blameless environment
К технике
Автоматизируем? •Чем строже, тем лучше •Чем чаще, тем лучше •Чем
хрупче, тем лучше
CI / CD • Блокирующий • Полный, но быстрый •
Повторяемый
ХО ХО ХО
Типы тестов • Доктесты • Юнит • Интеграционные • E2E
• Snapshots • Property-based • Мутационные • Контрактные • Регрессионные • Ручные
Required test coverage of 100% reached. Total coverage: 100.00% ===========
8408 passed, 2 skipped in 50.33 seconds =============
github.com/wemake-services/wemake-python- styleguide Линтеры!
None
Есть файл? Нужен линтер!
dotenv-linter polint dennis eslint stylelint hadolint shellcheck yamllint flake8 layer-linter
xenon doc8 markdown-lint remark-lint mypy credo commitlint gherkin-lint
И плагины! vue json html pyi typescript flow jsdoc docker-compose
И конфигурация!
None
IaC • github.com/ansible/ansible • github.com/ansible/molecule • github.com/ansible/ansible-lint
Review Apps docs.gitlab.com/ee/ci/review_apps
Runtime окружение • Одно окружение: очевидный Docker • Одни версии:
не latest • Одни настройки: 12 factor app • Один способ запустить
Dependencies • Детерминированные • Запиненные • Безопасные • Обновляемые
None
Мониторим • Ресурсы • Логи • Ошибки
Три правила Sentry • Используйте • Выкиньте все лишнее •
Интегрируйте с таск–трекером
None
None
Поговорим про код
None
Версионируйте! • Обновляйте и валидируйте спеку • Тестируйте спеку! pypi.org/project/swagger-conformance
client = Client('your.app/swagger.json') strategy_factory = StrategyFactory() operation = client.api.endpoints['/pet']['put'] strategy
= operation.strategy(strategy_factory) print(strategy.example())
{ 'body':{ 'id':110339, 'name':'\U00052ea5\x9d\ua79d\x92\x13\U000f7c436', 'photoUrls':[ '\ua9d9\U0003fb3a\x13\U00025c1c\U000974a8\u3497\n', "\U000b38a4>*\u6683'\U0002cd8f\x0f\n" ], 'tags':[ {
'id':-172930, 'name':'\U000286df\u04dc\U00033563\U00055ba8\x89H' } ] } }
Используйте commitizen
None
None
None
Угомоните хаос • Логика должна быть логичной (DDD) • Пишите
спеки (BDD)
sobolevn.me/2019/02/engineering-guide-to- user-stories
pypi.org/project/pytest-bdd
layer-linter.readthedocs.io Логика – как хороший пирог
My Domain: containers: - accounts - webhooks layers: - usecases
- services - entities
Рефакторите • Рефакторите • Думайте над дизайном (TDD) pypi.org/project/pytest-testmon
None
Типизируйте очень строго!
_ValidUser = NewType('_ValidUser', User) def validate_user(user: User) -> _ValidUser: ...
def persist(user: _ValidUser) -> None: ...
Запросы aka IO
images = Image.objects.filter( category__name='Cats', ) for image in images: print(image.category.name)
Падать на N+1 github.com/jmcarp/nplusone
requests.get('https://my.api/v1/users')
None
Уберите лишние exception'ы github.com/dry-python/returns
def fetch_user_profile(user_id: int) -> 'User': response = requests.get(f'/users/{user_id}') response.raise_for_status() return
response.json()
Таски, очереди, треды, корутины, etc
Timeout'ы и лимиты!
OperationalError: database is locked DATABASES = { 'default': { 'ENGINE':
'django.backends.postgres', 'OPTIONS': { 'timeout': 20, } } }
На тесты тоже нужны таймауты pypi.org/project/pytest-timeout
Как жить? • Мониторинг • Healthchecks • Двойной кот–ревью
None
None
None
Backward incompatible migrations • Думайте головой • Используйте несколько миграций
• Тестируйте pypi.org/project/django-migration-linter
Лайфхаки
Используйте хорошие языки
Используйте нормальную ОС nixos.org
Отдайте инфраструктуру, не нужна она вам
Вините систему, а не людей
Вывод IO
Почитать • sobolevn.me/2019/02/python-exceptions-considered-an- antipattern • sobolevn.me/2019/02/engineering-guide-to-user-stories • engineering.skybettingandgaming.com/2016/02/02/how-we- release-so-frequently/ •
amberonrails.com/move-fast-dont-break-your-api/ • 2factor.net/ru/ • github.com/conventional-changelog/conventional- changelog
Попробовать! • github.com/wemake-services/wemake-django- template • github.com/wemake-services/wemake-vue-template
Присылайте идеи! github.com/sobolevn sobolevn.me