Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
160
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
190
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
170
Внутреннее устройство сборки мусора в CPython 3.14+ – Сергей Мирянов, PythoNN
sobolevn
0
67
Генератор байткода и байткод генератора, Михаил Ефимов, PythoNN
sobolevn
0
64
Дотянуться до кремния. HighLoad Python: SIMD, GPU – Пётр Андреев, PythoNN
sobolevn
0
72
Проектирование — это когда чувствуешь, а не какие-то там циферки, Николай Хитров, PythoNN
sobolevn
0
100
Continuous profiling, Давид Джалаев, PythoNN
sobolevn
0
110
Михаил Гурбанов – Are you NATS? @ PythoNN
sobolevn
0
140
Дмитрий Бровкин – Почему исправление опечаток сложнее, чем кажется, и как мы с этим српавляемся @ PythoNN
sobolevn
0
55
Other Decks in Programming
See All in Programming
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
240
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.4k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
220
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
4
1.1k
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
640
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
430
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
760
Go コードベースの構成と AI コンテキスト定義
andpad
0
150
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
510
これならできる!個人開発のすゝめ
tinykitten
PRO
0
140
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
160
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
Exploring anti-patterns in Rails
aemeredith
2
220
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
150
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
140
Building the Perfect Custom Keyboard
takai
2
670
GraphQLとの向き合い方2022年版
quramy
50
14k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.8k
How to build a perfect <img>
jonoalderson
1
4.8k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Mind Mapping
helmedeiros
PRO
0
45
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